x2goclient-4.1.2.3/AUTHORS0000644000000000000000000000016514447111613011677 0ustar Oleksandr Shneyder Heinz-Markus Graesing x2goclient-4.1.2.3/ChangeLog0000644000000000000000000062257514447111615012422 0ustar x2goclient (4.1.2.3-0x2go1) unstable; urgency=medium [ Oleksandr Shneyder ] * New upstream version (4.1.2.3): - Load alternative image resources from specified folder. - Set correct aspect ratio for x2go and ON logos. - Download alternative resource files from http server. - Support for PNG background images. - Display state of broker connection in status bar. - Client can synchronize sessions with broker. Broker need to send syncinterval value in the client config section. - Set min width of session status label. - set clipboard mode of x2gokdriveclient in cmd line option. - Fix maximizing client window in thinclient mode with Qt5 (bullseye). - Add mime type application/x-x2go. X2Go Client can now automatically open session files with .x2go extension. - X2Go Client will send it's version to the broker when sending client event. - Don't close X2Go Client if settings dialog is called before broker auth. - X2Go Client will send it's OS name to the broker when sending client event. - Don't exit if connection to HTTP broker is failed when sync sessions. - Support for HTTP(S) urls in the session icons when using http broker. - Fix loading session icon to system tray when using broker. - Add --debug argument to x2gokdriveclient in debug mode. - Setting debug filter rules for QT>=5.2 - Implement different view modes for sessions explorer: Favorite sessions, running sessions, all sessions. - Improve view modes in broker mode. - Set toolTip with detailed information for session button. - Show session path in session button in Favorite and Running views. - Improve synchronisation in broker mode. - Fix loading HTTP icon in pass dialog in broker mode. - Replace QFont::Thin with 0 to keep compatibility with Qt4. - Add special ACL for exported directories in Windows client. - Support for rootless X2GoKdrive sessions. - Fixed build with Qt5 on Windows. - Do not show empty folders in session explorer. - Support for OPENSSH PRIVATE KEY format sent from broker. - Do not show client in broker mode if startet in "hidden" mode. - Enable/Disable session view buttons inside of sessions explorer. - Add splash screen option when starting in hidden mode. - replace with user's home dir in exports directories, when exporting session default directories. - create default export directory if not exists. - send to broker xdmcpserver in command option when starting xdmcp session. - improve processing stderr from nxproxy. - support for recent cygwin binaries and nxproxy 3.5.99.x all cygwin binaries and DLLs should be moved into the INSTDIR/bin directory by Windows installer. - for x2gokdrive sessions, when auto kbd layout is chosen, x2goclient will try to set the same kbd layout on server as on the client. - add "noresize" setting, which makes the proxy window not resizable for user. - on Windows SSHD will only listen 127.0.0.1 to avoid FW warnings. - on Windows check the location of cgwin binaries in and in /bin. [ Ryan Schmidt ] * New upstream version (4.1.2.3): - x2goclient.pro: use the right C++ standard library on OS X/macOS. [ Melroy van den Berg ] * New upstream version (4.1.2.3): - src/sshmasterconnection.c: send EOF before closing channel. - src/sshmasterconnection.c: return false if login check remote command execution failed. - src/sshmasterconnection.c: refactor some of the channel loop and fix channel/session closes. - src/sshmasterconnection.c: fix 'when not' password auth. Avoids double error messages. - src/sshmasterconnection.c: correct retval check. - src/sshmasterconnection.c: explicitly mark function parameters as unused. - .gitignore: ignore Visual Studio temporary files. Fixes: #1469. [ Mihai Moldovan ] * New upstream version (4.1.2.3): - src/sshmasterconnection.{c,h}: fix builds, new function should have been registered and not static, but private. - .gitignore: add debian/control, since it's now auto-generated. - Makefile: support version switching through a QT_VERSION variable - might be overridden via environment variables or the make call. - x2goclient.spec: add version switching support. Use Qt 5 for FC31+, RHEL 8 and *SuSE 15.3+. - x2goclient.spec: don't try to prepend %{_qt4_bindir} if the macro is not defined. - Makefile: allow passing down variables that are safe to pass via the environment. - x2goclient.spec: fix condition with maybe-undefined macro. - x2goclient.spec: typo fix in vendor macro. - x2goclient.spec: expand %{_qt4_bindir} to integer if it's set, instead of using it as a string in the condition (which then leads to parsing error). - x2goclient.spec: rework Qt5 dependencies. Use a common set of PkgConfig()-based dependencies for the Qt 5 libraries themselves and only make the linguist tools (lrelease) conditional. - Makefile: make controllable variables default-if-not-set to allow overriding via the environment. - Makefile: invoke make as $(MAKE) to keep original invocation. - x2goclient.spec: fix missing %endif in Qt-4-BuildRequires section. - x2goclient.spec: use %{_qt5_bindir} macro analogous to the Qt 4 variant. - x2goclient.spec: correctly quote PATH overrides. - x2goclient.spec: fix syntax error in Qt 5 PATH override. - x2goclient.spec: add BuildRequires on Qt5X11Extras. - x2goclient.spec: also use/handle %{_libqt5_bindir}, as used by *SuSE. - x2goclient.spec: add BuildRequires on Qt5Network. OpenSuSE Tumbleweed split the pkgconfig files up into individual packages, while older versions ship all of them in libqt5-qtbase-devel. The former does not automatically use that package any longer and hence will not pull in all library packages automatically. That's not a bad change, since it forces us to spell out the dependencies correctly. - src/onmainwindow.cpp: add Cancel standard shortcut to cancel button in login window. Change requested by Max-Planck-Institut für Kolloid- und Grenzflächenforschung Potsdam. - src/onmainwindow.cpp: consolidate Resume button enabling state in ONMainWindow::initSelectSessDlg (). - src/onmainwindow.{cpp,h}: add notice explaining how to resume running sessions. Change requested by Max-Planck-Institut für Kolloid- und Grenzflächenforschung Potsdam. - src/onmainwindow.cpp: add Cancel standard shortcut to cancel button in session selection view. - src/onmainwindow.cpp: set word wrapping on running label. - src/onmainwindow.cpp: increase height of session selection dialog in mini mode. - src/onmainwindow.cpp: increase fixed height of session selection dialog in normal mode and also set as minimum height. - src/onmainwindow.cpp: unbreak on Qt 4 by emulating QKeySequence::Cancel. - src/onmainwindow.cpp: unbreak more and make sure that the code actually works on older systems. A very important part of the magic is using the old Qt4 SIGNAL/SLOT syntax and making sure to drop parameters on both sides, so that the default slot parameter is used, which animates the button for 150 ms. - src/onmainwindow.cpp: fix session creation date/time display. The data returned by the server was changed to an ISO-date-formatted one in 2011, but that change was not carried over to the client. We've had silly dates for more than 10 years and nobody noticed. Go figure. - src/onmainwindow.cpp: convert server-reported time to human readable time in Qt's standard format in session list view. - handle_mxe.sh: rework, make most variables lowercase, change spacing, use proper if-else blocks, do not use special bash features for string comparison etc. - macbuild.sh: qmake never supported -config, it was always CONFIG(+)='something'. - config_linux_static.sh: also switch from -config to CONFIG+='...'. - {handle_mxe.sh,x2goclient.pro}: make mxe selectable via CONFIG option and prepare selector in x2goclient.pro. - x2goclient.pro: also select on win32 and not just win32-*, fix whitespace. - x2gohelper/Makefile.mxe: more quoting. - Windows: Update PuTTY from 0.73 to 0.78. - debian/preprocessor.pl: typo fixes only. - misc: pre-release copyright update. - man/man1/x2goclient.1: pre-release date update. * debian/control: + Move to debian/control.in. * debian/control.in: + Switch to priority: optional. "extra" has been deprecated long ago. Pulled from Mike's changes. + Drop x2goplugin{,-{provider,dbg}}. It's been dead long enough. + Add Qt version switching support. + Add build-dependency upon lsb-release. Should be always part of a dependency of essential or base packages, but make sure we have it. + Add build-dependency upon libencode-locale-perl, needed for our preprocessor Perl script. + Add build-dependency upon m4, needed by our preprocessing shell script. * debian/copyright: + Switch Upstream-Contact to myself. Pulled from Mike's changes. + Add new license "GPL-2+~OpenSSL" for the modified GPL 2+ license including the OpenSSL exception and use that where appropriate. Pulled from Mike's changes. + Move GPL-3 definition out-of-line. Pulled from Mike's changes. + Update notices. * debian/rules: + Preprocess files with an ".in" suffix in the "debian" directory. Mostly adapted from the firefox package. + Add Qt 4/5 switching, based upon the base system definition. Mostly adapted from x2gomatebindings. + Force re-generation of debian/control in clean rule. + Add force variables to bypass autodetection via lsb-release. This will be used by our buildscripts. + Do not force re-generation of debian/control in clean rule. Its executed non-chrooted by sbuild before building the source package, so forcing will overwrite the file our buildscripts generated with something not matching the target system. + Assign default values to the FORCE_{VENDOR,RELEASE_VER} variables - thus allowing passed-in values through the environment. + Utilize new version switching in main Makefile by overriding the QT_VERSION make variable. + Fix version detection on testing and unstable. lsb_release -r currently only outputs n/a on these suites, so fall back to a rather fragile detection via apt-cache policy instead. + Fix version detection on testing and unstable V2. Remove a= tag. * debian/: + New file "watch". We won't need this per se (since we're upstream and there cannot be a newer version of the Debian package without releasing it first), but it might make downstream's life easier. Or not, depending on whether it's kept up-to-date correctly or not. Pulled from Mike's changes. + New file "upstream/metadata". Same reasoning as for "watch". Pulled from Mike's changes. + New file "preprocessor.pl". Simple text file preprocessor supporting basic condition logic. + New file "proprocess.sh". Used to apply replacement tokens and run our new preprocessor. [ Mike Gabriel ] * New upstream version (4.1.2.3): - Makefile: Install x-x2go.xml MIME database source file for .x2go file extension. * debian/x2gocient.install: + Install x-x2go.xml into bin:pkg x2goclient. * x2goclient.spec: + Install x-x2go.xml into bin:pkg and run update-mime-database during postinst. [ Ulrich Sibiller ] * New upstream version (4.1.2.3): - desktop/x2goclient.desktop: drop Maemo support. - res/img/icons: drop Maemo support, remove hildon subdirectory. - res/img/svg: drop Maemo support, remove bg_hildon.svg. - res/resources.qrc: drop Maemo support, remove bg_hildon.svg entry. - src/{{InteractionDialog,configdialog,connectionwidget, editconnectiondialog,folderbutton,mediawidget,ongetpass, onmainwindow,printprocess,printwidget,sessionbutton, sessionmanagedialog,sessionwidget,settingswidget, sharewidget}.cpp,x2goclientconfig.h}: drop Maemo support. - /: drop Maemo support, remove x2goclient.pro.maemo. - /: add README.mxe, describing MXE builds. - /: add handle_mxe.sh, MXE control script. - x2goclient.pro: use different parameters for MXE builds. - x2gohelper/x2gohelper.cpp: use lower-case header files. - x2gohelper/: add Makefile.mxe. -- X2Go Release Manager Wed, 28 Jun 2023 22:00:51 +0200 x2goclient (4.1.2.2-0x2go1) unstable; urgency=medium [ Oleksandr Shneyder ] * New upstream version (4.1.2.2): - Add SSH instruction to list of errors if keyboard-interactive auth has failed. - Add new brocker feature. Broker can send to client some configuration in the section START_CLIENT_CONFIG - END_CLIENT_CONFIG. For the moment is supported option events=bool. If true, client sending to broker events: CONNECTING, CONNECTED, SUSPENDING, TERMINATING, FINISHED. It's not a real session state, but rather the state of X2Go Client. - Save session command in resumingSession.command. - Send in broker event the duration of session on client. - If client is configured to send events, the broker can ask client to send ALIVE events. To do this, broker should send config option "liveevent" (int). It means, if liveevent=10, client will send ALIVE event to broker every 10 seconds when the client connected to X2Go Session. - Broker can send to client command to suspend or terminate the session as an answer to the client event message. For this broker should send to client SUSPEND ID or TERMINATE ID. - Client now sends "login" parameter to the broker when executing task "selectsession". Before client just sent a username on the broker and it was imposiible to find out user name on X2Go server, which is not always the same as broker username. This won't break a compatibility with previous broker as they just will ignore this parameter. - X2Gokdrive support for X2GoClient. - Fix authentification on http broker when sending event. - Fix resuming sessions on multiple servers. - Initializing sessionId, command and display for direct RDP to complay with standard sessions. - Direct RDP sesion send to broker event CONNECTED instead of CONNECTING at start of RDP client. - Fixing setting correct session command when resuming the session. - Don't exit if sending event to http broker has failed. - If using x2go broker and ssh proxy check for the option "usebrokeruserforproxy" in the session file. If it's "true", use the same username for the proxy as broker login. - Broker can send to client the number of suspended and running sessions for each session type. Client will display this information to user on session button. - update copyright years in about dialog. - Do not show password in debug output of HTTP broker. - Fix crashing if the path for automount in the session config file in wrong format. Supporting both Windows and Linux path in automount format. Check if path exists before mounting. - Do not show Pulseaudio warning on Windows, if Pulseaudio is disabled in settings or by command line. - Improve request handling in HTTP broker. - Add possibility to suspend and terminate sessions from session selection dialog in broker mode. - Do not delete session from list if terminating of session is canceled. [ Mihai Moldovan ] * New upstream version (4.1.2.2): - src/printwidget.cpp: add QButtonGroup include, fixes compile errors with Qt 5.11+. Fixes: #1307. - macbuild.sh: switch to bundling PulseAudio 12.1 since it's now available in MacPorts. - x2goclient.pro: detect libssh and libssh_threads via pkgconfig on UNIX-based platforms. libssh_threads is optional if the libssh version is high enough. - x2goclient.pro: let static Linux configuration override the new pkgconfig-based libssh usage. - x2goclient.pro: make system a non-variable call. - x2goclient.pro: fix qmake control flow for libssh logic, we really wanted to use else if for the Windows section and have the general else section being the general fallback. - x2goclient.pro: fix quoting issue in system() call. Qmake's quoting rules are really weird. - macbuild.sh: switch to bundling PulseAudio 12.2 since it's now available in MacPorts. - res/i18n/x2goclient_cs.ts: whitespace and other fixups. - src/x2goclient.cpp: change HTTP to HTTPS links where needed. - src/x2goclient.cpp: do not spawn UNIX cleanup helper if arguments that let X2Go Client terminate right away have been passed. More work is needed here, but that should cover the most basic bits. - src/onmainwindow.{cpp,h}: remove left-over references to agentCheckTimer and slotCheckAgentProcess (). - src/onmainwindow.cpp: fix various broken qCritical () calls. - src/{onmainwindow.{cpp,h},{sshmasterconnection,help}.cpp}: let users control libssh debugging via the new parameters --libssh-debug and --libssh-packetlog. Properly document the new switches and their implications. - src/sshmasterconnection.cpp: drop DEBUG preprocessor conditional blocks. We have never actually disabled it and x2goDebug () will not write out anything if debugging has not been requested, so we already have a soft condition check for every x2goDebug () call. - src/x2goclient.cpp: do not use std::array since that's a C++11 feature, just live with plain C arrays for now. - x2goclient.pro: fix libssh_threads logic again. Ubuntu Bionic/18.04 ships a pre-release version of 0.8.0, which is tagged as that version, but really based upon 0.7.x and still has/needs a libssh_threads library. Big "Wat?" to you, Canonical. Fixes: #1320. - src/x2goclient.cpp: fix array length calculation. - Windows: Update PuTTY from 0.70 to 0.71. Fixes quite a list of issues discovered through the EU-funded bug bounty programme. Not all are relevant to X2Go Client. - Windows: upgrade bundled VcXsrv to 1.20.1.4. - src/sshmasterconnection.cpp: use info (protocol) log level with --libssh-debug and debug (packet) log level with --libssh-packetlog. - src/sshmasterconnection.cpp: fix compiler warning due to mismatching argument with older libssh versions. - Makefile: clear out LDFLAGS, add new (cleared) LIBS variable and pass down as QMAKE_LIBS. The previous behavior was leading to compile failures on arm64 machines (albeit only old distro versions, apparently), because QMAKE_LFLAGS is being put on the command line *before* the actual object files to be included/linked, which is an error for system libraries. Builds will still fail after this commit, but that's okay. - x2goclient.pro: add libraries that we always want to use on Linux correctly to LIBS and use a bigger catch clause. That should work much better, since linux-g++ and linux-g++-64 are x86-specific, while there are way more potentially useful targets like linux-aarch64-gnu-g++, clang, llvm, icc etc. - x2goclient.pro: while a linux scope seems to work fine with Qt5, Qt4 doesn't recognize that, so add another linux-* catch. - Windows: add support for x3270-fonts, including adding a pretty nasty but necessary fonts.* file regeneration hook. - {x2goclient,help,onmainwindow}.cpp: implement new --bypass-cleanup-helper parameter. - src/onmainwindow.cpp: fix building with Qt 4.6, currently the latest version available in EPEL 6. - src/onmainwindow.cpp: unbreak builds by fixing syntax error. - src/onmainwindow.cpp: also unbreak old EPEL 6 builds. - src/onmainwindow.cpp: add (and prefer) non-compat-symlink scp server location for 64-bit-based Gentoo distros (17.1+ profiles). Fixes: #1393. - res/i18n/x2goclient_*.ts: replace changed source strings, no retranslations required. - src/httpbrokerclient.cpp: do not leak password length in debug output either. - src/sessionwidget.cpp: stop parsing proxy address as "host:port: if the address contains a colon. Fixes: #1418. We don't do this for the "normal" host address and this behavior clashes with IPv6 addresses. We COULD, theoretically, keep it, but that would require writing an arbitrary address parser. Too much effort for little gain. - src/onmainwindow.cpp: also remove proxy "host:port" parsing at connect time. Fixes: #1418. - macbuild.sh: switch to bundling PulseAudio 13.0 since it's now available in MacPorts. - src/onmainwindow.cpp: disable "left click" action on OS X/macOS. This platform always gets a left click event, even when right clicked. May sound weird first, but this behavior is consistent between all applications - tray icons can be clicked via either button and will always trigger a context menu. Let X2Go Client behave the same way. - src/sshprocess.cpp: strip ~/, ~user{,/}, ${HOME}{,/} and $HOME{,/} from destination paths in scp mode. Fixes: #1428. This was already necessary for pascp (PuTTY-based Windows solution for Kerberos support), but newer libssh versions with the CVE-2019-14889 also interpret paths as literal strings. - src/SVGFrame.cpp: simplify implementation a lot. Only paint data onto the widget in the paintEvent () function. Drop setting a palette based upon the rendered SVG image, which has been very wrong to do from the beginning and only lead to visual glitches. Correctly repaint single-frame SVG files. - src/sshmasterconnection.cpp: work around lupdate warning by adding another block in the #else preprocessor branch. - res/i18n/x2goclient_*.ts: update translation files. - Windows: Update PuTTY from 0.71 to 0.73. Fixes another round of issues discovered through the EU-funded bug bounty programme and other security problems. - src/onmainwindow.cpp: stop PulseAudio from spamming logs after a client disconnects. Fixes: #1425. Patch based on one submitted by Ville Salmela. - src/onmainwindow.cpp: instead of searching for "sftp-binary", try to look for "sftp-server" in the Qt 5.x code path. Luckily this only affects cases where we bundle sftp-server (which we don't) or where sftp-server is actually part of $PATH (which it usually shouldn't be). - Windows: upgrade bundled VcXsrv to 1.20.6.0. - Windows: upgrade PulseAudio from 7.1 to 13.0. - Windows: remove libz. Was previously used by libzip, which has not been shipped for quite some time. - Windows: Update Win32 OpenSSL from 1.0.2n to 1.0.2u. Implicit. - Windows: Upgrade libssh from 0.7.4 to 0.9.3 (while maintaining Pageant support). Drop libssh_threads library not provided (or used) any longer. - x2goclient.pro: update comment mentioning that libssh does not provide pkgconfig files on non-UNIX/Windows platforms any longer and drop libssh_thread linkage. - res/i18n/x2goclient_nl.ts: add missing singular form to a multi-form entry. - res/i18n/x2goclient_cs.ts: fix up whitespace and mark actually finished translation string as such, also removing my previous comment. - res/i18n/x2goclient_nb_no.ts: fix up whitespace and typos. - res/i18n/x2goclient_de.ts: better translate UNIX cleanup helper and fix "X2Go Client" as "X2GoClient" globally. - misc: pre-release copyright update. - src/onmainwindow.cpp: update in-code copyright notice. - res/i18n/x2goclient_*.ts: update copyright notice in about dialog manually. - src/onmainwindow.cpp: add comment for translators encouraging them to add themselves to copyright notice. - res/i18n/x2goclient_*.ts: update after source code changes and comment addition. - res/i18n/x2goclient_*.ts: mark copyright translation string as unfinished for already translated languages (but Finnish) to alert translators of the new comment. - man/man1/x2goclient.1: pre-release date update. * debian/control: + Add build-depend on pkg-config. * x2goclient.spec: + Build-depend on pkg-config. + EPEL packages need to depend upon pkgconfig for now, not pkg-config. + Pull in redhat-rpm-config manually. This should probably be done by something else, like... gcc or qmake or qt(4)-dev, but it isn't. + Try to ignore gettext-tools-mini on *SuSE to force installation of the new/renamed gettext-runtime-mini package. + It's %endif, not %fi. + Revert the gettext-tools-mini change, was caused by an outdated obs-build version. [ Mike Gabriel ] * New upstream version (4.1.2.2): - Add support for Nix OS for common_sftp_dirs's hard-coded sftp-server paths. - src/sessionwidget.cpp: Rename shadowing sessiontype to 'X2Go/X11 Desktop Sharing'. - man/man1/x2goclient.1: Add explanation for the --broker-name option. - res/resources.qrc: Add Czech translation file. - Update qt_.qm files from Qt5 v5.11.2. - Rename radion button lables for xfreerdp options' style. * debian/control: + In x2goclient R, prefer freerdp2-x11 over rdesktop over freerdp-x11 (which is broken these days anyway). + In x2goclient D, add x2gokdriveclient. + In x2goclient D, add hello as an alternative to x2gokdriveclient. Works around non-available x2gokdriveclient on Debian jessie. [ Tom Ruzicka ] * New upstream release (4.1.2.2): - Add new translation: Czech. - Second update round of Czech translation + enable it in x2goclient.pro. [ Ulrich Sibiller ] * New upstream release (4.1.2.2): - src/sshmasterconnection.cpp: close channel on failure in checkLogin (). - src/sshmasterconnection.{cpp,h}: skip checkLogin() if hostname starts with "!". Some special ssh proxies will not allow arbitrary commands. checkLogin() will break these sessions because it tries to run the echo command on the proxy. By specifying a "!" as the first character of the (proxy) hostname you can instruct x2goclient ot skip the checkLogin() call altogether. Note that this will break proxies that require you to change you password or some other type of interaction. As this is added to SshMasterConnection it is also valid to specify that for the server hostname although this is not very useful. [ Jos Wolfkamp ] * New upstream version (4.1.2.2): - res/i18n/x2goclient_nl.ts: update Dutch translation file. [ Sébastien Ducoulombier ] * New upstream version (4.1.2.2): - res/i18n/x2goclient_fr.ts: update French translation file. - res/i18n/x2goclient_fr.ts: add missing sentence and UTF-8-ize entries. [ Ruda Vallo ] * New upstream version (4.1.2.2): - res/i18n/x2goclient_cs.ts: update Czech translation file. [ Klaus Ade Johnstad ] * New upstream version (4.1.2.2): - res/i18n/x2goclient_nb_no.ts: update Bokmål (Norway) translation file. - res/i18n/x2goclient_nb_no.ts: update Bokmål (Norway) translation file. [ Stefan Baur ] * New upstream release (4.1.2.2): - res/i18n/x2goclient_de.ts: update German translation file. -- X2Go Release Manager Wed, 12 Feb 2020 22:42:00 +0100 x2goclient (4.1.2.1-0x2go1) unstable; urgency=medium [ Mihai Moldovan ] * New upstream version (4.1.2.1): - src/onmainwindow.cpp: only add the StrictKeyModes sshd_config parameter when running on Windows. -- X2Go Release Manager Mon, 25 Jun 2018 22:19:11 +0200 x2goclient (4.1.2.0-0x2go1) unstable; urgency=medium [ Mike DePaulo ] * New upstream version (4.1.2.0): - src/sshmasterconnection.cpp: Do not attempt to perform Interaction with SSH Server (e.g. for changing expired password) when using GSSAPI/Kerberos because the interaction code does not support it yet. Fixes: #1258 - Windows: Update PuTTY from 0.68 to 0.70, which fixes PuTTY vulns vuln-indirect-dll-hijack-2 & vuln-indirect-dll-hijack-3. Note that x2goclient was only ever affected if the permissions on the installation folder were changed to give users write access, or if x2goclient was copied/extracted to a folder where users could write. - Windows: Update Win32 OpenSSL from 1.0.2k to 1.0.2n Fixes several CVEs - Windows: Upgrade bundled VcXsrv from 1.17.0.0-3 (X2Go/Arctica Build) to 1.20.0.0 (upstream build) + Fixes https://github.com/ArcticaProject/nx-libs/issues/600 + Incompatible with XP & Vista + Unmodified except for strip-nondeterminism being run on .gz files [ Oleksandr Shneyder ] * New upstream version (4.1.2.0): - don't start gpg agent for PGP card authentication. Use system agent instead. - change search string for pcsc_scan. - destroy unused SSH sessions for LDAP authentication. [ Mihai Moldovan ] * New upstream version (4.1.2.0): - misc: update version to 4.1.2.0. - res/img/svg: add new lxqt.svg icon file (really helix.svg). - res/img/icons/*x*: add new rasterized lxqt.png files in different sizes. - res/qresources.qrc: add new lxqt files. - src/{onmainwindow.cpp,session{button,widget}.{cpp,h}}: add support for LXQt. Fixes: #1263. - src/sshmasterconnection.cpp: stop libssh/OpenSSL from querying for a passphrase if started with a controlling terminal. - x2goclient.pro: remove plugin references. - misc: change http:// to https:// where appropriate, but in actual code and translation files for now. - Makefile: remove plugin references. - Makefile: remove x2goclient_*.qm files in clean rule. - x2gobrowserplugin-2.4_1/: remove. - provider/: remove. - INSTALL: remove plugin references. - {{build,config}_win_plugin.bat,config_linux_{,static_}plugin.sh}: remove. - config_win.bat: remove plugin references. - src/{configdialog.cpp,onmainwindow{.cpp,{,_privat}.h}}: remove plugin references. - src/editconnectiondialog.cpp: do not connect signals to slots that do not exist on non-Linux platforms. - src/onmainwindow.cpp: add -nopn parameter to VcXsrv startup options, making the binary fail if it wasn't able to bind the requested port on all addresses. - src/onmainwindow.cpp: print out current DISPLAY value in debug log while starting X.Org Server on Windows. - src/onmainwindow.{cpp,h}: don't error out directly if starting the X.Org Server failed on Windows. Instead, try starting it three times, each time with a higher DISPLAY offset. On busy client machines, several clients raced for the sockets previously and often failed to start. Also check if the server binary actually is still alive before doing the TCP connection checks. A dead server won't be able to listen on a socket in the first place. - {src/{onmainwindow.{cpp,h},help.cpp},man/man1/x2goclient.1}: add new option --xserver-start-limit, replacing the formerly hardcoded limit of three tries. - src/onmainwindow.{cpp,h}: fix compile error on Windows - use std::size_t instead of std::ssize_t, treat zero as infinity value while parsing option value. - src/onmainwindow.cpp: handle a disabled X.Org Server start limit correctly. - src/onmainwindow.cpp: fix other compile errors/typos. - src/onmainwindow.cpp: another compile error/typo fix. - src/onmainwindow.cpp: let client recognize new --xserver-start-limit param correctly. - src/onmainwindow.cpp: add -silent-dup-error parameter to VcXsrv startup options, forcing it to silently fail without showing a dialog and thus keeping the process running. - src/onmainwindow.cpp: re-add periodic xmodmap keyboard sync for OS X/macOS platforms. Was dropped some time ago by accident. - src/onmainwindow.cpp: fix compile error on OS X/macOS. - copy-deps-win32.bat: update to 20160121-4 Cygwin bundle, shipping with chgrp. - src/onmainwindow.cpp: fix user-facing error messages in Windows X.Org Server startup functions. - src/pulsemanager.cpp: use QByteArray's constData () instead of data (), since we'll never modify the data anyway. - src/onmainwindow.cpp: hook-in chgrp for ~/.x2go/etc on Windows platforms to work around a Cygwin permissions bug. Fixes: #1156. - src/onmainwindow.cpp: QProcess:nullDevice () is only available on Qt 5.2+, so use a workaround for older versions. - src/onmainwindow.cpp: actually pass the correct group ID to the chgrp call and make sure that the warning dialog box also appears whenever the exit code indicates a failure. - src/onmainwindow.{cpp,h}: remove Cygwin permissions workaround via chgrp. - copy-deps-win32.bat: update to 20180615-1 Cygwin bundle, shipping with a further modified OpenSSH Server version at 7.7p1-1-x2go1 and without chgrp. - src/onmainwindow.cpp: disable private host key permissions check in OpenSSH Server on Windows. Fixes: #1156. - res/i18n/x2goclient_*.ts: update translation files. - res/i18n/x2goclient_fi.ts: whitespace and other fixups. - res/i18n/x2goclient_fi.ts: add missing numerus form translation and other fixups. - res/i18n/x2goclient_de.ts: another fixup I previously forgot about. - res/i18n/x2goclient_et.ts: whitespace and meta data fixup. - res/i18n/x2goclient_et.ts: typo fix: on+ma -> oma. * x2goclient.spec: - Remove plugin references. * debian/rules: - Remove plugin references. - Remove x2goclient_*.qm files removal. * debian/control: - Convert plugin packages to dummy transitional packages with no dependencies, remove other plugin references. * debian/: - x2goplugin{,-provider}.install: clear out. - {x2goplugin.dirs,x2goplugin-provider.dirs,x2goplugin-provider.links, x2goplugin-provider.post*}: remove. * debian/copyright: - Remove plugin references. [ Martti Pitkänen ] * New upstream version (4.1.2.0): - res/i18n/x2goclient_fi.ts: update Finnish translation file. [ Stefan Baur ] * New upstream release (4.1.2.0): - res/i18n/x2goclient_de.ts: update German translation file. [ Sébastien Ducoulombier ] * New upstream version (4.1.2.0): - res/i18n/x2goclient_fr.ts: update French translation file. [ Robert Parts ] * New upstream version (4.1.2.0): - res/i18n/x2goclient_et.ts: update Estonian translation file. -- X2Go Release Manager Fri, 22 Jun 2018 22:30:29 +0200 x2goclient (4.1.1.1-0x2go1) unstable; urgency=medium [ Mihai Moldovan ] * New upstream version (4.1.1.1): - src/pulsemanager.cpp: print out PA --version output as a debug message. - macbuild.sh: also bundle xauth binary as nxauth binary. - macbuild.sh: switch to bundling PulseAudio 11.1 since it's now available in MacPorts. - src/sshmasterconnection.cpp: don't ask for private key passphrase if auto-login merely failed due to the server denying the public key. Fixes: #1122. - src/{httpbrokerclient,onmainwindow,sshmasterconnection}.{cpp,h}: introduce new passphrase_type enum and replace the old verificationCode boolean value with that. Allows using more messages, including a new one for plain password prompts. Adapt usage accordingly. The implementation is ugly, but there's no good way around that (short of using C++11 features). The enum would really logically belong to ONMainWindow, but since we also have to use it in SshMasterConnection, that may not include onmainwindow.h to avoid a circular dependency, it has to be part of SshMasterConnection for now. - src/sshmasterconnection.cpp: query for password if it wasn't already provided. Fixes: #1122. This usually happens if auto-login is enabled, which bypasses the password prompt. If auto-login fails, authentication normally continues via challenge auth or plain passwords, but since users had no chance to input a password, such authentication will always fail. Give users a way to enter passwords, in case the auto-login failed. - src/onmainwindow.cpp: finally include version information in debug output. - res/i18n/x2goclient_*.ts: apply last change to translation files directly. - src/sshmasterconnection.cpp: error out with a useful error message in case no password has been provided when doing password authentication. - src/sshmasterconnection.cpp: don't output an empty error message if password authencation has been requested but the server does not support this mechanism. Fixes: #408. - src/onmainwindow.cpp: wrap user name for client-side mounts in quotes. Fixes: #559. Will fail with user names that contain quotes, but oh well... - {example/x2goclient-cli,src/onmainwindow.cpp}: remove hopefully obsolete HOSTNAME exporting into environment. - src/onmainwindow.cpp: remove client-side LD_LIBRARY_PATH meddling. Nothing of value is in that directory and nxproxy hasn't needed that for years. - src/settingswidgets.cpp: don't incorrectly enable whole display settings in single display setups. Let debugging mode override this behavior, though. - src/onmainwindow.cpp: pass X2GO_RANDR_XINERAMA=[yes,no] to x2gostartagent as an environment variable based upon the xinerama session setting. Has no effect when connecting to older X2Go Server versions and handles startup correctly with X2Go Server 4.1.0.0. - src/onmainwindow.cpp: fix another leaked X2goSettings object. - src/onmainwindow.cpp: rename xinerama env variable on session startup to X2GO_XINERAMA in accordance with server changes. - src/onmainwindow.cpp: supply xinerama option as another parameter to x2goresume-session on session resume. - src/sessionbutton.cpp: make button non-sensitive in bottom right part if it's editable. Fixes: #1214. - {src/{help.cpp,onmainwindow.{cpp,h}},man/man1/x2goclient.1}: reformat, whitespace fixes, split out close button slot in a separate function. - src/onmainwindow.{cpp,h}: let close button be a member variable. - src/onmainwindow.cpp: disable and enable close button during and after connection startup. - src/onmainwindow.cpp: initialize directRDP to false to be able to call slotSuspendSessFromSt () even if no session has previously been started. - src/onmainwindow.cpp: only initialize directRDP variable if platform is Linux. Fixes compile failures on Windows and OS X. - src/onmainwindow.cpp: always create close button, but either hide or show it based upon whether --closebt was provided or not. - src/onmainwindow.cpp: revert 3060183a78d8b6bd81bec9968c985c38bfd1e5c2. Being able to suspend sessions via the close button is complex and unnecessary, since in thinclient mode, for which this feature is useful, users will not be able to see the client window while a session is executing, due to it running in full screen mode. - src/onmainwindow.cpp: always enable close button, let it log out from a broker if already authenticated or close the client on click. Fixes: #1209. - man/man1/x2goclient.1: clarify what the close button now does. It either lets the user re-login to the broker or closes the client. - src/onmainwindow.cpp: correctly initialize brokerAuthentication member of ConfigFile struct. - {res/{img/png/close-button.png,resources.qrc}, src/{{onmainwindow,httpbrokerclient}.{cpp,h},help.cpp}, man/man1/x2goclient.1}: rename close button to broker logout button. Reimplement the way it is shown - disable it upon startup and only enable it after successful broker authentication. - man/man1/x2goclient.1: add missing escape signs before dash/minus characters. [ Oleksandr Shneyder ] * New upstream version (4.1.1.1): - Change echo mode for user input in InteractionDialog. [ Walid Moghrabi ] * New upstream version (4.1.1.1): - {res/img/png/,res/resources.qrc}: add close-button.png file. - {src/{help.cpp,onmainwindow.{cpp,h}},man/man1/x2goclient.1}: add new option --closebt. Fixes: #1227. Adds a close button in the top-left client corner (maybe next to the halt button) that currently just terminates the client. -- X2Go Release Manager Thu, 15 Feb 2018 21:38:31 +0100 x2goclient (4.1.1.0-0x2go1) unstable; urgency=medium [ Mihai Moldovan ] * New upstream version (4.1.1.0): - src/sshmasterconnection.cpp: use ssh_channel_listen_forward () instead of ssh_forward_listen () for newer libssh versions. Fixes: #870. - src/sshmasterconnection.cpp: with libssh 0.6.0 and newer, get the public key via ssh_get_server_publickey () (0.8.0 and higher) or ssh_get_publickey () (0.7.x and lower) and its hash via ssh_get_publickey_hash () instead of using the deprecated ssh_get_pubkey_hash () function. Additionally, replace free () with the more appropriate ssh_string_free_char () function after using ssh_get_hexa (). This will break on very old systems with a hopelessly outdated libssh version, but we do not care about these systems in the first place. - src/sshmasterconnection.cpp: replace string_free () with its successor ssh_string_free (). Will break on ancient systems, but we don't care. - src/sshmasterconnection.cpp: replace deprecated channel_new () function with ssh_channel_new (). Might break on ancient systems, but we don't care. Also, add error handling in case ssh_channel_new () failed... - src/sshmasterconnection.cpp: replace deprecated channel_open_forward () function with ssh_channel_open_forward (). Might break on ancient systems, but we don't care. - src/sshmasterconnection.cpp: replace deprecated channel_open_session () function with ssh_channel_open_session (). Might break on ancient systems, but we don't care. - src/sshmasterconnection.cpp: replace deprecated channel_request_exec () function with ssh_channel_request_exec (). Might break on ancient systems, but we don't care. - src/sshmasterconnection.cpp: replace deprecated channel_poll () function with ssh_channel_poll (). Might break on ancient systems, but we don't care. - src/sshmasterconnection.cpp: replace deprecated channel_read () function with ssh_channel_read (). Might break on ancient systems, but we don't care. - src/sshmasterconnection.cpp: replace deprecated channel_is_eof () function with ssh_channel_is_eof (). Might break on ancient systems, but we don't care. - src/sshmasterconnection.cpp: replace deprecated channel_write () function with ssh_channel_write (). Might break on ancient systems, but we don't care. - src/sshmasterconnection.cpp: replace deprecated channel_send_eof () function with ssh_channel_send_eof (). Might break on ancient systems, but we don't care. - src/sshmasterconnection.cpp: replace deprecated channel_close () function with ssh_channel_close (). Might break on ancient systems, but we don't care. - src/sshmasterconnection.cpp: replace deprecated channel_free () function with ssh_channel_free (). Might break on ancient systems, but we don't care. - src/sshmasterconnection.cpp: use QString::arg () to insert function name and thus deduplicate error translation messages. Also re-add the full stop sign and remove it when needed for x2goDebug. - src/sshmasterconnection.cpp: fix up some debug strings. - src/sshmasterconnection.cpp: port more occurrences of "QString to C string" akin to 1b21d75f2c10609f3586f5b5e0b4ceb7fca83fdd. - src/sshmasterconnection.cpp: enable parsing of ~/.ssh/config. Fixes: #1121. Shorthands as host names and other bells and whistles like inferred port or user name values are now supported. - src/{onmainwindow,httpbrokerclient}.cpp: fix up error/warning message displayed when the server-specified key is unknown, but we have another key type stored already. - src/pulsemanager.cpp: fix up a debug string. Qt drops a space where I'd like to have one and inserts a space where I'd like none, so work around that fancifully. - src/sshmasterconnection.cpp: libssh < 0.6.0 does not have the ssh_options_get () API, but instead expects users to pull out information directly from the ssh_session structure. This fixes compile issues on systems with older libssh versions. - src/sshmasterconnection.cpp: turns out libssh < 0.6.0 doesn't support fetching the host, port and username parameters at all. We're in the clear for non-SSH-proxied connections and can use config file parsing, but have to disable config file parsing in the proxy settings, as there's no way to query the remote endpoint information. As a result we will be unable to open a new socket to the remote endpoint and proxying will fail badly. - src/x2goutils.cpp: ensure that add_to_path () also processes the first value passed. Fixes startup problems in MacPorts. Fixes: #1093. - res/i18n/x2goclient_et.ts: various fixups for the Estonian translation file. - res/i18n/x2goclient_*.ts: go the extra mile and fix up translation files manually after the "anothertype" fix in 8e503d89ee2d03a313c3deff11f0516fce503022. - {src/{onmainwindow,httpbrokerclient}.cpp,res/i18n/x2goclient_*.ts}: fix another occurrence of a string missing a space separator between words and update translation files. - src/onmainwindow.cpp: don't duplicate depth warning message needlessly, use correct plural forms in translations and split string up in a translation-friendly form. I'll leave translators to handle this beast, as languages are unique in the number of plural forms and the like. - {src/printdialog.cpp,res/i18n/x2goclient_*.ts}: drop spurious left-over parenthesis in warning message and adapt translations. - src/onmainwindow.cpp: make the "not loading translator" message non-translatable, as it doesn't make a lot of sense to actually translate it. - {src/{configdialog,x2goutils}.cpp,res/i18n/x2goclient_*.ts}: change XQuartz project homepage references, adapt translations. - src/pulsemanager.{cpp,h}: make get_* () functions const. - src/pulsemanager.{cpp,h}: make is_server_running () const. - src/pulsemanager.{cpp,h}: add new pulse_version_valid_ boolean class member variable, set it correctly and use it whenever the version is accessed. - src/pulsemanager.cpp: make fetch_pulseaudio_version () more resilient. Instead of aborting hard when the version number could not be detected, break out of the loops only. We can make stuff work, even if the version is unknown. Or just continue without PA support as such. - src/pulsemanager.{cpp,h}: add show_startup_warning () for both PA server and (debug) startup sound playback. - src/pulsemanager.cpp: check server_binary_ before using it and jump over code that assumes the PA server binary to be available. - src/pulsemanager.cpp: don't fail hard on OS X if the PA server binary could not be found in the constructor. We can live without PA and will show a warning message to the user later on when PA is supposed to be started. - src/pulsemanager.cpp: deduplicate warning/error messages - make use of show_startup_warning (). This does imply changes to the translation files, coming up next. - res/i18n/x2goclient_*.ts: regenerate translation files and fix up some SSH and PulseManager messages manually, where possible. - src/x2ogutils.h: guard UNUSED macro definition. - {macbuild.sh,src/{x2goutils.h,{pulsemanager,onmainwindow}.cpp}, x2goclient.pro}: make MacPorts prefix selectable at compile time. Much cleaner for downstream package maintainers (like, for instance, MacPorts itself.) - res/i18n/x2goclient_fi.ts: remove outdated comment. - src/sshprocess.cpp: bind direct tunnel socket to localhost instead of any address. Fixes: #31. - src/onmainwindow.cpp: check for sessionExplorer->getLastSession() to be valid in all places but obvious ones. Fixes: #499. - src/sshmasterconnection.cpp: use new PKI-based libssh API for public key authentication for libssh 0.6.0 and higher. Fixes: #1119. - src/sshmasterconnection.cpp: add YubiKey challenge auth prompt. - src/sshmasterconnection.cpp: fix compile errors on pre-libssh-0.6.0 systems and add a TOCTU-race check to see if the file exists prior to calling privatekey_from_file () on such systems. Additionally fix a type issue. - macbuild.sh: fix long-standing issue that made the DMG bundle contain a symlink made up of only a space to /Applications. - res/img/icons/dmg: add new image disk.svg, used as the basis for the new OS X DMG bundle icon. - res/img/icons/dmg: add new disk-drive-and-x2goclient icon for use as the volume icon of the OS X DMG bundle. - macbuild.sh: use the new volume icon that actually also looks like a disk drive. Fixes: #930. - src/onmainwindow.cpp: typo fix only. - src/onmainwindow.cpp: do not automatically set login user name to current system user if empty. Unbreaks default user name fetching via libssh. Might break some use cases (especially RDP, XDMCP). - src/x2goclient.cpp: revert change bypassing the UNIX cleanup helper. - src/onmainwindow.cpp: revert old behavior and select user name field after a session has been suspended/terminated if user name was not provided. Do not insert an user name, though, but leave it to autodetection by default. - src/sshmasterconnection.cpp: fix SSH-proxied connections with port numbers of zero. In order to authenticate the remote server, SSH-proxied connections must be reset to their remote host and port values after connecting via the SSH tunnel. If the original port value was zero, setting it was skipped, leading to connections like $REMOTE_HOST:$PROXY_PORT, which is certainly wrong. Fetch the inferred port value and set this instead, fixing this issue. - Makefile: add new QMAKE_OPTS variable so that packagers can pass additional options to qmake directly. - src/sshmasterconnection.cpp: typo fix in log message only. - src/sshmasterconnection.cpp: don't leak ssh_session data, free it once we're done with it. - Makefile: qmake seems to act weird if QMAKE_C(XX)FLAGS starts with a space followed by additional non-whitespace characters. Refactor the variables a bit to work around this issue. - Makefile: turns out the only somewhat portable way to do something like this is via shell hackery. - Makefile: reset to the original state and make sure that we don't pass CXXFLAGS on to the actual build process to not override the values generated by qmake. - Makefile: the only way to prevent variables on the command line to be passed down seems to be to remove them from MAKEOVERRIDES. .MAKEOVERRIDES is the FreeBSD-make-equivalent variable. MAKEFLAGS has no effect on this behavior, so removing it again. - Makefile: add comment explaining why we need to do this in the first place and why it's so complicated. - src/sshmasterconnection: ignore "garbage", but require at least one line to start with a known challenge auth prompt. Fixes: #966. - x2goclient.pro: add libssh_threads library. We need this since X2Go Client is multi-threaded. - copy-deps-win32.bat: also copy libssh_threads.dll to go with the previous change. - src/{onmainwindow,sshmasterconnection}.{cpp,h}: correctly initialize and finalize libssh. We ought to do both only once - in our main thread. Previously, we initialized libssh in a new thread, which might be problematic. - src/sessionexplorer.cpp: open the correct tab when editing a session from the exports menu. - src/onmainwindow.cpp: try to workaround window placement if settings contain a (newly) invalid position (e.g., a position that refers to a disconnected display.) - src/onmainwindow.cpp: try to find a display that can hold the window's position fetched from the sizes settings. Use the default if none could be found. - src/onmainwindow.cpp: fix up main window position check; use QRect.intersects (). - src/pulsemanager.{cpp,h}: rename shutdownState to shutdown_state_, reorder in initializer list. - res/i18n/: regenerate translations. - res/i18n/x2goclient_es.ts: fixup Spanish translation file. - res/i18n/x2goclient_et.ts: fixup some typos in the Estonian translation file. - res/i18n/x2goclient_sv.ts: add singular form to translation entry as discussed on list. - res/i18n/x2goclient_es.ts: add singular form to translation entry as discussed off list. - res/i18n/x2goclient_nl.ts: various fixups for Dutch translation file. - res/i18n/x2goclient_nb_no.ts: various fixups for Bokmål (Norway) translation file. - res/i18n/x2goclient_nl.ts: fix whitespace issues in Dutch translation file and re-add numerus form translation. - res/i18n/x2goclient_nb_no.ts: various fixups for Bokmål (Norway) translation file, including numerus form. - src/sshmasterconnection.cpp: for proxied connections, fetch the user name matching the given host, not proxy host. - res/i18n/x2goclient_fi.ts: various fixups for Finnish translation file. - res/i18n/x2goclient_fi.ts: another tiny whitespace fixup for Finnish translation file. - src/onmainwindow.cpp: fix "XMDCP" typo. - res/i18n/x2goclient_de.ts: various fixups for German translation file. - src/onmainwindow.cpp: fix "loose" vs. "lose" spelling mistake. - res/i18n/x2goclient_et.ts: remove obsolete and wrongly capitalized "x2go" part from an Estonian translation message. - res/i18n/x2goclient_sv.ts: minor whitespace fixup. - res/i18n/x2goclient_*.ts: apply "XMDCP" -> "XDMCP" fix manually to translation files. - res/i18n/x2goclient_nb_no.ts: remove obsolete comments (leading to problems when regenerating translation files.) - res/i18n/x2goclient_nl.ts: remove obsolete comments (leading to problems when regenerating translation files.) - res/i18n/x2goclient_*.ts: regenerate translations. - res/i18n/x2goclient_fi.ts: various fixups for Finnish translation file. - src/sshmasterconnection.cpp: spelling fix. (Quiting -> Quitting) - x2gobrowserplugin-2.4_1/src/qtbrowserplugin.cpp: spelling fix. (convertable -> convertible) * x2goclient.spec: - Respect %{optflags} and pass QMAKE_STRIP=: to fix missing debug info issues. [ Oleksandr Shneyder ] * New upstream version (4.1.1.0): - Interaction with SSH server (for example for changing expired password). Fixes: #592. - Fixing setting widget style issue in InteractionDialog on Windows client. - SSH Interaction for SSH Broker and SSH Server. - SSH Iteraction for method keyboard-interactive. - Move PulseManager MsgBox functions to main window: GUI functions should be used only from main thread. - Check "norecord" option on the first start of PulseAudio. - Disable/Enable PulseAudio in config dialog. New command line options: --disable-pulse to disable start of PulseAudio --disable-pulse-record to disable audio input. - Check if PulseAudio running at session start and resuming when sound is enabled. Show warning if PulseAudio not running and disable the sound support for the session to avoid session freezes. - Add session config file option "sshproxysamekey". With this option client will use for proxy authentication same key as for X2Go server. This is important in first case for broker users, where key can be generated "on the fly". Maybe it makes sence to add this option in UI and command line later. - Correct negative display coordinates for FS sessions. [ Robert Parts ] * New upstream version (4.1.1.0): - res/i18n/x2goclient_et.ts: update Estonian translation file. - res/i18n/x2goclient_et.ts: update Estonian translation file. [ Martti Pitkänen ] * New upstream version (4.1.1.0): - res/i18n/x2goclient_fi.ts: update Finnish translation file. - res/i18n/x2goclient_fi.ts: update Finnish translation file. - res/i18n/x2goclient_fi.ts: update Finnish translation file. [ Mike DePaulo ] * New upstream version (4.1.1.0): - Windows: Upgrade PulseAudio from 6.0 to 7.1 Fixes: #1152 Issues with audio when playing HTML5 videos - Windows: Remove uninstaller from start menu. It is still available in "Programs and Features". - Windows: Upgrade Win32 OpenSSL from 1.0.1t to 1.0.2k Fixes numerous CVEs - Windows: Upgrade libssh from 0.7.0 to 0.7.4 (while maintaining Pageant support). The possibly relevant changes are: + CVE-2016-0739 was fixed + improved id_ed25519 support + numerous bug fixes - Windows: Update PuTTY from 0.67 to 0.68 The possibly relevant changes are: + CVE-2016-6167 was fixed (did not affect X2Go Client by default because the installation dir is not writeable by users) + CVE-2017-6542 was fixed - Don't override PATH for the actual session or application command. Fixes: #1100 [ Walid Moghrabi ] * New upstream version (4.1.1.0): - {src/{help.cpp,onmainwindow.{cpp,h}},man/man1/x2goclient.1}: let --background take a directory and randomly pick an SVG file in there. Fixes: #1165. - {src/{help.cpp,onmainwindow.{cpp,h}},man/man1/x2goclient.1}: pass-through broker credentials when connecting to a direct RDP session. Fixes: #1185. Adds a new --broker-use-creds-for-session parameter. - src/onmainwindow.cpp: support --close-disconnect for direct RDP sessions. Fixes: #1186. [ Daniel Lindgren ] * New upstream version (4.1.1.0): - res/i18n/x2goclient_sv.ts: update Swedish translation file. [ Ricardo Díaz Martín ] * New upstream release (4.1.1.0): - res/i18n/x2goclient_es.ts: update Spanish translation file. [ Jos Wolfkamp ] * New upstream version (4.1.1.0): - res/i18n/x2goclient_nl.ts: update Dutch translation file. - res/i18n/x2goclient_nl.ts: update Dutch translation file. [ Klaus Ade Johnstad ] * New upstream version (4.1.1.0): - res/i18n/x2goclient_nb_no.ts: update Bokmål (Norway) translation file. - res/i18n/x2goclient_nb_no.ts: update Bokmål (Norway) translation file. [ Stefan Baur ] * New upstream release (4.1.1.0): - res/i18n/x2goclient_de.ts: update German translation file. [ Sébastien Ducoulombier ] * New upstream version (4.1.1.0): - res/i18n/x2goclient_fr.ts: update French translation file. -- X2Go Release Manager Sun, 29 Oct 2017 08:43:45 +0100 x2goclient (4.1.0.1-0x2go1) unstable; urgency=medium [ Mihai Moldovan ] * New upstream version (4.1.0.1): - src/onmainwindow.cpp: unbreak Windows and OS X builds - directRDP is only available on Linux, so guard new section. - src/sessionbutton.cpp: only append "XDM@" string to server text if a direct XDMCP session was requested. Issue automatically found by GCC. [ Oleksandr Shneyder ] * New upstream version (4.1.0.1): - Add "direct XDMCP" functionality. - Disable sound button on direct RDP and XDMCP sessions. Set for direct XDMCP session autologin=true. Set for direct XDMCP session username=XDM. [ Seth Galitzer ] * New upstream version (4.1.0.1): - src/help.cpp: add documentation for the --background option. Part of #1162. - {src/{help.cpp,onmainwindow.{cpp,h}},man/man1/x2goclient.1}: add new --branding option that replaces the seal logo. Fixes: #1162. -- X2Go Release Manager Thu, 14 Sep 2017 03:06:33 +0200 x2goclient (4.1.0.0-0x2go1) unstable; urgency=medium [ Mihai Moldovan ] * New upstream version (4.1.0.0): - src/sessionbutton.cpp: replace drop down menu button on session buttons with a more prominent, bigger settings gear icon. Requested for visibility. - src/onmainwindow.cpp: add debug statements to createRSAKey () regarding the host pub key locations on OS X. - src/onmainwindow.cpp: fix error message string in printSshDError_noHostPubKey (). - src/sshmasterconnection.cpp: add SecurID prompt to challenge auth code prompts. - src/sharewidget.cpp: fix compile on UNIX-like platforms by defaulting to ISO-8859-1 not just on Linux but also other platforms. Fixes: #1124. - src/x2goutils.cpp: don't try to wrap absolute paths as legacy resource URIs in wrap_legacy_resource_URIs (). Fixes: #910. - {res/img/svg/,res/resources.qrc}: add new file hamburger.svg, a custom-created hamburger icon. - src/sessionbutton.cpp: replace drop down menu button on session buttons again with the custom-created hamburger icon. Also fix positioning issues in mini mode. - src/onmainwindow.{cpp,h}: add new function images_resource_path (), similar to iconsPath () but without explicitly referring to icons. - src/sessionbutton.cpp: we cannot use ".." in resource paths to move up one level, so use images_resource_path () instead and hope that we finally get a yummy hamburger. - src/onmainwindow.{cpp,h}: let iconsPath () take a const-reference instead of an object and make it a const member function. - src/onmainwindow.{cpp,h}: let images_resource_path () take a new, optional "base" parameter, that might be empty and is put in-between the fixed resource path string and the filename parameter. - src/onmainwindow.cpp: use images_resource_path () in iconsPath (). - src/sessionbutton.cpp: instead of using the hamburger.svg file directly, render it to a raster image and use this Pixmap as the icon file - otherwise the icon will not show up. Also change the icon size back to 16x16 px, that's big enough. - src/onmainwindow.cpp: remove left-over debug test message. - {unixhelper.{cpp,h},x2goclient.pro{,.maemo}}: add unixhelper stub. - unixhelper.{cpp,h}: implement cleanup program for process group. - x2goclient.cpp: wrap X2Go Client main function and use that. - x2goclient.cpp: add fork_helper() function to start up the UNIX cleanup helper. - x2goclient.cpp: use setsid() on UNIX to become session and process group leader. If that fails, fork, terminate the parent and execute setsid() in the child process. Use fork_helper() to start the UNIX cleanup helper in a child process and continue with the main application in the parent. - x2goclient.cpp: add myself to copyright header. - x2goclient.cpp: add legacy header needed for old operating systems. - x2goclient.cpp: fix std::edit -> std::exit typo. - unixhelper.{h,cpp}: also include to have Q_OS_UNIX defined on UNIX-based platforms. Move guards around. - unixhelper.h: forgot to declare type of unix_cleanup() function. - {unixhelper.{cpp,h},x2goclient.cpp}: unixhelper should really be a (module) namespace, not a class. - unixhelper.{cpp,h}: add documentation/comments. - x2goclient.cpp: return return value of unixhelper::unix_cleanup(). - unixhelper.cpp: kill process group on error. - unixhelper.{cpp,h}: implement signal unblocking in unixhelper::unix_cleanup(). Update documentation. - unixhelper.cpp: port from std::signal() to sigaction(). Handle errors. - x2goclient.cpp: clean up. We don't care if setsid() fails or succeeds and we certainly do not need to fork to force it to succeed. Whether we are a process group leader already or become one doesn't matter, if the end result is that we are process group leader. - x2goclient.cpp: don't start the UNIX cleanup helper process right after forking, but introduce a new command line option --unixhelper and re-execute the main binary with this new option to indicate that the UNIX cleanup helper tool is requested. It is necessary to call exec() after fork on virtually all operating system, especially on OS X. - x2goclient.cpp: fix compile problems introduced with the last commit. - x2goclient.cpp: fix string comparison. - x2goclient.cpp: create new argv array on the heap instead of on the stack. Stack data will be invalid once the function goes out of scope (which is what execv is doing.) - unixhelper.{cpp,h}: raise sleeping time to two seconds and grace period to 10 seconds. - {unixhelper.{cpp,h},x2goclient.cpp}: switch main cleanup handling to parent PID polling. - unixhelper.{cpp,h}: ignore SIGINT, SIGTERM, SIGPIPE, SIGQUIT, SIGUSR1 and SIGUSR2. - x2goclient.cpp: fix failing exec() call for the UNIX helper utility: correctly terminate arguments vector. - {appdialog,configwidget,onmainwindow,unixhelper}.cpp: fix some compile warnings with GCC. Fix a few whitespace issues. - appdialog.cpp: initialize parent in default case. Another GCC compile warning fix. - onmainwindow.cpp: correctly use ~/.x2go/.ssh as ssh directory when starting sshd in user mode. Put the authorized_keys file in there. Check and set correct permissions for both the directory and authorized_keys file. Generalize some Windows-specific sections by using QDir and QFile. - compat.{cpp,h}: new files. Implements strndup on OS X 10.6 and below. Add to x2goclient.cpp, x2goclient.pro and x2goclient.pro.maemo. - compat.{cpp,h}: remove inline keyword, because function is not defined in header file. - compat.h: include QtCore/qglobal.h for Q_OS_... macros. - pulsemanager.{cpp,h}: new class for PulseAudio management. - x2goclient.pro{,.maemo}: reference new pulsemanager.{cpp,h} files. - macbuild.sh: add new MACPORTS_PREFIX detection/variable. - macbuild.sh: add new dependency_error() helper function. - macbuild.sh: add new lazy_canonical_path() helper function. - macbuild.sh: add new get_nesting_level() helper function. - macbuild.sh: add new repeat_str() helper function. - macbuild.sh: refactor nxproxy detection to use MACPORTS_PREFIX. - macbuild.sh: add EXE_DIR and FRAMEWORKS_DIR internal variables. Create directories based on that. Use them when bundling. - macbuild.sh: define PulseAudio libraries and binaries to be later copied. Discover them using MACPORTS_PREFIX. Error out if any component was not found. - macbuild.sh: copy PulseAudio libraries and binaries. - macbuild.sh: add phase output for bundling nxproxy. - macbuild.sh: add work-in-progress PulseAudio bundling. Needs to be ripped apart and be redone, because dylibbundler is not smart enough to handle our case. - macbuild.sh: add Linux library file name scheme regex as a precaution. - macbuild.sh: directories are "executable", so the first check must explicitly include a check for the argument being not a directory. - macbuild.sh: add some more debugging output. - macbuild.sh: remove libpulse and libpulsecore from libraries to be bundled, as something else will bundle them anyway. - macbuild.sh: use while-read-loop and find to actually recurse through directories. - macbuild.sh: check current file name against regex, not a (now) full path. - macbuild.sh: add the correct file path to the library bundling array. - macbuild.sh: when actually bundling libraries, use @executable_path instead of @loader_path. Will need testing. - macbuild.sh: fix echo call to also show the intermediate lib dir, not just the library file name. Helps debugging. - macbuild.sh: also install libraries into staging area with intermediate library path. Putting everything into a single place is a stupid idea. - deduplicate.sh: add new, more or less Proof of Concept, and Work in Progress file deduplication script. - deduplicate.sh: add duplicates-to-real mapping. - deduplicate.sh: add missed local variable declaration. - deduplicate.sh: new function for parsing otool's output and printing library dependencies if no error occurred. - deduplicate.sh: non-functional: change WARNING to ERROR in error messages. - deduplicate.sh: add first skeleton for library dependency rewriting of deleted duplicates. - deduplicate.sh: correctly unset an array element. - deduplicate.sh: change range-based for loops to "${!arr[@]}" to handle "sparse" arrays correctly. - deduplicate.sh: quote "${arr[@]}" correctly to not suddenly force word splitting. - deduplicate.sh: fix parse_otool_output: we want to return failure only iff any of the strings are present in otool's output and actually handle the failure string *ARRAY* correctly as that. - deduplicate.sh: change exit to return in parse_otool_output. - deduplicate.sh: record crafted "library path" values in duplicates replacement to_files array. - deduplicate.sh: debug parse_otool_output fiercely for the time being. - deduplicate.sh: prevent word splitting when parsing otool's output. We want the raw bits. - deduplicate.sh: switch to range-based for loop in fixup section for duplicate array walking as we need to access the same element index in the replacement array. - deduplicate.sh: add more useful information in fixup section's error message. - deduplicate.sh: unstub fixup section. - deduplicate.sh: parse_otool_output: jump over first matching entry, which is - hopefully - the id line. - deduplicate.sh: actually include file name in install_name_tool pseudo output. - deduplicate.sh: save dependency format base string as a readonly variable and use that instead of repeating a fixed string. - deduplicate.sh: copy lazy_canonical_path from macbuild.sh for now. deduplicate.sh will eventually be merged into macbuild.sh anyway. - deduplicate.sh: more temporary debugging output in fixup section. - deduplicate.sh: surprisingly, it turned out that only checking the duplicate's basename against the current dependency's basename is not good enough. Actually construct "the real dependency-format duplicate string" and check it against "the real dependency". Even this is still not good enough as it needs a bit cleanup - coming up next. - deduplicate.sh: cleanup as announced in the last commit - using lazy_canonical_path. - deduplicate.sh: remove a bit of noisy debug output, but turn on parse_otool_output debugging. - deduplicate.sh: fix wrong return value capture. We want to check the return value of the executed function/command, not that of "typeset". - deduplicate.sh: add WARNING to status message. - deduplicate.sh: remove some noisy debug output. - macbuild.sh: replace tabs with two spaces. No functional changes. - deduplicate.sh: replace tabs with two spaces. No functional changes. - macbuild.sh: merge deduplicate.sh content in. Also enable the functionality "for real", not just as a dry-run. - macbuild.sh: spelling fix. - macbuild.sh: more more debug messages and a whitespace change. - macbuild.sh: fix removal of base prefix in deduplication if base prefix ends in a slash. - macbuild.sh: copy "special" files, so that they can be removed later on. - macbuild.sh: rewrite ID line detection algorithm. Modules don't seem to be needing one, so skipping the first dependency line incidentally skips a "real" dependency for modules. - pulsemanager.{cpp,h}: use name and underscore for member variables, not underscore and name. - pulsemanager.cpp: minor non-behavior changing fixes. - pulsemanager.{cpp,h}: reformat only. - pulsemanager.cpp: use initializer list for constructor. - pulsemanager.{cpp,h}: add pulse_version_{major,minor}_ member variables. - pulsemanager.cpp: reformat only. - pulsemanager.{cpp,h}: switch port definitions to std::uint16_t. - pulsemanager.h: add std:: namespace selector for uint32_t version variables. - pulsemanager.{cpp,h}: add ESD support. - pulsemanager.{cpp,h}: rename relaunch () to restart (). - pulsemanager.cpp: reformat only. - pulsemanager.{cpp,h}: fixup preprocessor usage. - pulsemanager.{cpp,h}: add server_args_, server_binary_ and server_working_dir_ class variables. - pulsemanager.cpp: make start () wrap the "real" OS-specific start functions. - pulsemanager.{cpp,h}: new function create_client_dir (). - pulsemanager.cpp: add Windows support to shutdown (). - pulsemanager.cpp: add cleanup support to on_pulse_finished (). - pulsemanager.cpp: add Windows stuff to initial env in constructor. - pulsemanager.{cpp,h}: add new function start_generic () to split off common functionality. - pulsemanager.cpp: let start_osx () use start_generic (). - pulsemanager.{cpp,h}: implement start_win () as part of Windows functionality. - pulsemanager.cpp: also load module-esound-protocol-tcp module. - pulsemanager.cpp: make generate_server_config () Windows-compatible. - pulsemanager.cpp: make generate_client_config () Windows-compatible. - pulsemanager.cpp: only play startup sound if DEBUG macro is defined. - pulsemanager.cpp: make startup sound playing via slot_play_startup_sound () Windows-compatible. - pulsemanager.cpp: typo fix in variable name server_working_dir_. - pulsemanager.{cpp,h}: find_port () actually returns a value, fix declaration accordingly. - pulsemanager.cpp: fix compile errors in find_port () by renaming the ret or port variable to search_port. - pulsemanager.cpp: fix another compile error due to typo'd versions of generate_server_config () and generate_client_config (). - pulsemanager.cpp: another typo fix: findPort -> find_port. - pulsemanager.cpp: reorder member variables in initialization list. Compile warning fix. - pulsemanager.cpp: add "dummy" start_linux () function. - pulsemanager.cpp: generate platform-dependent values for member variables server_working_dir_ and server_binary_ in constructor. We need them right away. - pulsemanager.{cpp,h}: new member function fetch_pulseaudio_version () with first skeleton. Call it in the constructor. - pulsemanager.cpp: re-initialize buffer string on each run while getting CWD on Linux. - pulsemanager.cpp: fix some error messages by removing redundant newlines. - pulsemanager.{cpp,h}: some older PA versions used the major, minor and micro numbering scheme together with a descriptive string. Add new member variables for this and initialize them correctly. - pulsemanager.h: reformat a bit by adding newlines and moving lines in a (hopefully) logical fashion. - pulsemanager.cpp: add algorithm for actually extracting PA version number. - pulsemanager.{cpp,h}: only allow changing PA or ESD ports when server is not currently running. - pulsemanager.{cpp,h}: add record and playback private members, as well as getters and setters. - pulsemanager.cpp: reorder member variables in initializer list. - pulsemanager.cpp: fix compile error in startup sound function. - pulsemanager.h: more moving around. - pulsemanager.cpp: use record and playback member variables. - pulsemanager.cpp: cleanup, don't use copy assignment operator when we just need to construct a new object. - macbuild.sh: PulseAudio has been updated to version 8.0. Reflect this. - macbuild.sh: libpulsecore.dylib also resides in the "private" pulseaudio subdirectory now, adding it to "special files workaround". - pulsemanager.cpp: remove config.pa while doing post-exit cleanups. - src/pulsemanager.{cpp,h}: add get_pulse_dir () for fetching the (OS-dependent) PulseAudio config and cookie directory. - src/pulsemanager.cpp: replace hardcoded modules paths with dynamic ones depending on the detected PA version. - src/pulsemanager.cpp: add "FIXME" debug logging (and cleanup.) - src/pulsemanager.cpp: backport fix for 526. - src/pulsemanager.cpp: backport fix for 422. - src/configdialog.{cpp,h}: add "no record" support for OS X (through PulseManager.) - src/configdialog.cpp: whitespace only. - src/onmainwindow.{cpp,h}: hook PulseManager in - for both OS X and Windows. - src/mediawidget.cpp: reflect new capabilities through PulseManager. - src/pulsemanager.h: move x2gologdebug.h inclusion into implementation file. - src/pulsemanager.cpp: output PA stdout/stderr via x2goDebug, not plainly to stdout. - src/configdialog.cpp: fix compile error by removing obsolete (and now faulty) line for removed restart message. - src/onmainwindow.cpp: fix compile errors due to misspelled function names. - src/pulsemanager.cpp: let start () act as a wrapper and do nothing if the PA server is already running. - src/onmainwindow.cpp: fix compile error due to misuse of #ifdef. - src/onmainwindow.cpp: convert QDir object to QString for further processing. - src/onmainwindow.cpp: make use of new PulseManager::start () behavior and always use it, no matter whether server is up already or not. - src/pulsemanager.cpp: fix compile error due to typo. - src/pulsemanager.cpp: hide Windows-only code behind #ifdefs. Otherwise we'll get compile failures on non-Windows platforms. - src/pulsemanager.{cpp,h}: add debugging setter and private variable. - src/pulsemanager.{cpp,h}: port to new debugging feature. - src/onmainwindow.cpp: port to new debugging feature of PulseManager. - src/pulsemanager.h: fix compile error due to mismatching function declaration for set_debug (). - res/sound: add startup.wav sound to be played back when starting the PA daemon in debug mode. - src/pulsemanager.cpp: don't time out while trying to start PA or paplay. "Handle" errors by printing out debug messages. - macbuild.sh: add support for copying resource files. Currently only used for startup.wav. - res: rename "sound" to "audio". - macbuild.sh: fix copying of resource files. - macbuild.sh: also add PA binaries to deduplication fixup list. - macbuild.sh: don't error out while executing parse_otool_output (). - macbuild.sh: save return value of parse_otool_output (). Otherwise we'll fetch the return value of "set", which is not really what we need. - src/pulsemanager.cpp: fix typo in fetch_pulseaudio_version (). Read standard output from temporary process, not our "main" server process (which at this point is not even started yet.) - src/pulsemanager.cpp: don't overwrite the temporary string variable for the current line with what was supposed to hold new data in fetch_pulseaudio_version (). - src/pulsemanager.{cpp,h}: rename on_pulse_finished () to slot_on_pulse_finished (). Oops... - src/pulsemanager.cpp: actually only play startup sound if debugging is enabled. - src/pulsemanager.cpp: don't insert stray newline into config.pa. - src/pulsemanager.cpp: insert PULSE_SERVER and PULSE_COOKIE variables into environment as used by PulseManager. Otherwise we won't be able to start binaries like paplay. - src/pulsemanager.cpp: don't remove PA config and log file in ~/.x2go/pulse on PA shutdown if debugging has been requested. - src/x2goutils.{cpp,h}: add new function find_binary (). Searches for a specific binary in a colon-separated list of paths. Really just a compat function, as Qt 5 includes QStandardPaths::findExecutable (). - src/pulsemanager.cpp: auto-detect PA binary in $PATH and MacPorts default prefix as well on OS X. - src/pulsemanager.cpp: add comments to Qt 4 code part. - src/pulsemanager.cpp: add reminder for Linux-implementation in slot_play_startup_sound (). - src/x2goutils.cpp: fix compile error. - src/pulsemanager.h: add new system_pulse_ variable to indicate that a system PA binary shall be used. - src/pulsemanager.cpp: correctly initialize and set system_pulse_ when required. - src/x2goutils.{cpp,h}: add application modality parameter to show_RichText_Generic_MsgBox () and its wrappers. - src/pulsemanager.cpp: add error message boxes throughout PulseManager. Don't just abort () the program. - src/x2goutils.h: fix compile error due to typo. - src/pulsemanager.cpp: fix compile error on Windows. - src/pulsemanager.cpp: fix startup when using the system-PA version. - src/pulsemanager.cpp: fix startup sound playback when using the system-PA version. - src/pulsemanager.cpp: add warning message boxes where appropriate. - src/pulsemanager.cpp: remove extraneous newlines from debug output. - src/x2goutils.cpp: fix faulty logic in find_binary (): only reset the given path to CWD iff it's actually empty. Not the other way around. - src/x2goutils.cpp: add some debug logging to find_binary (). - nsis/x2goclient.nsi: add startup.wav to installer package. - src/: new file windows_stdint.h for Windows-compatibility when using std::(u)int*_t types. These are only available with GCC in C++11 mode on Windows for some reason. - src/pulsemanager.h: use windows_stdint.h header on Windows, cstdint otherwise. - src/onmainwindow.cpp: short out code parts unconditionally checking for the userSshd variable. We don't need it on Windows (and don't define it on purpose) because using an user-mode SSH daemon is implied there (for now.) - src/onmainwindow.cpp: drop obsolete pulseVersionTest variable initialization in Windows-only code. - src/onmainwindow.cpp: drop obsolete pulseVersionIsLegacy variable initialization in Windows-only code. - src/onmainwindow.cpp: add another pair of braces to in_addr-type variable initialization on Windows to silence compiler warning. - src/onmainwindow.cpp: fix compile error on Windows after moving some code around. - src/onmainwindow.cpp: use correct C++ universal initializer for initializing in_addr-type variable, the C-style universal zero initializer won't cut it here. - src/pulsemanager.h: include accidentally omitted wapi.h header file. - src/pulsemanager.cpp: make PA version parsing function more generic and don't expect that a number is always terminated with a period or dash. Especially on Windows, with a PA version number of "6.0", this lead to errors. OS X was fine with its "8.0.0-something" version number, but the optional part at the end or even the micro version number could be missing any time. - src/pulsemanager.cpp: make sure that wherever we interface with non-Qt functions, paths are in native form (i.e., containing empty separators, instead of the "generic" slash UNIX-style separator.) Should fix a PA startup issue on Windows. - src/pulsemanager.cpp: fix PA version fetching on OS X again. - src/unixhelper.{cpp,h}: make argument of kill_pgroup () const. - src/unixhelper.h: style and general fixes within comments. - src/unixhelper.{cpp,h}: split off core functionality of kill_pgroup () into a new function called real_kill_pgroup (). - src/unixhelper.{cpp,h}: rewrite kill_pgroup () to act as a wrapper around real_kill_pgroup (). Adjust comment. We need to do this so the cleanup process doesn't kill itself before all other processes in the process group are killed. - src/pulsemanager.cpp: remove unused variables. - src/unixhelper.cpp: code cleanup. - src/{unixhelper.cpp,x2goclient.cpp}: fix errno usage - save before use. - src/onmainwindow.cpp: document createRSAKey () because what it does is completely non-obvious. - src/onmainwindow.cpp: add support for explicitly setting the private key bit size based on type and use values (currently) regarded as secure to generateHostKey (). - src/onmainwindow.{cpp,h}: rename generateHostKey () to generateKey () and add a boolean parameter with a default of false to request a public key. Change old invocations of generateHostKey () accordingly. - src/onmainwindow.cpp: refactor generateKey () a little bit to compact it. - src/onmainwindow.{cpp,h}: rewrite generateKey () function to actually also generate user keys. Now returns the private key file path (public key file path is trivially determined by appending ".pub" to that return value.) Change all locations referencing generateKey () to use the return value (if necessary) and remove dead code that was used to generate a user key manually previously. - src/onmainwindow.cpp: add more error handling to generateKey () and fix up a broken error-handling section. - src/onmainwindow.cpp: fix up a few debug strings. - src/{onmainwindow.{cpp,h},configdialog.cpp}: remove userSshd variable and code related to non-user-mode-sshd setups. Simplifies code a bit and we want to always start a user-mode OpenSSH server anyway. Also get rid of the clientport variable that is now unnecessary. - src/onmainwindow.cpp: when starting sshd on Unix-based plattforms, raise maximum startup time to 5 seconds and break out early, if the process went into running state earlier. - src/onmainwindow.cpp: uppercase key type in debug output and comment string in generateKey (). - src/onmainwindow.cpp: terminate sshd more correctly. First via terminate (), then wait up to 5 seconds, then via kill (). - src/onmainwindow.{cpp,h}: add new function check_key_type (). Takes a key type and checks for validity/if it's known. - src/onmainwindow.{cpp,h}: add new function key_type_to_string (). Returns a stringified version of the selected key type, after checking for validity. - src/onmainwindow.{cpp,h}: add new function default_size_for_key_type (). Returns the default key size in bits for the selected key type, after checking for validity. - src/onmainwindow.cpp: use the new functions in generateKey (). - src/onmainwindow.h: move generateKey () declaration around. - src/onmainwindow.{cpp,h}: reformat generateKey () only. - src/onmainwindow.{cpp,h}: move createRSAKey () around. - src/onmainwindow.{cpp,h}: reformat createRSAKey () only. - src/onmainwindow.cpp: let startSshd () act as a wrapper and be called multiple times. Check if the OpenSSH Server is already running and return true, otherwise try to start it. - src/onmainwindow.cpp: add some comments only to createRSAKey (). - src/onmainwindow.{cpp,h}: rename createRSAKey () to the more-appropriate name createKeyBundle (). Also add a key-type parameter and use it to select the required key type (and maybe generate it if necessary.) Also use the new functions to get a stringified version of the key type etc. - macbuild.sh: switch to bundling PA 9.0. - src/onmainwindow.cpp: move QProcess startup check in startSshd () to non-Windows code section and add a listening socket check loop. Windows uses other means of starting the daemon. - src/onmainwindow.cpp: add comment to last all-in listening check in startSshd (). - src/onmainwindow.cpp: add listening-check loop to the Windows-specific code of startSshd (). - src/onmainwindow.{cpp,h}: make startSshd () private. There's no need to keep it public, as only class-internal functions are using it. - src/onmainwindow.{cpp,h}: add ssh_key_type_ member variable and getter and setter to WinServerStarter class. - src/onmainwindow.{cpp,h}: add SSH key type parameter to startSshd (). - src/onmainwindow.cpp: pass new ssh_key_type_ member to startSshd () call in WinServerStarter::run (). - src/onmainwindow.cpp: pass key_type parameter to startSshd () in createKeyBundle (). - src/onmainwindow.cpp: add and use key_types parameter to startWinServers (). - src/onmainwindow.cpp: actually use key_type parameter in startSshd () and make selection more generic. - src/onmainwindow.h: move WinServerStarter class definition around to hopefully get the definition of ONMainWindow::key_types. - src/onmainwindow.h: remove WWrapper definition, seems to be unused. - src/onmainwindow.{cpp,h}: don't try to initialize non-static ssh_key_type_ member variable directly, but in the constructor. Also, use the initializer list to initialize the other member variables directly. - src/onmainwindow.cpp: re-order initializer list of WinServerStarter constructor. - src/onmainwindow.h: actually, we do need startSshd () to be public. Move it back. - src/onmainwindow.cpp: only pass non-Cygwin paths to QFile::exists () in generateKey (). Refactor a bit to drop the now-unnecessary ret variable. - src/onmainwindow.cpp: use QFileInfo to get the key file's basename in exportDirs () instead of the old, potentially faulty string replace dance. - src/x2goutils.{cpp,h}: make find_binary () and add_to_path () available on all UNIX-based operating systems. We will need it for sftp-server discovery. - src/pulsemanager.cpp: refactor PA binary searching code. Less duplication now. - src/onmainwindow.cpp: fix sshd_config generation on UNIX by searching for the real sftp-server binary path. - src/pulsemanager.cpp: fix PA binary searching logic. We don't want to unconditionally set system_pulse_ to true if we found a binary... it might as well be the bundled one... - src/onmainwindow.cpp: move generateEtcFiles () call to startSshd (). We must make sure that the sshd_config file exists and is up-to-date, so let's always do it right before starting the sshd binary. - src/onmainwindow.cpp: stop duplicating the list of known sftp-server binary locations. - src/{onmainwindow,pulsemanager}.cpp: actually *use* what we got back from add_to_path ()... Fixes a few bugs here and there. - src/onmainwindow.cpp: remove trailing slash from Mageia/SUSE/Arch sftp-server binary search path. - src/x2goutils.cpp: add debugging output to add_to_path (). - src/x2goutils.cpp: fix add_to_path (). We want to remove trailing slashes from elements-to-add, not just fetch a trailing slash if encountered. Also, better don't compare a value from the original path value to itself, but rather to the things we want to add in order to remove duplicates, not remove most of the list of elements to add... - src/unixhelper.cpp: use cstdio instead of stdio.h. It's the C++ header and imports functions into the std namespace. - src/: create new file unix_stdint.h which imports the (u)int*_t types into the std namespace. - src/pulsemanager.h: use unix_stdint.h on non-Windows-platforms to get std::(u)int*_t types without having to use C++11. - src/pulsemanager.cpp: fix Linux-based code by fixing a really stupid typo ("erange" instead of "errno") and including the cerrno header. - src/pulsemanager.cpp: use std::ssize_t for the path length, because it could be -1 and std::size_t is not applicable. - src/pulsemanager.cpp: cast the return value of realloc () to char*, as GCC doesn't seem to like reassigning the pointer otherwise. - src/unix_stdint.h: use same hack to import ssize_t into std namespace. - src/onmainwindow.{cpp,h}: remove left-over parec references and code. - src/onmainwindow.cpp: convert piece of code to non-Windows and non-Darwin, so that not only Linux but other operating systems are covered as well. - src/mediawidget.cpp: unify some redundant code. - src/mediawidget.cpp: simplify expression. - src/mediawidget.cpp: add deprecation warning for ARTS. - src/mediawidget.cpp: add deprecation warning for ESounD. - macbuild.sh: make compatible with new llvm-based otool binary, which now uses proper return values. Be backwards-compatible with otool-classic. - res/i18n/: refresh translation files. - deduplicate.sh: remove file, now obsolete and merged into macbuild.sh. - res/i18n/: refresh translation files again after copyright date changes. - res/i18n/x2goclient_fr.ts: fixup French translation file. - res/i18n/x2goclient_sv.ts: fixup Swedish translation file a little bit and add comments/requests for re-translations for the next time. - macbuild.sh: switch to bundling PulseAudio 10.0 since it's now available in MacPorts. - src/x2goclient.cpp: no need to put new_argv_c_str std::vector onto the heap. Keep it on the stack. - src/x2goclient.cpp: use $PATH-exploration when re-executing x2goclient in UNIX cleanup helper mode. Fixes: #1139. - src/onmainwindow.cpp: correctly initialize pulseManager and pulseManagerThread member variables. Fixes crashes on OS X and Windows if X2Go Client terminates before these objects have been created at run time (for instance when running x2goclient --help.) - src/onmainwindow.cpp: correctly guard the new lines from the previous commit. Fixes compile issues on Linux and other systems. - res/i18n/x2goclient_es.ts: fixup Spanish translation file where necessary and add comments/requests for re-translations for the next time. - res/i18n/x2goclient_es.ts: remove obsolete comments and very minor whitespace fixup. - res/i18n/x2goclient_de.ts: fixup German translation file, including typo, whitespace, grammar fixes and other stuff. - res/i18n/x2goclient_sv.ts: remove obsolete comments and very minor whitespace fix. - macbuild.sh: sanitize find input, as BSD find and GNU find behave differently. - macbuild.sh: get rid of problems and use gfind directly. We need special GNU features. - src/appdialog.cpp: logic so that X2Go-Top applications are shown again. Used faulty logic when silencing compiler warnings. - res/i18n/x2goclient_fi.ts: fix up Finnish translation file, including typo, whitespace fixes and marking untranslated entries as such again, after removing the English "translation" text. [ Bernard Cafarelli ] * New upstream version (4.1.0.0): - {res/,x2goclient.pro}: rename .rcc files to .qrc. Fixes: #1096. "rcc" is the extension for compiled resource files, whereas "qrc" is the mapping file. Qt5 stumbles upon that - i.e., it doesn't try to compile files with the "rcc" extension, while Qt4 did. - res/: fix up previous change, the renaming of changelog.qrc was not correctly committed. [ Jason Alavaliant ] * New upstream version (4.1.0.0): - src/{onmainwindow.{cpp,h},help.cpp}: modify autostart option to support multiple autostart apps at the same time. Fixes: #1024. [ Oleksandr Shneyder ] * New upstream version (4.1.0.0): - src/onmainwindow.cpp: fix SSHFS on Windows client. Fixes: #1105. [ Sébastien Ducoulombier ] * New upstream version (4.1.0.0): - res/i18n/x2goclient_fr.ts: update French translation file. [ Daniel Lindgren ] * New upstream version (4.1.0.0): - res/i18n/x2goclient_sv.ts: update Swedish translation file. - res/i18n/x2goclient_sv.ts: fixup Swedish translation file. [ Ricardo Díaz Martín ] * New upstream release (4.1.0.0): - res/i18n/x2goclient_es.ts: update Spanish translation file. - res/i18n/x2goclient_es.ts: update Spanish translation file. [ Stefan Baur ] * New upstream release (4.1.0.0): - res/i18n/x2goclient_de.ts: update German translation file. [ Martti Pitkänen ] * New upstream version (4.1.0.0): - res/i18n/x2goclient_fi.ts: update Finnish translation file. -- X2Go Release Manager Wed, 22 Feb 2017 05:02:35 +0100 x2goclient (4.0.5.2-0x2go1) unstable; urgency=medium [ Klaus Ade Johnstad ] * New upstream version (4.0.5.2): - res/i18n/x2goclient_nb_no.ts: update Bokmål (Norway) translation file. [ Mihai Moldovan ] * New upstream release (4.0.5.2): - res/i18n/x2goclient_nb_no.ts: fixup translation by respecting the original messages' format, typo fixes and other changes. - res/i18n/x2goclient_fi.ts: fixup translation by respecting the original messages' format and other changes. - src/{ongetpass,onmainwindow}.cpp: fixup QPlastiqueStyle usage on Qt5. This particular style has been removed/replaced by Fusion, which incorporates features of both Plastique and Clearlooks styles. - x2goclient.spec: whitespace only. - src/onmainwindow.cpp: add (default) MacPorts prefix, /usr/local/bin and /opt/X11/bin to x2goclient's environment and child environments before starting xmodmap. Fixes: #1019. Requires a re-release of X2Go Client for OS X. - src/x2goutils.{cpp,h}: add new function add_to_path () to add multiple entries to a PATH-like string if they do not exist in there yet. - src/onmainwindow.cpp: replace old code to modify the PATH value with the new add_to_path () function. - src/{onmainwindow,sshmasterconnection}.cpp: refactoring and whitespace only changes following up the #1027 patch. - src/onmainwindow.h: add new enum for selecting SSH host key types. - src/onmainwindow.h: rename ONMainWindow::generateHostDsaKey () to ONMainWindow::generateHostKey () and make key type selectible. Fixes: #1003. Host key type selection currently only works within the code. Replace calls to former ONMainWindow::generateHostDsaKey () with the generalized function and request an RSA-type key. - src/help.cpp: actually make help descriptions translatable. Looks ugly and is cumbersome to use, but there seems to be no other way to do that... - src/help.h: typo fix in comment only. - src/onmainwindow.cpp: add some comments related to maybe using add_to_path (). - src/onmainwindow.cpp: work around changed SSH host key locations in OS X 10.11+. Fixes: #1079. Also check /etc/ssh/ for keys. - src/onmainwindow.cpp: fix last commit by using QFileInfo instead of QDir. This lets us use the exists () member function correctly. - {nsis/x2goclient.nsi,res/i18n/x2goclient_{da,es,et,fi,nl,zh_tw}.ts}: replace left-overs of "X2go" with the correct "X2Go" spelling. This mostly touches obsolete strings and file names, that need to be cleaned, but it's still worthwhile to not have it show up when searching for the old string. Given that NTFS is normally case-insensitive, removing the files will still work. * debian/control: - Maintainer change in package: X2Go Developers . - Uploaders: add myself. Also, force a rebuild due to the changed versioning. [ Mike DePaulo ] * New upstream release (4.0.5.2): - Windows: add sshd debug1 logging when using the --debug flag. - Windows: Revert back to Cygwin components that have not been "rebased" - Windows: Update PuTTY from 0.66 to 0.67, which fixes CVE-2016-2563. - Windows: Update bundled Win32 OpenSSL from 1.0.1q to 1.0.1t, which fixes the multiple CVEs announced on 2016-01-28, 2016-03-01 & 2016-05-03. [ Martti Pitkänen ] * New upstream version (4.0.5.2): - res/i18n/x2goclient_fi.ts: update Finnish translation file. - res/i18n/x2goclient_fi.ts: update Finnish translation file. [ Sébastien Ducoulombier ] * New upstream version (4.0.5.2): - misc {src/,x2goclient.pro}: port to Qt5. [ Tor Perkins ] * New upstream release (4.0.5.2): - src/{onmainwindow,sshmasterconnection}.{cpp,h}: add support for ANSI X9.9 OTP tokens. Fixes: #1027. For this to work correctly, the challenge string needs to be displayed to the user. - src/sshmasterconnection.cpp: add support for Mobile OTP tokens and references for the other token types. Fixes: #1036. [ Oleksandr Shneyder ] * New upstream release (4.0.5.2): - reset session data in broker config. - add "--no-autoresume" parameter. [ Peter Barth ] * New upstream release (4.0.5.2): - res/i18n/x2goclient_de.ts: fix typo in close message. -- X2Go Release Manager Mon, 19 Sep 2016 06:13:14 +0200 x2goclient (4.0.5.1-0x2go1) unstable; urgency=low [ Mihai Moldovan ] * New upstream release (4.0.5.1): - onmainwindow.cpp: include sshd PID file path option in quotes to support whitespaces within the var directory path on Windows. Add comment to revisit this later on non-Windows-platforms, too. Fixes: #916. - onmainwindow.cpp: do NOT reformat. Reverts most of the previous commit because it breaks code logic. - res/txt/packs: add adaptive method. - {macbuild.sh,x2goclient.pro}: pass MacPorts library and include path's to qmake. Due to the qt4-mac's changes, we do not automatically get these values automatically "appended" in a usable way anymore. - x2gosettings.cpp: let centralSettings () return false on Windows. - onmainwindow.cpp: be more precise in slotScDaemonError () regarding unknown and undefined errors. - onmainwindow.{cpp,h}: don't use a hardcoded path to xmodmap on OS X and handle errors more gracefully. Fixes: #487. - x2goclient.pro: fix typo --stdlib=... -> -stdlib=... Fixes: #973. - onmainwindow.cpp: add some more error handling for parsing the return value of x2golistsessions. As it turns out, it can happen that "invalid" strings are inserted in there, for instance by the perl interpreter itself. We need to skip over these, or the client crashes when splitting up the invalid lines. - macbuild.sh: add stdlib forcing. Should not be used unless you really know what you're doing. If you ponder using this, you probably don't. - res/resources.rcc: add Turkish translation file. Fixes: #987. - onmainwindow.cpp: use lowercase version of locale. Fixes: #953. Fixes loading up the nb_NO translation file, which is actually baked as nb_no into the binary. - sshmasterconnection.cpp: let challenge-auth-based login attempts fallback to normal password authentication if the initial challenge-auth-based attempt was unsuccessful. - sshmasterconnection.{cpp,h}: support variable number of challenge-auth-code-based prompts. - sshmasterconnection.cpp: don't check prompts for full string equality - a matching prefix is good enough. Amongst others, this fixes errors in conditions where the prompt does not contain a trailing whitespace, but X2Go Client expects one. - sshmasterconnection.cpp: add OATH TOTP prompt prefix. Fixes: #860. - res/i18n: refresh translation files again. - res/i18n/x2goclient_nb_no.ts: replace "X-Serv..." with "X.Org Server" where applicable. - res/i18n/x2goclient_nb_no.ts: correctly use "XQuartz" where necessary. - res/i18n/x2goclient_nb_no.ts: whitespace only. - res/i18n/x2goclient_nb_no.ts: fix up some "x2go" -> "X2Go" errors. - res/i18n/x2goclient_nb_no.ts: mark translation strings needing some care ("x2go..." -> "X2Go...") as unfinished for later fixup. - res/i18n/x2goclient_nb_no.ts: fix (meta data) typo introduced with last commit. - res/i18n/x2goclient_nl.ts: fixup translation by respecting the original messages' format and other changes. - res/i18n/x2goclient_de.ts: fixup translation by respecting the original messages' format, fixing typos and general improvements. - res/i18n/x2goclient_es.ts: fixup translation by respecting the original messages' format and other changes. - res/i18n/x2goclient_sv.ts: fixup translation by respecting the original messages' format and other changes. * debian/control: - Change apache2-dev | libc6-dev build dependency back to apache2-dev only. Otherwise, apache2-dev is not installed at all, even though theoretically available. The initial reasoning for this dependency type, apache2-dev not being available on all Ubuntu/Debian platforms, is not true anymore. - Change apache2-dev build dependency yet again to apache2-dev | apache2-threaded-dev. Turns out all Debian distros but wheezy (currently oldstable) have an apache2-dev package. Even oldoldstable (squeeze) does... [ Oleksandr Shneyder ] * New upstream release (4.0.5.1): - xsettingswidget: compile only on Windows. - Add support for new style command line options of xfreerdp on direct RDP connections. (Fixes: #772). - Replace "::" with "_" for the desktop link name on Windows. - Fix direct RDP in broker mode. - Fix crashing client when editing session from SessionManageDialog. Fixes: #921. - Configure audio input in pulseaudio on Windows. - Reconnect ssh broker in case of IO Error. - Reformat source onmainwindow.cpp. - Disable settings editing if a directory with central settings is exists. - Format long names on session buttons. - Central settings for Linux, Mac and Windows. - Fix VCXSRV parameter to disable PRIMARY clipboard in X2Go Client for Windows. Fixes: #927. - Fix reading settings for direct RDP connections in broker mode. - Auto accept RSA Keys for SSH Broker with --add-to-known-hosts option. [ Mike Gabriel ] * New upstream release (4.0.5.1): - xinerama.conf: Don't choke if screen coordintate lines in xinerama.conf start with a dash ("-"). (Fixes: #948). [ Mike DePaulo ] * New upstream release (4.0.5.1): - Windows: Update bundled Win32 OpenSSL from 1.0.1p to 1.0.1q, which fixes the multiple CVEs announced on 2015-12-03. - Windows: Upgrade Cygwin components to latest versions as of 2016-01-21, except for the Cygwin DLL which is still at 1.7.33 in order to avoid breaking folder sharing and printer sharing due to 1.7.34's ACL/permissions changes. (authorized_keys file would often have mode 660 instead of 600) The latest components include most notably: + openssh 6.8p1-1-x2go1 -> 7.1p2-1-x2go1 (security update) + openssl 1.0.2d-1 -> 1.0.2e-1 (security update) - Windows: Update nxproxy from 3.5.0.31 to 3.5.0.32 - Windows: Update Unicode NSIS from 2.46.5 to 2.50.0 Pre-release, which fixes the DLL hijacking security vuln (NSIS bug 1125.) - Windows: Update PuTTY from 0.64 to 0.66, which fixes CVE-2015-5309. - Windows: Remove libzip. libssh no longer uses it. [ Orion Poplawski ] * New upstream release (4.0.5.1): - ssh{process,masterconnection}.cpp: run bash as a login shell when invoking any command remotely. Fixes: #928. Because this opens the door for ~/.bash_logout and friend scripts to be executed, which may contain calls to ncurses' reset or clear, also set the TERM variable to dump to not have unexpected output on stderr at logout time. - sshmasterconnection.cpp: check correct variable for validity: public key instead of private key (again.) Fixes: #945. [ Klaus Ade Johnstad ] * New upstream version (4.0.5.1): - res/i18n/x2goclient_nb_no.ts: update Bokmål (Norway) translation file. [ Heinrich Schuchardt ] * New upstream version (4.0.5.1): - sshmasterconnection.cpp: don't fetch invalid proxy socket. Fixes: #1000. From http://doc.qt.io/qt-4.8/qabstractsocket.html#socketDescriptor: The socket descriptor is not available when QAbstractSocket is in UnconnectedState. So we have to connect to the proxy server first before retrieving the native socket. [ Daniel Lindgren ] * New upstream version (4.0.5.1): - res/i18n/x2goclient_sv.ts: update Swedish translation file. [ Sébastien Ducoulombier ] * New upstream version (4.0.5.1): - res/i18n/x2goclient_fr.ts: update French translation file. [ Jos Wolfkamp ] * New upstream version (4.0.5.1): - res/i18n/x2goclient_nl.ts: update Dutch translation file. [ Stefan Baur ] * New upstream release (4.0.5.1): - res/i18n/x2goclient_de.ts: update German translation file. [ Ricardo Díaz Martín ] * New upstream release (4.0.5.1): - res/i18n/x2goclient_es.ts: update Spanish translation file. -- X2Go Release Manager Thu, 24 Mar 2016 21:35:30 +0100 x2goclient (4.0.5.0-0x2go1) unstable; urgency=low [ Mihai Moldovan ] * New upstream release (4.0.5.0): - INSTALL: add more verbose instructions on how to build X2Go Client and friends. - onmainwindow.{cpp,h}: rename slotScDaemonOut() and slotScDaemonError() to slotScDaemonStdOut() and slotScDaemonStdErr(). I will need slotScDaemonError() later and the previous names were a bit of a misnomer. - x2goutils.{cpp,h}: add new show_RichText_Generic_MsgBox() main function designed to replace the show_RichText_WarningMsgBox() function. - x2goutils.{cpp,h}: make show_RichText_WarningMsgBox() use show_RichText_Generic_MsgBox (). - x2goutils.{cpp,h}: new show_RichText_ErrorMsgBox() function as a wrapper for show_RichText_Generic_MsgBox() with a critical icon. - onmainwindow.{cpp,h}: properly handle scdaemon errors with a message box and close the client. - onmainwindow.cpp: manipulate PATH and append /usr/lib/gnupg2/ to it when starting scdaemon. Fixes: #882. - x2goutils.h: add QMessageBox include, fixed compile error. - onmainwindow.cpp: fix typos leading to compile errors. - onmainwindow.cpp: add blocks to switch cases to fix a compile error. Also correctly append to informative_text on one occasion, instead of overwriting it. - x2goutils.cpp: correct typo to fix compile errors. - onmainwindow.cpp: drop a redundant variable and fix empty env check. - onmainwindow.cpp: add more newlines to scdaemon error output. Use trayQuit() method to really quit the client. - onmainwindow.cpp: add debugging output for new scdaemon PATH value. - onmainwindow.cpp: split up PATH value as printed in the error message box by a newline every 100 characters. Makes it look less ugly and fixes truncation issues. - sshprocess.cpp: export PATH variable when running commands. Otherwise, only the first one will respect the new PATH value. - sshprocess.cpp: wrap SSH command prelude and conclusion in double quotes. - sshprocess.cpp: wrap all remote commands with "bash" instead of the unspecific "sh". - onmainwindow.cpp: try to escape shell quotes correctly when using Kerberos/GSSApi when running the xmodmap keyboard sync command on OS X. - onmainwindow.cpp: also escape other shell quotes when using Kerberos/GSSApi. - onmainwindow.cpp: silence compiler warning by casting an int value to std::size_t. - onmainwindow.cpp: silence another compiler warning by not converting from string to int and back to string needlessly. Just use the string. No need for an OS X-specific variable anymore. - onmainwindow.cpp: fix compile error - use QString.toAscii () to get a valid C string representation for tr (). - onmainwindow.cpp: don't terminate if scdaemon exited with non-zero exit code. - sshprocess.cpp: don't use QProcess::start (QString). Qt is trying to be too smart and causes big trouble. Instead, use QProcess::start (QString, QStringList) and pass the arguments as a list. On Windows, Qt will automatically double quote the arguments and duplicate escaped double quotes or escape non-escaped double quotes. On UNIX-like platforms, each element of the list is passed as a unique argv element, so there's no need for quoting them (that's only a shell-internal thing to group arguments.) - sshprocess.cpp: add a bit more debugging - also print out the unmodified raw output of SSH commands. - onmainwindow.cpp: remove now-bogus double quote escaping. - sshmasterconnection.cpp: port QProcess::start () change. - sshprocess.cpp: whitespace/prettify only and a compile fix. - x2goclient.pro: reinstate old lrelease "search" behavior if qtPrepareTool() is not available. This should only happen on EPEL 6, which ships a broken Qt4 version... - onmainwindow.cpp: only set multidisplay mode for non-rootless sessions. - {ui/xsettingsui.ui,xsettingswidget.cpp}: add new "whole display" option for external X server configuration. Part of #883. - onmainwindow.cpp: rename "optionsmd" setting to "optionswholedisplay", which is more clear. - xsettingswidget.cpp: fix compile error: settings -> setting. - sessionmanagedialog.cpp: enable some debugging and make selected sessions configureable or deletable. Fixes: #909. [ Mike Gabriel ] * debian/control: + Add alternative D for nxproxy: qvd-nxproxy. Allows parallel installation of X2Go Client and the TheQVD client (perl-qvd-client). [ Mike DePaulo ] - Windows: Update bundled Win32 OpenSSL from 1.0.1m to 1.0.1p, which fixes the multiple CVEs announced on 2015-06-11 and CVE-2015-1793 (announced on 2015-07-09). - Windows: Upgrade the MSVC 2008 DLLs (9.0.21022.8) to the MSVC 2013 DLLs (12.0.21005.1), which Win32 OpenSSL now requires. - Windows: Only bundle msvcr120.dll; The other 2 MSVC DLLs aren't needed by Win32 OpenSSL. - Windows: Update bundled Cygwin OpenSSL from 1.0.2a-1 to 1.0.2d-1, which which fixes the multiple CVEs announced on 2015-06-11 and CVE-2015-1793 (announced on 2015-07-09). - Windows: Update bundled VcXsrv from 1.17.0.0-1 (X2Go/Arctica Build) to 1.17.0.0-3 (X2Go/Arctica Build) The differences relevant to X2Go are: + VcXsrv's bundled version of openssl was updated from 1.0.2a to 1.0.2d (fixes the multiple CVEs announced on 2015-06-11 and CVE-2015-1793 (announced on 2015-07-09). + Drop winmultiwindow.patch (Part of #883) + hw/xwin/glx: Don't create fbConfigs for un-accelerated pixelFormats This has the effect of disabling StaticColor under MultiWindow mode with -wgl (default) and -swrastwgl, and thus making X2Go sessions started from the Windows client able to be resumed on the client on a different OS or the client runing on Windows with different display settings. (Fixes: #696) - Linux: Fix desktop session icons (.desktop files) failing due to missing space between "x2goclient" and its 1st argument (e.g. "--session") (Fixes: #911) [ Henning Heinold ] * New upstream release (4.0.5.0): - x2goclient.pro: simplify lrelease path preparing for different OS and cross compiling. Fixes: #901. [ Oleksandr Shneyder ] * New upstream release (4.0.5.0): - onmainwindow.{cpp,h}: fix multimonitor mode on Windows. Run VcXsrv on selected screen without decorations. -- X2Go Release Manager Tue, 28 Jul 2015 04:48:20 +0200 x2goclient (4.0.4.0-0x2go1) unstable; urgency=low [ Mike DePaulo ] * New upstream release (4.0.4.0): - Windows: Do not delete saved PuTTY sessions when Kerberos 5 (GSSAPI) authentication is enabled (Fixes: #625/#789) - Windows: Fix "Connection failed" "pscp" error with folder sharing when Kerberos 5 (GSSAPI) auth is used, and the server-side home dir is at a path other than /home/$USER (Fixes: #868) - Windows: Fix audio (PulseAudio) when Kerberos 5 (GSSAPI) authentication is used (Fixes: #869) - Windows: Include debug build in the regular installer. It is an optional component during the install. It is not installed by default. - Windows: Include Pageant and PuTTYgen in the installer. They are optional components during the install. They are installed by default. - Windows: Add descriptions for the "components" in the installer (English language only at this time) - Windows: You can now view the version and some other info by: right-click on the installer -> Properties -> Details (English language only at this time) - Windows: Upgrade bundled PulseAudio from 5.0-rev18 to 6.0-11.1 (No known impacts to X2Go, except for the fact that many needed patches are now included in upstream PulseAudio.) - Windows: Upgrade bundled VcXsrv from 1.15.2.2-xp+vc2013+x2go1 to 1.17.0.0-1 (X2Go/Arctica Build) Note that X2Go Client for Windows 4.0.3.2-20150508 has an update to 1.15.2.6 (X2Go/Arctica), which fixes all the CVEs. The differences relevant to X2Go are: + Numerous X.org components were upgraded to new major/minor versions. + CVE-2015-0255 was fixed in VcXsrv itself + CVE-2015-3418 was fixed in VcXsrv itself + Font files no longer differ in each build due to timestamp differences + VcXsrv's bundled version of openssl was upgraded from 1.0.1k to 1.0.2a (fixes the multiple CVEs announced on 2015-03-19) + VcXsrv's bundled version of libXfont was upgraded from 1.4.8 to 1.5.1 (Fixes CVE-2015-1802 through CVE-2015-1804) + VcXsrv's bundled version of freetype was updated from 2.5.3 to 2.5.5 (fixes CVE-2014-9656 through CVE-2014-9675) - Windows: Update bundled Win32 OpenSSL from 1.0.1L to 1.0.1m, which fixes the multiple CVEs announced on 2015-03-19. Note that X2Go Client for Windows 4.0.3.2-20150329 has this update also. - Windows: Update bundled PuTTY from 0.63 to 0.64. In addition to other changes, CVE-2015-2157 has been fixed. - Windows: Upgrade libssh from 0.6.4 to 0.7.0 (while maintaining Pageant support). The differences relevant to X2Go are: + CVE-2015-3146 was fixed + Added support for ed25519 keys + Added SHA2 algorithms for HMAC Note that X2Go Client for Windows 4.0.3.2-20150508 has the update to 0.6.5, which fixes the CVE also. - Windows: Update bundled nxproxy (nx-libs-lite) from 3.5.0.27 to 3.5.0.31. (bugfix & feature update) - Windows: Update/Upgrade bundled Cygwin components to latest versions as of 2015-04-25 (except for the Cygwin DLL, which was upgraded but not to the latest version). Note that all the security fixes were included in updates to X2Go Client for Windows 4.0.3.2 + openssl 1.0.1k-1 -> 1.0.2a-1 (upgrade. includes security fixes for the multiple CVEs announced on 2015-03-19.) + libjpeg-turbo 1.8.1-1 -> 1.8.1-3 (security update for CVE-2014-9092) + libpng 1.5.21-2 -> libpng16 1.6.17-1 (upgrade, may improve X2Go performance when PNG compression is selected. Also includes the fix for CVE-2013-6954) + gcc 4.8.3-3 -> 4.9.2-3 (upgrade, may improve X2Go performance a little bit) + openssh 6.6p1-3-x2go1 -> 6.8p1-1-x2go1 (upgrade, probably not relevant to X2Go) + cygwin (DLL) 1.7.32-1 -> 1.7.33-1 (upgrade, probably not relevant to X2Go) + dash 0.5.8-2 -> 0.5.8-3 (feature update, not relevant to X2Go) + ncurses 5.9-20140524-1 -> 5.9-20150404-1 (update, probably not relevant to X2Go) + zlib 1.2.8-1 -> 1.2.8-3 (update, undocumented by Cygwin project) - Windows: Copy the exact version of each cygwin DLL from the cygwin binary tarballs rather than copying the "rebased" version from an X2Go developer's cygwin installation. What effect this will have on users is TBD. However, it does mean that we are distributing the exact DLLs that the Cygwin project provides, which is desirable for security. [ Mihai Moldovan ] * New upstream version (4.0.4.0): - Move *.cpp and *.h files to src/ and *.ts files to src/i18n/. - Reference src/ in Doxyfile. - Reference src/ and src/i18n/ in x2goclient.pro. - Move *.ui files to src/ui/ and reference in x2goclient.pro. - Translate and simplify header in x2goclient.pro. - Add x2goclientconfig.pri only containing a comment to override specific entries in x2goclient.pro in x2goclientconfig.pri. - Move resource files to src/res/ and reference in x2goclient.pro. - Reference changes in shipped Makefile. - Rename SRC_DIR to TOP_DIR in shipped Makefile. - Rename qtbrowserplugin--opensource to x2gobrowserplugin- and reference in x2goclient.pro. - Move x2goplugin.rc to x2gobrowserplugin-*/src/res/ and reference in x2goclient.pro. - Remove executability from x2goclient.pro. - Fix typos and update URL's in INSTALL file. - Fix typos and grammar in HOWTO.GPGCARD. - Add "X2Go Project" copyright to LICENSE file. - Replace backticks with $() and change spaces to tabs in Makefile.man2html. - Reformat README.OpenSSL-Exception. - Grammar fix in README.i18n. - Update .gitignore with more temporary files. - Make x2goclient.pro consistent: replace tabs with spaces, put quotes around messages, remove or add whitespace where applicable. - Move *.rc and *.rcc files back to top directory for now. Resources must be in the resource file's base directory or a sub-directory. - Move icons/ to img/icons/ and update references in + resources.rcc + COPYRIGHT.x2go-logos + Makefile + debian/x2goclient.install + macbuild.sh + nsis/x2goclient.nsi + src/onmainwindow.cpp + src/appdialog.cpp + src/folderbutton.cpp + src/folderexplorer.cpp + src/sessionbutton.cpp + src/sessionexplorer.cpp + src/sessionmanagedialog.cpp + src/sessionwidget.cpp + src/ui/helpdialog.ui + src/xsettingswidget.cpp - Move png/ to img/png/ and update references in resources.rcc and src/onmainwindow.cpp. - Move svg/ to img/svg/ and update references in resources.rcc, src/folderbutton.cpp, src/onmainwindow.cpp and src/sessionbutton.cpp. - Move *.ts files back to the top directory (they are resources.) - Move *.ts and *.qm files to i18n/ and update references in resources.rcc, x2goclient.pro and debian/rules. - Fix formatting errors in nsis/gpl.txt. - Fix whitespace errors in nsis/x2goclient.nsi. - Don't change the icons path in nsis/x2goclient.nsi. - Make nsis files non-executable. - Move x2go-logos/ to img/x2go-logos and update references in COPYRIGHT.x2go-logos. - Fix whitespace errors in x2gobrowserplugin-2.4_1/src/res/x2goplugin.rc. - Move i18n/ to res/i18n/ and update references in debian/rules and x2goclient.pro. - Remove executability bit from src/sshmasterconnection.cpp and src/sshprocess.cpp. - Move img/ to res/img/ and update references in + COPYRIGHT.x2go-logos + Makefile + debian/x2goclient.install + macbuild.sh + x2goclient.pro + x2goclient.rc - Move + git.rcc + changelog.rcc + x2goclient.rc + resources.rcc to res/ and update references in x2goclient.pro and src/ui/helpdialog.ui. - Reference new src directory as include dir in x2goclient.pro. - Move txt/ to res/text/ and update references in + x2goclient.pro + Makefile + debian/rules + x2goclient.spec - Whitespace fix in Info.plist. - Use more quoting and curly braces for referencing variables in macbuild.sh. - Define TOP_DIR variable in macbuild.sh -- set to $PWD. - Define the new variables $SDK and $MACOSX_DEPLOYMENT_TARGET in macbuild.sh which can also be (pre-)set through the environment. Default to the 10.7 SDK and deployment target. Use the variables when calling qmake. - Specify -spec macx-g++ when using qmake in macbuild.sh. - Directly reference project file for qmake in macbuild.sh. - Use out-of-source build and do not overwrite the default shipped Makefile in macbuild.sh. - Also also specify the top dir when defining the path to the generated appbundle and dmg file in macbuild.sh. - Move Info.plist to res/ and update reference in x2goclient.pro. - Fix references of resources in macbuild.sh to access files from TOP_DIR. - Work around a bug in qmake generating incorrect make rules for embedding the OS X app bundle Info.plist file. - Work around another bug in qmake and copy icon "manually". - Define wrap_legacy_resources() function and use it to wrap legacy resource locations stored in old session config files. - Add some debugging output to sessionbuttons/userbutton to see what file path is being used as a pixmap (user photo/session icon.) - Add myself to copyright section in the x2goutils headers. - Change four spaces per indentation level to two spaces in x2goutils.cpp. - Add fixup_resources() to x2goutils to fix "broken" resource URI's. - Rename fixup_resources() and wrap_legacy_resources() to fixup_resource_URIs() and wrap_legacy_resource_URIs(). Update references. - Move res/Info.plist and macdmg.DS_Store to res/osxbundle/ and update references in x2goclient.pro and macbuild.sh. - Add debug mode selector via DEBUG env variable to macbuild.sh. - Enable more debugging if needed: change -g flag to -g3 -ggdb3 -gdwarf-4. - Select stdlib on OS X based on the passed or default SDK value. - Fix TOP_DIR handling in macbuild.sh. - Switch to BASH interpreter for macbuild.sh. - Also accept "FALSE" and "false" as binary values in macbuild.sh. - Make bundling optional (but enabled by default) via the new BUNDLE environment variable in macbuild.sh. - Enable -O2 in debug mode. Otherwise, debug mode would test different execution paths than release mode. - Add new UNUSED() macro to x2goutils.h and silence compiler warnings. - Fix some QMessageBox usages. There are many more places that need fixing... - Remove config_mac.sh. macbuild.sh handles this now. - Use the correct client build dir in macbuild.sh: client_build. - Only use --stdlib compiler flag on 10.7+. Unsupported on 10.6 and below. - Use sh default assignment instead of default value in macbuild.sh. Removes the need to redundantly specify the variable name. - App bundle and dmg file will be automatically removed when removing the client build directory. Remove redundancy from macbuild.sh. - Remove 'function' keyword in macbuild.sh, as it's causing undefined behavior according to SUS. - Define and implement new function 'make_boolean()' in macbuild.sh. Takes a pseudo-boolean value and outputs either 0 or 1. Use this function. - Move functions to the start of the macbuild.sh script. - New env var/parameter UNIVERSAL in macbuild.sh. Switches the build architecture to either exclusively x86_64 (UNIVERSAL=0) or both x86_64 and x86 (UNIVERSAL=1). - Add usage message to macbuild.sh obtainable via -h or --help. - x2goclient.pro.maemo: cleanup. + Reorder sections so that they match x2goclient.pro. + Adapt to new directory structure. + Various whitespace fixes. - Move OS X-specific stuff from general section to macx section in x2goclient.pro. - Move ICON definition up before it's actually used in the macx section in x2goclient.pro. - Windows: move building into client_build subdirectory. Also needs the changes in buildscripts.git. - Windows: convert and delete the other config or build scripts. Delete obsolete ones. - Windows: correctly reference windows icon. - x2goclient.spec: fix builds on Fedora and related due to failing removal of browserplugin directory. That's non-critical. - onmainwindow.cpp: actually call slotTunnelOk(int), do not generate a run time error by calling the non-existent function slotTunnelOk(). Fixes: #804. - onmainwindow.cpp: clarify message regarding missing SSH daemon host keys. Fixes: #793. - non_modal_messagebox.{cpp,h}: Add new Non_Modal_MessageBox class for non-modal message boxes. - onmainwindow.cpp: use Non_Modal_MessageBox::critical function to display errors relating to missing sshd host keys. Fixes: #794. - onmainwindow.cpp: also make the message about a non-running sshd non-modal. - {x2goclient.pro,res/osxbundle/{Info.plist,postbuild.sh}}: + Add new postbuild script to set the correct version in the processed Info.plist output file. + Use this script in x2goclient.pro as QMAKE_POST_LINK command. + Move Icon copying into that script. + Define version in x2goclient.pro. - onmainwindow.cpp: consolidate Windows and non-Windows sshd startup error message. - onmainwindow.cpp: typo fix (authoized_keys.) - onmainwindow.cpp: stop exporting directories (Printing, File Sharing) on sshd error. - onmainwindow.cpp: fix session icon not being displayed as tray icon (missed legacy resource URI wrapper call.) - configdialog.cpp: update XQuartz outdated version info message and links. Add MacPorts reference. - configdialog.cpp: reformat code, add MacPorts and XQuartz references, URL's and installation instructions, don't show outdated version warning when no XQuartz server is installed. Fixes: #792. - x2goutils.{h,cpp}: use QString references. - x2goutils.{h,cpp}: add new helper function show_RichText_WarningMsgBox. - configdialog.cpp: use new helper function show_RichText_WarningMsgBox to show proper errors. Format as HTML. Use hyperlinks. Rephrase XQuartz warning messages. - configdialog.cpp: return empty strings as paths to the XQuartz application if no valid one could be found in order to show the proper error message. - configdialog.cpp: rephrase another error message, use the new helper and reformat code. - onmainwindow.{cpp,h}: make slotTunnelOk parameter optional and use the non-parameter call for the QSingleShotTimer::timeout() signal. - x2goutils.{h,cpp}: split up show_RichText_WarningMsgBox() into the aforementioned function and a new convert_to_rich_text() helper function. - non_modal_messagebox.{h,cpp}: add new Non_Modal_MessageBox::critical() overloaded functions to be able to use informative text and a (forceful, if requested) conversion to rich text. - onmainwindow.cpp: prettify non-running sshd error message. - onmainwindow.cpp: prettify non-available host key error message. - onmainwindow.cpp: also use usermode sshd on OS X, if no global daemon is running. - onmainwindow.cpp: on OS X, specify sshd's PID file location in its server config. - onmainwindow.cpp: wait 3 seconds before checking sshd startup state to allow it to come up. - onmainwindow.cpp: adapt SSH host key warning message to new usermode sshd possibilities. - configdialog.cpp: make XQuartz detection algorithm QStringList-based and add MacPorts location. - onmainwindow.cpp: do not define Ctrl+Q two times. Made it unusable on Linux and Windows. (Fixes: #830). - onmainwindow:cpp: correctly pass escaped single quote when writing remote xinerama config file. Post-fixup for #797. - {onmainwindow.cpp,README.i18n}: fix localization -- resource strings were not correctly updated. Fixes: #828. - onmainwindow.cpp: quote commands for generating pulse-client.conf correctly, add more quotes and use absolute file path for pulse cookie. - version.h: add include guard. - help.{cpp,h}: add skeleton for new help system. - help.{cpp,h}: add sanitizing helpers. - help.cpp: populate pretty_print: fetch max length of params. - help.cpp: get terminal window sizes on UNIX-based and Windows operating systems. - help.cpp: complete pretty printer function. - help.cpp: "copy" old command line parameters. - help.cpp: document broker options. Fixes: #851. - help.cpp: actually output the help message. - help.{cpp,h}: also pass the help message on (for display in graphical mode.) - x2goclient.pro{,.maemo}: add new help.{cpp,h} files. - onmainwindow.cpp: replace old help system with new one. - {{onmainwindow,help}.cpp},help.h}: fix misc. build errors. - help.h: fix run time error by actually giving QTextStream a "device" to write to. - help.cpp: clear current string if completely written onto one line. - help.cpp: enable debugging for pretty_print(). --debug must be supplied before --help for this to work. - help.cpp: fix splitting algorithm to step over a space character, but include hyphens correctly into the current line. - help.cpp: don't let qCritical() add even more spaces or quotes around the help message. - help.cpp: add support for newlines within descriptions. - help.cpp: use new newline feature for some options. - help.cpp: trying to split at hyphens was a bad idea. Remove that part. - help.cpp: fix a compile warning (by including winsock2.h) and error (caused by a typo) on Windows. - help.cpp: hardcode indentation value to 2 (for the first spaces) + maximum length of parameters + 4 (for the trailing 4 spaces). Calculations via terminal_cols and remaining do not work, if terminal_cols is unknown. - x2goutils.{cpp,h}: implement new git_changelog_extract_commit_sha helper, extracting the most recent commit shasum from a git changelog string. - help.cpp: use new git_changelog_extract_commit_sha() helper while building the help prelude. - helpdialog.cpp: change to monospaced font. - helpdialog.cpp: use QT_VERSION macro to select either a monospaced or typewriter font (Qt < 4.7.0 only supports TypeWriter.) - x2goutils.{cpp,h}: add new font_is_monospaced() helper. - helpdialog.cpp: try harder to set a monospaced font. - helpdialog.cpp: lower font size to have more space for text. - ui/helpdialog.ui: almost double the window size. - help.cpp: typo fix for --git-info. - help.{cpp,h}: provide string splitting logic as separate split_long_line() function. Use this in pretty_print(). - help.cpp: simplify pretty_print() and make it also split lines for non-terminal output or when the terminal width is unknown. - help.{cpp,h}: add a boolean terminal_output parameter to the pretty_print() function family. Controls terminal width auto-detection and automatic printing to stderr. - onmainwindow.cpp: don't let a potential terminal affect the help string shown in the GUI. - help.h: lower default splitting length to 100 characters. - onmainwindow.cpp: fix up pulse config file generation and PULSE_CLIENTCONFIG setting once more. - {macbuild,res/osxbundle/postbuild}.sh: add support for git information if not building from a tag. Also includes build date. - {{configdialog,onmainwindow}.cpp,x2goutils.{cpp,h}}: new helper functions show_XQuartz_not_found_error(), show_XQuartz_start_error() and show_XQuartz_generic_error(). The first two are calling the latter one. Replace previous messages in configdialog.cpp and onmainwindow.cpp with the helpers, because they are supposed to pop up a dialog showing almost the same message. - x2goutils.cpp: fix compile error. tr () is a member of QObject and must be explicitly marked as such in a free function. - {configdialog.{cpp,h},onmainwindow.cpp}: miscellaneous typo fixes - no functional changes. - onmainwindow.cpp: whitespace changes to installTranslator() only. - onmainwindow.cpp: correctly let Qt fetch the UI display language for Qt 4.8.0 and higher. The old "compat" behavior is retained for older versions of Qt, which do not have the semantics of a UI display language. Fixes: #845. - config_win.bat: enable release by default, fetch command line parameter and compare against debug. Enable debug and console features in that case. - onmainwindow.{cpp,h}: follow-up to last translation fix. Actually handle English locales correctly and don't duplicate code too much. - onmainwindow.{cpp,h}: make new get_translator() function static. Correct typo in implementation. - onmainwindow.h: include used types/headers. - onmainwindow.cpp: correctly call QLocale::uiLanguages (). - onmainwindow.cpp: copy strings before manipulating them. - onmainwindow.h: make get_translator() const. Does not change any state. - onmainwindow.cpp: fix compile error triggered by a missing parenthesis/typo. - onmainwindow.cpp: workaround https://bugreports.qt.io/browse/QTBUG-25973. - onmainwindow.h: revert const-qualifier for get_translator(). It's static and can't have any cv-qualifier. - copy-deps-win32.bat: actually let xcopy error correctly. - general: improve debug output and error messages. Affects: + LDAPSession.cpp + configdialog.cpp + contest.cpp + cupsprintersettingsdialog.cpp + exportdialog.cpp + folderexplorer.cpp + httpbrokerclient.cpp + onmainwindow.cpp + onmainwindow.h + printdialog.cpp + printprocess.cpp + printwidget.cpp + sessionbutton.cpp + sessionexplorer.cpp + sessionmanagedialog.cpp + sessionwidget.cpp + settingswidget.cpp + sharewidget.cpp + sshmasterconnection.cpp + sshprocess.cpp + wapi.cpp - sshmasterconnection.cpp: fix typo in last commit leading to a compile failure, correct content, remove superfluous newlines. - sessionexplorer.cpp: use a better shared logic for generating an arguments list for calling x2goclient.exe from a desktop shortcut. Respect the tray icon option also on Windows. Fixes: #871. [ Fernando Pedemonte ] * New upstream release (4.0.4.0): - onmainwindow.cpp: fix bad quoting when writing remote xinerama config file. Fixes: #797. [ René Genz ] * New upstream release (4.0.4.0): - {LICENSE,debian/copyright}: fix typo in URL of obviously-nice.de. Fixes: #811. [ Mike Gabriel ] * New upstream release (4.0.4.0): - onmainwindow.cpp: fix desktop sharing via session broker. Fixes: #584. [ Jason Alavaliant ] * New upstream release (4.0.4.0): - onmainwindow.cpp: handle %i and %c format flags in desktop files correctly: remove the %i flag and replace %c with the application name. Fixes: #827. [ Nicolas Husson ] * New upstream release (4.0.4.0): - src/{onmainwindow,sshmasterconnection}.cpp: enable use of SSH proxy configuration with x2goplugin. Fixes: #798. + v2: refactor patch, fix whitespace issues. (Mihai Moldovan) [ Stefan Baur ] * New upstream release (4.0.4.0): - general: fix spelling and English language syntax issues. Fixes: #389. + v2: apply more fixes in the original changes context. (Mihai Moldovan) -- X2Go Release Manager Tue, 26 May 2015 21:09:14 +0200 x2goclient (4.0.3.2-0x2go1) unstable; urgency=medium [ Oleksandr Shneyder ] * New upstream release (4.0.3.2): - Fix placement of session folders in session card column. (Fixes: #681). - Send empty message in x2gohelper to stop AppStarting cursor. (Fixes: #616). - Fix multiple creations of modmap timer (OS_DARWIN). [ Mike Gabriel ] * New upstream release (4.0.3.2): - Add several info/error/debug log message while hunting down #702. - Use app.setQuitOnLastWindowClosed(false) for the X2Go Client QtApplication to assure that X2Go Client does not arbitrarily exit during a running session. This fixes X2Go Client crashes that occur when printing via the CUPS-X2Go printing mechanism with activate print dialog popup on incoming print jobs and minimized main window. (Fixes: #702). - Be more exact when reporting rev forwarding tunnel request failures to the GUI user. Include the purpose of the tunnel (NX, audio, foldersharing) in the error message. - Enable debugging in sshprocess.cpp and sshmasterconnection.cpp if --debug is given. - sshmasterconnection.cpp: Fix several grammar issues in error messages. - When sharing a client-side folder, do not write the SSH pub key to client-side authorized_keys file if the folder-to-be-shared does not exist on the client. (Partially solves #405). - Fix string concatenation/layout of error message when tunnel I/O errors occur. - Improve debugging/logging the SSH connections made by X2Go Client. - Fix quotes when calling remote commands via SSH (esp. allow same quoting/ escaping style for libssh and openSSH+Krb based connections). (Fixes: #720). - FIXME: Disable PubkeyAuthentication _and_ PasswordAuthentication if GSSAPI authentication is activated. This is counter intuitive, though, and requires several other fixes in the authentication code. * x2goclient.spec: - Always set BuildRoot: parameter. [ Sergey Savko ] * New upstream release (4.0.3.2): - Prevent passwordless re-logins into X2Go Session Broker if --broker-autologoff is used on the cmdline. (Fixes: #782). - Add new cmdline option --broker-noauth-use-session-username. When --broker-noauth is used, the broker does not know on behalf of which user to operate. This new option enables username syncing. When logging into X2Go Server, that username will be sent to the broker and be used for querying X2Go Broker Agents etc. (Fixes: #781). [ Heinrich Schuchardt ] * New upstream release (4.0.3.2): - Base the layout dialogue "Session ID" (which shows up when starting a connection) on typographic points (instead of pixels). (Fixes: #713). [ Jason Alavaliant ] * New upstream verson (4.0.3.2): - Use QUrl::toPercentEncoding() method to properly encode passwords sent to X2Go Session Broker. (Fixes: #705). [ Mike DePaulo ] * New upstream release (4.0.3.2): - Windows: Win32 OpenSSL updates from 1.0.1j to 1.0.1L, which fixes the CVEs announced on 2015-01-08. - Windows: Cygwin OpenSSL updated from 1.0.1j-1 to 1.0.1k-1, which fixes the CVEs announced on 2015-01-08. - Windows: Bundle new version of VcXsrv: 1.15.2.2-xp+vc2013+x2go1. The differences from 1.15.2.1-xp+vc2013+x2go1 are that its bundled OpenSSL has been updated to 1.0.1k, and that xorg-server CVE-2014-8091..8103 have been fixed. - Windows: Update libssh from 0.6.3 to 0.6.4 (while maintaining Pageant support). This fixes CVE-2014-8132, which shouldn't affect x2goclient because x2goclient uses the SSH client functionality, not the SSH server functionality. 0.6.4 also added 4 features related to ECDSA keys. - Windows: Fix compatibility with PulseAudio 6.0 - Windows: Remove workaround for audio input with old versions of PulseAudio (calling parec once per second) (Fixes: #742) Thanks George Trakatelis (uom.edu.gr) for submitting this change. - Windows: Enable X2Go Client for Windows to build under VS2010 nmake (but not the VS2010 IDE due to a Qt4 Visual Studio Add-in limitation) Note that the official builds are still build under MinGW. (Fixes: #642) Thanks George Trakatelis (uom.edu.gr) for submitting this feature. - Windows: Make builds easier, and updating bundled dependencies easier, by adding copy-deps-win32.bat. It copies the exact version of each dependency (DLL, executable, data, folder, etc) from x2goclient-contrib.git. [ Kaan Ozdincer ] * New upstream version (4.0.3.2): - Add Turkish translation file. -- X2Go Release Manager Thu, 19 Feb 2015 12:49:22 +0100 x2goclient (4.0.3.1-0x2go1) unstable; urgency=medium [ Mike Gabriel ] * New upstream release (4.0.3.1): - Fully rework x2goclient man page. Add many options that haven't been documented so far. - Make sound options configurable via X2Go Session Broker. (Fixes: #652). - Fix (cross-user) desktop sharing since introduction of clipboard mode feature. - Update several translation files after splitting of session profile's "Settings" tab into "Input/Output" and "Media". Translations for these two new tabs derived from the i18n files of PyHoca-GUI. [ Mark Pedersen-Cook ] * New upstream release (4.0.3.1): - Update Danish translation file. [ Oleksandr Shneyder ] * New upstream release (4.0.3.1): - Split Sessions config widget into Input/output and Media widgets. (Fixes: #643). -- Mike Gabriel Thu, 27 Nov 2014 11:00:17 +0100 x2goclient (4.0.3.0-0x2go1) unstable; urgency=low [ Mike Gabriel ] * New upstream release (4.0.3.0): - Disallow server-side users to override X2Go Server commands via ~/bin (or similar). (Fixes: #336). - Avoid unitialised variables on early calls of ONMainWindow::closeEvent() or ONMainWindow::closeClient(). (Fixes: #253). - Update translation files. Add empty Portuguese translation. Update qt_.qm files from Debian unstable as of today. - Update German translation file (after session folder feature got added). - Makefile.man2html: Test if man2html exists. If not, don't fail. - Honor exports (client-side shared folders) from broker session profiles. Thanks to Ming Song for providing a patch for this (Fixes: 612). * debian/control: + Add B-D: apache2-dev. On squeeze / lucid builds, this is a superfluous B-D, but for later Debian/Ubuntu versions, this smoothes the installation of the x2goplugin-provide bin:package. + Update B-D: apache2-dev | libc6-dev. The apache2-dev package does not exist on all Debian/Ubuntu versions. * x2goclient.spec: + Adapt to building for openSUSE/SLES. + openSUSE: Make Qt4 Linguist tools available for Makefile. + Upgrade versioned BR for libssh-devel (0.6.3 or patched 0.5.5). + The libqt4-linguist split off happened in openSUSE 13.1. + Add x2goclient-rpmlintrc file. + In openSUSE, it is openldap2-devel, in Fedora/RHEL it is openldap-devel. + In openSUSE, openssh is openssh (not openssh-clients / openssh-server). [ Oleksandr Shneyder ] * New upstream release (4.0.3.0): - Fix running x2goclient without arguments on Windows. (Fixes: #522). - Save proxy output in $HOME/S-$SESSION-ID/session.log if debugging is enabled. - Fork x2goclient on windows and terminate child processes if X2Go Client crashed. (Fixes: #159). - Add "clipboard" parameter to session profile and to command line options. (Fixes: #258). - Replace qCritical() with printError() by argument parsing. - Update translation files. - Update russian translation. - Update string "&Clipboard Mode" and translate in russian translation file. - Grammar fix in russian translation. - Add x2gohelper to start X2Go Client on Windows and clean child processes if X2Go Client crashes. (Fixes: #525). - On Windows rename x2goclient.exe to x2goclient-mainprocess.exe and x2gohelper.exe to x2goclient.exe. - Start x2gohelper from X2Go Client. Revert name changing of X2Go Client and x2gohelper. - Add Makefile for x2gohelper. - Add support for sessions folders. - Add folder explorer: a GUI to manage of session subfolders. - Support for sessions subfolders in sessionmanagedialog. - Session name autocompletion only for sessions in current folder. - Support for session subfolders and command-line options "--session" and "--sessionid". - Disable session explorer "back" button if user sessions are disabled. - Include in sessionexplorer.cpp. - Remove deprecated workaround in wapi.cpp. - Save folder icons Base64 coded. Save icons under General\icon_. (Fixes: #580). - Fix placing sessions folders in broker mode. - Fix onmainwindow.cpp after 76ae96781f1d2d5754ee4751539d5de47f1d0297. - Add support for session selection in broker mode. [ Mike DePaulo ] * New upstream release (4.0.3.0): - Make X2Go Client aware of the Cinnamon (CINNAMON) desktop environment. (Fixes: #571) - Make X2Go Client aware of the Trinity (TRINITY) desktop environment. (Fixes: #609) - Make X2Go Client aware of the Openbox (OPENBOX) window manager. (Fixes: #607) - Make X2Go Client aware of the IceWM (ICEWM) window manager. (Fixes: #608) - Windows: Fix not being able to add the server to the known_hosts file when the username has non-English characters. (Fixes: #566) (NOTE: This fix only works when the non-English characters are in the same language as the Windows "system locale" AKA "Language for non-Unicode programs." Bug #611 was written for fixing the issue for languages other than the system locale.) Thanks George Trakatelis (uom.edu.gr) for submitting part of this fix. - Windows: Install VcXsrv "misc" fonts by default, and make all 4 font groups optional: misc, 75dpi, 100dpi and others (Fixes: #108) Note: The fact that all the fonts are included makes the installer about 30MB larger. - Windows: Bundle new version of VcXsrv: 1.15.2.1-xp+vc2013+x2go1 This new version is based on upstream VcXsrv 1.15.2.0, but still compatible with Windows XP. It also has its bundled OpenSSL updated to 1.0.1j. It is compiled with Microsoft Visual C++ 2013 and contains 1 X2Go-specific change, winmultiwindow.patch. This patch fixes an issue when resizing the NX-proxy window on specific multiple monitor setups. (Thanks Oleksandr Shneyder for the patch) (Fixes: #568) (Fixes: #594) - Windows: Port from MinGW 4.4 + Qt 4.8.5 to MinGW 4.8.2 + Qt 4.8.6, including fix for QTBUG-38706 (Fixes: #474, #603) - Windows: Fix missing VcXsrv/zlib1.dll . The impact of this bug was that VcXsrv would not start if the cwd was changed from the x2goclient directory. (The start menu and desktop shortcuts do have the x2goclient directory as the cwd. So they were not affected.) (Fixes: #587) - Windows: Make the desktop shortcut optional during install, but still the default. - Windows: Upgrade libssh from 0.5.5 to 0.6.3. This fixes connecting to hpn-enabled SSH servers. The Pageant support patch from the KDE Windows project was ported to 0.6.3 by myself and Mike Frederick. (Gmail: psududemike) (Fixes: #590) - Windows: Win32 OpenSSL updated from 1.0.1h to 1.0.1j, which fixes the CVEs announced on 2014-08-06 & 2014-10-15. - Windows: Replace Cygwin Bash (sh.exe) with Cygwin Dash (ash.exe renamed to sh.exe). This also means fewer Cygwin .DLLs are bundled. (Fixes: #636) - Windows: cygwin packages (excluding OpenSSH, which is at the patched version of 6.6.1p1-3-x2go1) updated from latest versions as of 2014-06-09 to latest versions as of 2014-10-18. This includes openssl 1.0.1j-1, which fixes the CVEs announced on 2014-08-06 & 2014-10.15. (Cygwin openssl was also individually updated in 4.0.2.1+hotfix1+build2, but only to 1.0.1i-1.) - Windows: Build nxproxy.exe with Cygwin's libpng 1.5.x rather than 1.2.x. (This may improve performance when PNG compression is selected.) - Windows: Build cygwin openssh without krb5 or tcp_wrappers support because X2Go Client for Windows does not use either feature. (On Windows, Kerberos 5 (GSSAPI) support is provided by PuTTY.) - Windows: Fix text not being rendered properly at end of NSIS installer (Fixes: #597) [ Stefan Baur ] * New upstream version (4.0.3.0): - Update German translation file. [ Ricardo Díaz Martín ] * New upstream version (4.0.3.0): - Update Spanish translation file. [ Martti Pitkanen ] * New upstream version (4.0.3.0): - Update Finnish translation file. [ Jos Wolfram ] * New upstream version (4.0.3.0): - Update Dutch translation file. [ Robert Parts ] * New upstream version (4.0.3.0): - Add Estonian translation file. [ Klaus Ade Johnstad ] * New upstream version (4.0.3.0): - Update Bokmal (Norway) translation file. [ Daniel Lindgren ] * New upstream version (4.0.3.0): - Update Swedish translation file. * Translation status: OK - Updating 'x2goclient/x2goclient_de.qm'... Generated 566 translation(s) (566 finished and 0 unfinished) INCOMPLETE - Updating 'x2goclient/x2goclient_da.qm'... Generated 536 translation(s) (526 finished and 10 unfinished) Ignored 30 untranslated source text(s) OK - Updating 'x2goclient/x2goclient_es.qm'... Generated 566 translation(s) (566 finished and 0 unfinished) OK - Updating 'x2goclient/x2goclient_et.qm'... Generated 566 translation(s) (566 finished and 0 unfinished) OK - Updating 'x2goclient/x2goclient_fi.qm'... Generated 566 translation(s) (566 finished and 0 unfinished) INCOMPLETE - Updating 'x2goclient/x2goclient_fr.qm'... Generated 254 translation(s) (201 finished and 53 unfinished) Ignored 312 untranslated source text(s) OK - Updating 'x2goclient/x2goclient_nb_no.qm'... Generated 566 translation(s) (566 finished and 0 unfinished) OK - Updating 'x2goclient/x2goclient_nl.qm'... Generated 566 translation(s) (566 finished and 0 unfinished) UNTRANSLATED - Updating 'x2goclient/x2goclient_pt.qm'... Generated 0 translation(s) (0 finished and 0 unfinished) Ignored 566 untranslated source text(s) INCOMPLETE - Updating 'x2goclient/x2goclient_ru.qm'... Generated 552 translation(s) (543 finished and 9 unfinished) Ignored 14 untranslated source text(s) OK - Updating 'x2goclient/x2goclient_sv.qm'... Generated 566 translation(s) (566 finished and 0 unfinished) INCOMPLETE - Updating 'x2goclient/x2goclient_zh_tw.qm'... Generated 397 translation(s) (372 finished and 25 unfinished) Ignored 169 untranslated source text(s) -- Mike Gabriel Tue, 21 Oct 2014 12:38:56 +0200 x2goclient (4.0.2.1-0x2go1) unstable; urgency=low [ Mike Gabriel ] * New upstream release (4.0.2.1): - Fix FTBFS on arm64 (and others) architecture. (Fixes: #498). - Only show session name in notification bubbles with debugging enabled. (Fixes: #364). - New command line option (--keep-trayicon). With that options set, we force X2Go client to only use the default "accelerated X" as system tray icon (and prohibit usage of the session's icon as tray icon). (Fixes: #365). - Provide more meaningful messages on SSH errors (host pub key not found, export pub key not found, authorized_keys file not found). For SSHd startup failures provide different messages on Windows and non-Windows machines. (Fixes: #235). FIXME: add detection code to report SSH daemon startup failures. - Add new cmdline option --hide-foldersharing. If used, all GUI elements related to exporting client-side folders to X2Go sessions get hidden. (Fixes: #514). - Update COPYING file (to update FSF address). * debian/control: + Add dbg:package x2goplugin-dbg. [ Clemens Lang ] * New upstream version (4.0.2.1): - Re-add Info.plist file (which got removed by accident in commit 91cf6c6). (Fixes: #502). [ Oleksandr Shneyder ] * New upstream release (4.0.2.1): - Hide GSSAPI options on direct RDP connections. (Fixes: #478). - Search X-Server in /Applications/Utilities/XQuartz.app on Mac. - Wrong cmd line option throw error dialog if running not from terminal. - Add command line option "close-disconnect", which make client close after session is disconnected. - Don't start pulse on Windows, until we really have to start a session that requires pulse support. - Check if sound is activated before starting pulse. - Fix starting sshd on Win XP. (Fixes: #421). - Fix "fullscreen" mode on Windows 7 with multiple monitors. [ Mike DePaulo ] * New upstream release (4.0.2.1): - Windows: Reduce the size of NSIS installer by several MB by switching to lzma solid compression - Windows: Prevent high PulseAudio CPU usage on Windows XP by lowering PulseAudio's CPU priority from "high" to "normal" on XP specifically. Also do so on Windows Server 2003 (R2) (Fixes #526) - Windows: Enable PulseAudio log when --debug is passed. - Windows: Fix compatibility with current PulseAudio master branch - Windows: cygwin packages (inluding patched OpenSSH 6.6.1p1-3) updated from latest versions as of 2014-04-08 to latest versions as of 2014-06-09. This includes openssl 1.0.1h-1, which fixes the 6 CVEs announced on 2014-06-05. (Cygwin openssl was also individually updated to 1.0.1h-1 in 4.0.2.0+build4.) This also includes migrating from libjpeg to libjpeg-turbo, which reduces CPU usage of nxproxy.) - Windows: Download and compile nx-libs-lite from the release tarball, rather than from git, so that the patches are actually applied - Windows: nx-libs-lite updated from 3.5.0.22 to 3.5.0.27 (linked against aforementioned cygwin package versions) - Windows: Win32 OpenSSL updated from 1.0.1g to 1.0.1h, which fixes the 6 CVEs announced on 2014-06-05. (Win32 OpenSSL was also updated to 1.0.1h in 4.0.2.0+build3.) - Windows: VcXsrv (XP Compatible) updated from 1.14.3.1 to 1.14.3.2. Fixes CVE-2014-0209, CVE-2014-0210, and CVE-2014-0211 (VcXsrv was also updated to 1.14.3.2 in 4.0.2.0+build2.) - Windows: Switch from regular NSIS 2.46 to Unicode NSIS 2.46.5 (Fixes: #528) -- Mike Gabriel Fri, 11 Jul 2014 12:23:59 +0200 x2goclient (4.0.2.0-0x2go1) unstable; urgency=low [ Oleksandr Shneyder ] * New upstream version (4.0.2.0): - Revrite SSH Classes to support libssh fix. - Add Class HelpDialog to show options in scroll area. - Fix authentication on SSH Broker with key + passphrase. - Set modmap timer timeout to 10 sec on Mac. - Fix running xmodmap if X2Go Client not started from terminal. - Setting keyboard modifiers with xmodmap. - Fix multimonitor support on Linux. - Display more version info. Parameters --version, --git, --changelog. - Don't show GUI dialog for --version, --help, etc, if started from terminal on linux and mac. - If no user in session config, display system username in pass form. - Check if txt/changelog and txt/git exist on config phase. Rename option "--git" to "--git-info". - Change x2goclient.nsi for nightly builds. [ Josh Lukens ] * New upstream version (4.0.2.0): - Switch to QNetworkAccessManager. Appropriately set content type header to "application/x-www-form-urlencoded" for HTTP post requests. (Fixes: #440, #138). - Fix copy+paste errors in QNetworkAccessManager code. - Provide support for dynamic authentication IDs. This is a requirement for using the broker client against brokers that use some sort of OTP authentication mechanism. (Fixes: #446). [ Mike Gabriel ] * New upstream version (4.0.2.0): - Drop create_text.sh again, implement changelog copying in distro build files. Implement Git history creation for nightly builds in build scripts. - Rename txt/git to txt/git-info (make it compliant with cmdline options). - Allow starting shadow sessions from the command line with option --hidden being enabled. (Fixes: #349). * debian/control: + Build-depend on libssh-dev (>= 0.5.4-2). + Bump Standards: to 3.9.5. No changes needed. * debian/rules: + Copy debian/changelog into txt/ subfolder during dh_auto_configure. + Create txt/git-info files for ChangeLog.git if it exists. * x2goclient.spec: + Copy ChangeLog (or debian/changelog) into txt/ subfolder during %setup. + Copy ChangeLog.gitlog (if present) into txt/ subfolder during %setup. + B-R (epel-7): man2html-core (same as for Fedora builds). [ Mike DePaulo ] * New upstream version (4.0.2.0): - Decrease HelpDialog's tab width from 320 to 30 (the width of 10 spaces.) (Fixes: #453) - Windows: Fix compatibility with PulseAudio 3.0 & later through new cookie handling. (Fixes: #422) - Windows: Upgrade included PulseAudio from 1.1 to 5.0. The 5.0 build is patched for X2Go bug #363. and available here: https://build.opensuse.org/project/show/home:mikedep333:branches:home:\ mkbosmans:mingw32:pulseaudio - Windows: Reapply KDE on Windows's patch for Pageant support to libssh 0.5.5. (Fixes: #448) -- Mike Gabriel Thu, 10 Apr 2014 13:47:56 +0200 x2goclient (4.0.1.6-0x2go1) unstable; urgency=low * x2goclient.spec: + B-R (epel-7): man2html-core (same as for Fedora builds). (Cherry-picked from already released version 4.0.2.0). -- Mike Gabriel Fri, 11 Jul 2014 12:25:47 +0200 x2goclient (4.0.1.5-0x2go1) unstable; urgency=low * Build fix release (4.0.1.5): - Add x2goclient_nl.ts to x2goclient.pro, so that the .qm file gets generated during build. (Fixes: #473). -- Mike Gabriel Thu, 10 Apr 2014 17:47:27 +0200 x2goclient (4.0.1.4-0x2go1) unstable; urgency=low [ Oleksandr Shneyder ] * New upstream version (4.0.1.4): - Increase ssh_select timeout to 0.5 sec. - Set mod map from client to server on Mac, hide keyboard settings on Mac. - Fix mod map on Mac with kerberos. - Fix focus on pass form. [ Orion Poplawski ] * New upstream version (4.0.1.4): - Fix password connection with libssh 0.6.0. (Fixes: 420). - Don't use ancient Debianism's for ssh options (ProtocolKeepAlives). (Fixes: #434). [ Martti Pitkanen ] * New upstream version (4.0.1.4): - Update Finnish translation file. [ Robert Parts ] * New upstream version (4.0.1.4): - Add new translation of X2Go Client to Estonian. [ Nicolai Hansen ] * New upstream version (4.0.1.4): - Update Danish translation file. [ Jos ] * New upstream version (4.0.1.4): - Add new translation of X2Go Client to Dutch. -- Mike Gabriel Thu, 10 Apr 2014 13:46:33 +0200 x2goclient (4.0.1.3-0x2go1) unstable; urgency=low [ Oleksandr Shneyder ] * New upstream version (4.0.1.3): - changed keyboard settings. Supported modes: auto, none and config with model/layout(variant) - Enables forwarding (delegation) of GSSAPI credentials to the server. - Make GSSAPI delegation configurable. - Update Russian translation file. - Rewrite SSH Classes to support libssh fix. - Set mod map from client to server on Mac, hide keyboard settings on Mac. - Fix mod map on Mac with kerberos. - Fix focus on pass form. [ Orion Poplawski ] * New upstream version (4.0.1.3): - Protect x2goplugin.html. Make it only available from the local host. [ Mike Gabriel ] * New upstream version (4.0.1.3): - Fix scan for pulseaudio cookie file. Issue got introduced in X2Go Client 4.0.1.2 and let pulseaudio sound setup fail completely in the Linux X2Go Client of that version. (Fixes: #384). - Minor update of the German translation file. [ Klaus Ade Johnstad ] * New upstream version (4.0.1.3): - Update Bokmal translation file. [ Ricardo Díaz Martín ] * New upstream version (4.0.1.3): - Update Spanish translation file. [ Daniel Lindgren ] * New upstream version (4.0.1.3): - Update Swedish translation file. [ Stefan Baur ] * New upstream version (4.0.1.3): - Update German translation file. [ Martti Pitkanen ] * New upstream version (4.0.1.3): - New translation of X2Go Client to Finnish. -- Mike Gabriel Wed, 22 Jan 2014 08:56:30 +0100 x2goclient (4.0.1.2-0x2go2) unstable; urgency=low [ Mike Gabriel ] * New upstream version (4.0.1.2): - Provide Keywords: key in .desktop file. - Add NSIS packaging files for win32 builds to source tree. (Files provided by Oleksandr Shneyder, thanks!!!). - Rename win32 desktop and startmenu icon from "X2goClient" to "X2Go Client". - Store broker HTTPS certificate exceptions in $HOME/.x2go/ssl/exceptions (before: $HOME/ssl/exceptions). (Fixes: #328). - Perform sanity checks on data that comes in from X2Go Servers. Prohibit the execution of arbitrary code via the ~/.bashrc file. (Fixes: #333). - Add option --broker-cacertfile. Allow usage of non-system-wide installed (self-signed) SSL certificate chains for https (SSL) session broker connections. (Fixes: #311). - Update man page for new --tray-icon cmdline option. - Update man page for --broker-url. Explain the syntax of . - Properly handle (=expand) the "~" character in key filenames. (Brought to attention by Eldamir on IRC. Thanks!). - Expand tilde operator for all other file paths handed over to X2Go Client via sessions file or cmdline parameter. - Syntax fix of x2goclient.desktop file. - Test for various file locations of the pulseaudio cookie file. - Allow patching of qmake-qt4 executable path in Makefile. - Make qmake-qt4 and lrelease path in Makefile easily replacable (as RHEL-5 does not have those tools in $PATH). - Make sure that build_client and build_plugin are not build with parallel make. - Make x2goplugin-provider installable via Makefile. * Pull-in packaging changes from Debian. * debian/source/format: + Switch to format 1.0. * x2goclient.spec: + Ship x2goclient.spec (RPM package definitions) in upstream project. (Thanks to the Fedora package maintainers). + Clear (Fedora package) changelog. + Make package build on Fedora/EPEL versions that do not have the qtbrowserplugin package. + For EPEL-5 builds: replace full path to qmake-qt4 and lrelease. + Split up package into bin:packages: x2goclient, x2goplugin, x2goplugin-provider. + Make sure lrelease-qt4 is executed (not just lrelease). [ Ricardo Díaz Martín ] * New upstream versino (4.0.1.2): - Strip whitespaces off of user name, host name and other strings when loading / saving session profiles.(Fixes: #315). - New option --tray-icon. Force showing the tray icon, even for hidden sessions. Also allow creation of .desktop files with --tray-icon optionally being enabled. (Fixes: #316). - Update Spanish translation. [ Oleksandr Shneyder ] * New upstream version (4.0.1.2): - Support for keys "shadowuser" "shadowdisplay" and "shadowmode" in config file. This allows choosing the default display for shadow sessions. - Support for GSSApi(Kerberos 5) authentication. Using ssh/scp commands on Linux and Mac and plink/pscp on Windows. - Support for ChallengeResponseAuthentication (Google Authenticator) - Setting main window focus on mac (Fixes: #139). - Additional check if authentication with GSSApi successfull - c121b7e2d3d83abdc2d7a29637bc3294e38b2ec3 broke checking if remote command produce only stderr and not stdout. It made x2goclient crash if x2gostartagent send LIMIT error. Current commit fixes this issue. - SshMasterConnection should use current user name if no user name is specified in session settings - GSSApi(Kerberos 5) authentication for sshproxy and sshbroker - fixed GSSApi(Kerberos 5) authentication for sshproxy and sshbroker on windows [ Heinrich Schuchardt ] * New upstream version (4.0.1.2): - Handle SSH host key changes more elegantly and allow user interaction if such a host key change occurs. (Fixes: #241). [ Michael DePaulo ] * New upstream version (4.0.1.2): - win32: Add uninstall information to Add/Remove Programs. (Fixes: #230). -- Mike Gabriel Tue, 17 Dec 2013 15:21:38 +0100 x2goclient (4.0.1.1-0~x2go1) unstable; urgency=low [ Nicolai Hansen ] * New upstream version (4.0.1.1): - Update Danish translation file. [ Terje Andersen ] * New upstream version (4.0.1.1): - Update Norwegian Bokmaal translation file. [ Oleksandr Shneyder ] * New upstream version (4.0.1.1): - Use "127.0.0.1" instead of localhost to avoid wrong IPv6 hostname resolution. (Fixes: #151). - Wait for x2gocmdexitmessage to return before closing in hidden mode. - Support for published applications in X2Go Plugin - Support for "shadow" mode in X2Go Plugin [ Mike Gabriel ] * New upstream version (4.0.1.1): - If a priv SSH key has been specified, skip the autologin procedure. Let's consider a given SSH private key that fails to log the user in as an overall login failure. (Fixes: #141). - Avoid multiple selectUserSession requests when in broker mode. - Properly set the remote server address received via selectUserSession method when in broker mode. (Fixes: #226). - Fix segmentation fault that started occurring since the custom trayIcon patch was applied. Segfault only occurred if the tray icon was not used. - Show session name in notification bubbles. - Update German translation. - Add cmdline option --broker-autologoff: Enforce re-authentication against X2Go Session Broker after a session has been suspended or terminated. (Fixes: #179). - Enable full access desktop sharing across user accounts. (Fixes: #222). - Make X2Go Client aware of the MATE desktop environment. - Make X2Go Client work in SSH broker mode without the need of a auth-id file. [ Heinrich Schuchardt ] * New upstream version (4.0.1.1): - Call ssh_clean_pubkey_hash() for deallocating public key hashes instead of just calling free(). Required under MS Windows as documented in libssh2 API. (Fixes: #243). (For further details see: http://api.libssh.org/master/group__libssh__session.html). * Provide bin:package with debug symbols for X2Go Client. (Fixes: #255). [ Ezra Bühler ] * New upstream version (4.0.1.1): - Fix auto-resume when session type is »Single Application«. (Fixes: #183). [ Ricardo Díaz Martín ] * New upstream version (4.0.1.1): - Fix detection of maximum screen area available for a session. (Fixes: #165). - Use the session icon as tray icon, pop up notification bubble that informs about current session actions. (Fixes: #177). - Allow for setting maximum available desktop size as window size via the session profile card. Unfortunately, this feature is for now only available on Linux. (Fixes: #214). [ Otto Kjell ] * New upstream version (4.0.1.1): - Enable debug mode through cmd line parameter. (Fixes: #142). - Standardize output to stdout+stderr and make it parseable. [ Orion Poplawski ] * New upstream version (4.0.1.1): - Instead of using a hard-code DPI of 96, use local DPI settings for new sessions if not explicitly set in session profile (Fixes: #164). [ Daniel Lindgren ] * New upstream version (4.0.1.1): - Update Swedish translation file. [ Ricardo Díaz Martín ] * New upstream version (4.0.1.1): - Update Spanish translation file. -- Mike Gabriel Wed, 11 Sep 2013 12:06:02 +0200 x2goclient (4.0.1.0-0~x2go1) unstable; urgency=low [ Frédéric Motte ] * New upstream version (4.0.1.0): - Add French translation file. [ Oleksandr Shneyder ] * New upstream version (4.0.1.0): - Launching parec to init pulseaudio input only on Windows. - Hide profilecard area on broker authentication. - Fix ONMainWindow layout in broker mode. - Set passphrase for key to reverse SSH connection. Fix closing client after getting passphrase (Fixes: #137) - Support for recent cygwin API on Windows. - Add checkbox for -noclipboardprimary argument for internal vcxsrv. [ Mike Gabriel ] * New upstream version (4.0.1.0): - Fix position shifts of broker login widget on repetetive authentication failures. (Fixes: #71). -- Mike Gabriel Fri, 22 Mar 2013 23:15:45 +0100 x2goclient (4.0.0.4-0~x2go1) unstable; urgency=low [ Clemens Lang ] * New upstream version (4.0.0.4): - Add scripts and additional files for building X2Go Client disk images for Mac OS X. (Fixes: #131). [ Mike Gabriel ] * New upstream version (4.0.0.4): - Update man page: Add broker relevant cmdline options. -- Mike Gabriel Mon, 04 Mar 2013 05:46:16 +0100 x2goclient (4.0.0.3-0~x2go1) unstable; urgency=low * Fix version in version.h, VERSION and x2goplugin.rc. -- Mike Gabriel Wed, 13 Feb 2013 14:37:24 +0100 x2goclient (4.0.0.2-0~x2go1) unstable; urgency=low [ Mike Gabriel ] * New upstream version (4.0.0.2): - More icon updates needed. Discovered during Debian package update. [ Orion Poplawski ] * New upstream version (4.0.0.2): - Fix .desktop file, fix FSF address. (Fixes: #88). [ Oleksandr Shneyder ] * New upstream version (4.0.0.2): - Fix support for RSA Keys in X2Go Broker code. - Set autologin as false by default. Quote session ID in SSH broker code - Support for session key "usebrokerpassforproxy" - use broker pass for authentication on proxy. - Fix X2Go Logo. - Terminate nxproxy from X2Go Client if connection to server is lost. (Fixes: #100) - Fix building x2goplugin. -- Mike Gabriel Tue, 12 Feb 2013 19:29:53 +0100 x2goclient (4.0.0.1-0~x2go1) unstable; urgency=low * Bugfix release (4.0.0.1): - Replace symlink at svg/x2gologo.svg with copied file. Fixes tarball release esp. for MS Windows builds. -- Mike Gabriel Wed, 02 Jan 2013 12:19:01 +0100 x2goclient (4.0.0.0-0~x2go1) unstable; urgency=low [ Christoffer Krakou ] * New upstream version (4.0.0.0): - Update Danish translation. - Update Danish translation (SSH proxy feature). [ Daniel Lindgren ] * New upstream version (4.0.0.0): - Update Swedish translation. [ Ezra Bühler ] * New upstream version (4.0.0.0): - Make it possible to resume a session using the keyboard only. Also fix the tab order in the resume session dialog by changing the focus policy of the main window. (Fixes: #80). [ Heinz-M. Graesing ] * New upstream version (4.0.0.0): - Update refurbished X2Go Logo set. License for the X2Go Logos is GPL-2.0+. The inner X2Go logo background is now white (non-transparent) which should fix poor display results for X2Go icons in application menus using a dark theme. (Fixes: #59). [ Jan Engelhardt ] * New upstream version (4.0.0.0): - Fix Debian-like Qt path (qmake will handle it internally). [ Oleksandr Shneyder ] * New upstream version (4.0.0.0): - Translation files updated. - Russian translation updated. - Add support for pgp cards in broker mode. - Fix displaying ssh proxy box in session settings if sessions type changed. (Fixes: #61). - Init config.brokerAutologin with false. (Fixes: #72). - Make sure x2goclient closes if broker has no sessions. Fixes appearing session profile dialog if client is configured to minimize to systray. (Fixes: #73). - Update license headers. - Add "author" entry in UI files. - Add OpenSSL license exception. [ Ricardo Diaz ] * New upstream version (4.0.0.0): - Update Spanish translation file. [ Mike Gabriel ] * New upstream version (4.0.0.0): - Update German translation file. - Get rid of br html tags in client<->broker communication (Fixes: #81). - Bump version to 4.0.0.0 (for Baikal bundle release). [ Terje Andersen ] * New upstream version (4.0.0.0): - Update Bokmal (Norway) translation file. -- Mike Gabriel Sun, 30 Dec 2012 15:34:02 +0100 x2goclient (3.99.3.0-0~x2go1) unstable; urgency=low [ Mike Gabriel ] * New upstream version (3.99.3.0): - Rebuild i18n files, add x2goclient_dk.ts for the new Danish translator (Christoffer Krakou). - Update German translation. - Run X2Go-proxied RDP session with fullscreen mode as sessions of X2Go session type "D". (Fixes: #22) - Allow pass-through of username and password for X2Go-proxied RDP sessions. The strings X2GO_USER and X2GO_PASSWORD in rdpoptions will be replaced by username+password enter into X2Go Clients login dialog. Only replace username+password if they received a value from the login widget of the main window. - Drop i18n idea to translate English to English. - Fix creation of session profile icon on desktop. The .desktop files need the x-bit set. Also: add a compatibility profile name rewrite for PyHoca-GUI profile names containing a slash, PyHoca-GUI uses a slash as separator character for submenu cascades. - Use ,,printf'' instead of ,,echo -e'' (Bashism). Fixes creation of xinerama.conf files. - Add XFCE as possible session type. (Fixes: #51) * /debian/control: + Maintainer change in package: X2Go Developers . + Add rdesktop and xfreerdp to Recommends. + Priority: optional. + Bin:package x2goplugin-provider: depend on x2goplugin. * New bin:package (all): x2goplugin-provider. Provide basic Apache2 configuration for a demo x2goplugin website. * Bump Standards version to 3.9.3. [ Daniel Lindgren ] * New upstream version (3.99.3.0): - Update Swedish translation. [ Terje Andersen ] * New upstream version (3.99.3.0): - Update Norwegian Bokmal translation. [ Christoffer Krakou ] * New upstream version (3.99.3.0): - Add Danish translation to x2goclient. - Proof read Danish translation. - Update DirectRDP in Danish translation. [ Oleksandr Shneyder ] * New upstream version (3.99.3.0): - Add settings for direct RDP connection. - Implement direct RDP connection using standalone client. - Build direct RDP feature only for linux. - Add DEFINES += __linux__ to project file when building linux binaries (need to define Q_OS_LINUX in moc generator). - Update "ts" files. - Fixed label "SSH port" and "RDP port" to "SSH port:" and "RDP port:". Update "ts" files once again. - Add translation for label "RDP port:". Update "ts" files updated Russian translation. - Add translation for checkbox "Direct RDP Connection" and update Russian and German translation. - Restart pulse server on windows if it crashed. - Show "Advanced Options" button only if RDP session chosen. - Fixing kbd focus issue for all kinds of sessions in thinclient mode. (Fixes: #20). - Add command line parameter --ssh-key and --autologin. - Disable check box "use default sound port" if sound disabled. - Add support for HTTP proxy - developed by Heinrich Schuchardt (xypron.glpk@gmx.de). (Fixes: #34). - Add support for SSH proxy in class SshMasterConnection. - SshMasterConnection emit signal to GUI thread if it need a passphrase to decrypt a ssh key. GUI thread use input dialog to read a passphrase from user. - Add support for SSH proxy (HTTP and SSH) to X2Go Client GUI. - Clean some broker code. - It is possible to add several ssh keys from commandline in form: --ssh-key=[user@][server:][port:] it can be useful for TCE or login over broker. - Improve broker code, add support for "usebrokerpass" config variable to use broker pass for ssh auth on X2Go server. - Commandline options --broker-noauth. - Support for SSH broker. --broker-user removed, use username in broker url instead. - Reduce listen interval for ssh-tunnel to 100 msec. - Fix visibility of SSH-proxy box with direct RDP sessions. - SshProcess is only usable over SshMasterConnection. - Fixing SSH proxy support for Windows. - Hide system tray icon before close. - Fix error "Failed to resolve hostname" in plugin mode (Fixes: #55). - Do not show "RDP Settings" group box in plugin mode (Fixes: #56). [ Ricardo Diaz ] * New upstream version (3.99.3.0): - Add Spanish translation file. - Update Spanish translation file. -- Mike Gabriel Wed, 07 Nov 2012 16:07:43 +0100 x2goclient (3.99.2.2-0~x2go2) unstable; urgency=low * Add Conflicts/Replaces for x2goclient-gtk. -- Mike Gabriel Mon, 20 Aug 2012 09:58:47 +0200 x2goclient (3.99.2.2-0~x2go1) unstable; urgency=low [ Mike Gabriel ] * New upstream version (3.99.2.2): - Drop Encoding key from .desktop file (as it is deprecated according to latest FreeDesktop.org specs). - Correct spelling for mis-spelled work ,,authentication''. - Allow QMAKE_* parameters that are needed for hardening x2goclient (see http://wiki.debian.org/Hardening). - Provide CPPFLAGS for QMAKE_CFLAGS _and_ QMAKE_CXXFLAGS. Provide them as first build parameters. - Allow x2goclient to connect to user accounts that have other shells than /bin/sh and alike configured as default shell. Also: removal bashisms in shell execution commands. - X2Go resume session slot: double click on a selected session is supposed to resume that session. To make this feature functional for running sessions the session has to be suspended first. [ Oleksandr Shneyder ] * New upstream version (3.99.2.2): - Fixing X2Go Plugin - Cleaning code: double click on running session. Instead of using function "sleep" starting resume-session after suspend-session is returned. -- Mike Gabriel Fri, 10 Aug 2012 10:08:52 +0200 x2goclient (3.99.2.1-0~x2go1) unstable; urgency=low [ Oleksandr Shneyder ] * New upstream version (3.99.2.1): - Not starting smart card daemon before users are loaded in LDAP mode. - Merging onmainwindow_part*.cpp into onmainwindow.cpp - Support recent pulseuadio on windows - removing %USERPROFILE%\.x2go\pulse\.pulse\%COMPUTERNAME%-runtime\pid if exists under windows - --user= set username in session mode if this field is blank in session settings. - --autostart= launch "app" by session start in "published applications" mode [ Daniel Lindgren ] * New upstream version (3.99.2.1): - Swedish i18n update for published applications. [ Terje Andersen ] * New upstream version (3.99.2.1): - Norwegian (Bokmal) i18n update for published applications. [ Stefan Baur ] * New upstream version (3.99.2.1): - German i18n update for published applications. [ Mike Gabriel ] * New upstream version (3.99.2.1): - Add Ubuntu-2d (Unity) support to X2Go Client. -- Mike Gabriel Fri, 08 Jun 2012 12:52:07 +0200 x2goclient (3.99.2.0-0~x2go1) unstable; urgency=low [ Oleksandr Shneyder ] * New upstream version (3.99.2.0): - Support for "published applications". Sponsored by Stefan Baur (http://www.baur-itcs.de). - Command line argument "--session-conf=": path to alternative session config. - Fixed bug "light font colour on light background" by dark colour schema. - Make X2Go system tray icon not transparent. - Replace text on buttons "Application", "Share folder", "Suspend", "Terminate" with icons to fit in dialog window. - Support for SVG icons for published applications - Set "nofocus" policy for tool buttons. - Some improvements when using pgp card. - Setting TCP_NODELAY for sockets on reverse tunnel and ssh session. - Support for category X2Go-Top to display published applications on top of application menu. - Exporting PULSE_CLIENTCONFIG when running published applications. -- Mike Gabriel Wed, 04 Apr 2012 11:52:07 +0200 x2goclient (3.99.1.1-0~x2go1) unstable; urgency=low [ Oleksandr Shneyder ] * New upstream version (3.99.1.1): - not including on Q_OS_WIN platform. - not updating Xinerama configuration in "fullscreen" mode. - command line argument "--xinerama": use Xinerama by default. - improved support for use in TCE command line argument --thinclient - running without window manager command line argument --haltbt - button to shutdown the thin client - Fix comments in copyright headers. [ Mike Gabriel ] * New upstream version (3.99.1.1): - Update copyright year in about window. Including all translations. - Power button icon: make inner part transparent. Needed for people with a dark GUI theme. - Prettify x2goclient.pro. [ Mihai Moldovan ] * New upstream version (3.99.1.1): - Use the Mac OS X 10.5 SDK instead 10.6 to remain compatible with Leopard. - Add .gitignore file. - The default of a 10 seconds SSH connection timeout is pretty low, especially when using tcp_wrappers with the identd option turned on. Wait for a 60 seconds timeout. - On Mac OS X connect to Xserver via Unix file socket. - Properly set DISPLAY environment variable on Mac OS X. [ Daniel Lindgren ] * New upstream version (3.99.1.1): - Update/improve Swedish translation after testing x2goclient on Windows. -- Mike Gabriel Wed, 07 Mar 2012 20:42:36 +0100 x2goclient (3.99.1.0-0~x2go1) unstable; urgency=low [ Mike Gabriel ] * New upstream version (3.99.1.0): - Update German translation file (thanks to Stefan Baur). - Build .qm translation files on the fly during build. - Fix for zh_TW translation: add qt_zh_TW.qm file from Qt4.8. - Add language property to the French translation file. - Update qt_.qm files from Qt4.8 (as in current Debian sid). - Rename x2goclient_nb.ts to x2goclient_nb_no.ts. - Update all translation files (lupdate), translate unfinished translation tags in x2goclient_de.ts. - Provide empty translation file x2goclient_en.ts. - Fix misspelled word ,,Authentification'' -> ,,Authentication''. - Fix misspelled word ,,recieved'' -> ,,received''. - Update date and release version in man page. [ Mihai Moldovan ] * New upstream version (3.99.1.0): - Mac OS patch: Raise the stack space to 2MB for secondary threads. It previously used the 512KB system default. [ Daniel Lindgren ] * New upstream version (3.99.1.0): - Add Swedish translation file. - Fine-tune Swedish translation file. [ Terje Andersen ] * New upstream version (3.99.1.0): - Add Norwegian (Bokmal) translation. Qt4 lacks Norwegian/Bokmal support, so some of the widgets may stay in English. - Fine-tune/fix Norwegian (Bokmal) translation. [ Jan Engelhardt ] * New upstream version (3.99.1.0): - Use /cgi-bin/man/ path in web'ified man pages. - Use ,,${MAKE}'' instead of ,,make'' in Makefile. - Include in sshprocess.h to fix missing struct sockaddr_in. [ Oleksandr Shneyder ] * New upstream version (3.99.1.0): - Get new ports from x2goresume-session if reserved ports are busy - Fix segmentation fault by failed SSH connection to X2Go server -- Mike Gabriel Wed, 22 Feb 2012 14:49:49 +0100 x2goclient (3.99.0.6-0~x2go1) unstable; urgency=low [ Oleksandr Shneyder ] * New upstream version (3.99.0.6): - Update copyright section in ssmasterconnection.h/cpp and sshprocess.h/cpp. - Traditional Chinese(zh_TW) translation for x2goclient from Liu Arlo . -- Mike Gabriel Wed, 01 Feb 2012 13:52:40 +0100 x2goclient (3.99.0.5-0~x2go1) unstable; urgency=low [ Mike Gabriel ] * New upstream version (3.99.0.5): - Rename in human readable text strings ,,X2go'' to ,,X2Go''. - Fix version string on man page. [ Oleksandr Shneyder ] * New upstream version (3.99.0.5): - Waiting for SshMasterConnection thread to be finished before deleting it (segfault by wrong authentication fix). -- Mike Gabriel Fri, 27 Jan 2012 12:43:04 +0100 x2goclient (3.99.0.4-0~x2go1) unstable; urgency=low [ Oleksandr Shneyder ] * New upstream version (3.99.0.4): - Enabled support for Xinerama -- Mike Gabriel Wed, 18 Jan 2012 14:53:20 +0100 x2goclient (3.99.0.3-0~x2go4) unstable; urgency=low [ Mike Gabriel ] * Rename icon title in /debian/menu file. * Also split package dependencies for x2goplugin. * Add libxpm-dev as build-dependency. * Revert version number in version.h and x2goplugin.rc to 3.99.0.3. [ Guido Günther ] * Split package dependencies for SSH server/client. [ Oleksandr Shneyder ] * New upstream version (3.99.0.3): - LDAP: ssh port for every x2goserver can be specified in Server entry, parameter "l" - Change title of proxy window to session name - Change icon of proxy window (only on Linux) - Multi-display support: x2goclient can be configured to fit proxy window on one of the existing displays. - Multi-display support: support for xinerama (temporarily disabled--support in x2goagent needed) - Add -lXpm in project file. -- Mike Gabriel Wed, 18 Jan 2012 14:50:31 +0100 x2goclient (3.99.0.2-0~x2go1) unstable; urgency=low [ Oleksandr Shneyder ] * New upstream version (3.99.0.2): - QTcpSocket working not correct with some Antiviral software ( for example Avast) under windows. Fixing this by replacing it with Winsocks - Connectivity test dialog to use with a broker -- Mike Gabriel Fri, 25 Nov 2011 11:27:42 +0100 x2goclient (3.99.0.1-0~x2go1) unstable; urgency=low * New upstream version (3.99.0.1): - Set TCP_NODELAY (equals: turn Nagle off) for SSH graphical port forwarding tunnel. - Include cups/ppd.h in cupsprint.h, fixes build on Debian wheezy/sid. - Add build_man/clean_man stanzas to Makefile. * Explicitly use source format 3.0 (native). * Build-depend on libssh-dev (>=0.4.7). * Update menu file in /debian folder (rename title to ,,X2Go Client (Qt)''). * Do not run man2html from rules file anymore. -- Mike Gabriel Wed, 12 Oct 2011 11:11:50 +0200 x2goclient (3.99.0.0-0~x2go1) unstable; urgency=low [ Oleksandr Shneyder ] * fixed loadbalancing in LDAP mode on multiply X2Go servers * fixed session crash by pulling out of smart card -- Mike Gabriel Wed, 20 Jul 2011 16:33:08 +0200 x2goclient (3.0.1.21-0~x2go1) unstable; urgency=low * changes in windows plugin -- Oleksandr Shneyder Thu, 30 Jun 2011 18:45:25 +0200 x2goclient (3.0.1.20-0~x2go1) unstable; urgency=low * support menu * custom background * custom icon on broker auth dialog * fixed creation of desktop icons on windows -- Oleksandr Shneyder Fri, 08 Apr 2011 19:18:30 +0200 x2goclient (3.0.1.19-0~x2go1) unstable; urgency=low * Support to get sessions from for web broker -- Oleksandr Shneyder Thu, 29 Mar 2011 18:34:08 +0200 x2goclient (3.0.1.18-0~x2go3) unstable; urgency=low * Add ssh (server) as runtime dependency * React to Debian bug #627990, prefer man2html-base over man2html. * Use x2goumount-session instead of old x2goumount_session command. -- Mike Gabriel Thu, 14 Jul 2011 09:07:59 +0200 x2goclient (3.0.1.18-0~x2go2) unstable; urgency=low * adds man page skel (TODO: options) * fixes all open lintian issues -- Mike Gabriel Tue, 17 May 2011 20:16:55 +0200 x2goclient (3.0.1.18-0~x2go1) unstable; urgency=low * change of version numbering pattern * adds x2goclient-cli project as example file to x2goclient package -- Mike Gabriel Tue, 22 Mar 2011 01:50:27 +0100 x2goclient (3.01-18) unstable; urgency=low * Support for custom X-Servers under windows -- Oleksandr Shneyder Thu, 17 Feb 2011 18:15:03 +0100 x2goclient (3.01-17) unstable; urgency=low * Minimize X2Go Client to system tray thank Joachim Langenbach for patch -- Oleksandr Shneyder Thu, 27 Jan 2011 12:32:29 +0100 x2goclient (3.01-16) unstable; urgency=low * qtbrowserplugin sources shipped with x2goclient * removed x2goclient.pri, export "X2GO_CLIENT_TARGET=plugin" to configure x2goplugin -- Oleksandr Shneyder Thu, 13 Jan 2011 19:24:50 +0100 x2goclient (3.01-15) unstable; urgency=low * add support for libssh-0.4.7 -- Oleksandr Shneyder Tue, 04 Jan 2011 18:48:43 +0100 x2goclient (3.01-14) unstable; urgency=low * use libssh instead of ssh -- Oleksandr Shneyder Fri, 03 Dec 2010 18:31:45 +0000 x2goclient (3.01-13) unstable; urgency=low * workaround for "Full Screen" mode in windows * x2goplugin based on qtbrowserplugin * support for clipboard in windows -- Oleksandr Shneyder Tue, 03 Aug 2010 17:12:05 +0200 x2goclient (3.01-12) unstable; urgency=low * portable mode -- Oleksandr Shneyder Thu, 29 Jul 2010 17:43:06 +0200 x2goclient (3.01-11) unstable; urgency=low * plugin config options sound, exportfs, adsl, compression, quality, dpi, kbdlayout, kbdtype -- Oleksandr Shneyder Tue, 29 Jun 2010 18:12:48 +0200 x2goclient (3.01-10) unstable; urgency=low * plugin config options showstatusbar and showtoolbar -- Oleksandr Shneyder Thu, 24 Jun 2010 18:48:27 +0200 x2goclient (3.01-9) unstable; urgency=low * fixed dir export in LDAP mode -- Oleksandr Shneyder Tue, 08 Jun 2010 17:14:11 +0200 x2goclient (3.01-8) unstable; urgency=low * embeded mode for firefox plugin * fixed "host key varification failed" message * updated interface * support for fs encodings -- Oleksandr Shneyder Tue, 13 Apr 2010 18:15:30 +0200 x2goclient (3.01-7) unstable; urgency=low * fixed connection to localhost * fixed undefined shadow mode by ldap sessions -- Oleksandr Shneyder Mon, 01 Feb 2010 19:19:54 +0100 x2goclient (3.01-6) unstable; urgency=low * fixed ldap support * shadow sessions * xdmcp sessions * commandline option for printing in LDAP mode -- Oleksandr Shneyder Fri, 28 Jan 2010 19:38:11 +0100 x2goclient (3.01-5) unstable; urgency=low * fixed gpg-card with older gpg version -- Oleksandr Shneyder Fri, 27 Nov 2009 00:00:31 +0100 x2goclient (3.01-4) unstable; urgency=low * set x2goagents dpi option * fixed rsa/dsa keys with password * session limit error message * warning by terminating session * fixed help message * save pulseaudio client.conf and cookie on server * in session directory not in ~/.pulse/client.conf * (do not owerwrite local pulse settings for remote user) * copy pulse cookie-file to remote system * try to load module-native-protocol-tcp * dependency for openssh-server in deb * set keyboard layout by default * add ssh option ServerAliveInterval=300 * check if port free when starting tunnel for nxproxy * windows: * Start own build of X Server * Start one X server per x2goclient * Start own build of PulseAudio * Start one PulseAudio server per x2goclient * Start one sshd per x2goclient * printing and viewing pdf in windows using ShellExec * make x2goclient work if username have spaces and unicode symbols -- Oleksandr Shneyder Wed, 14 Oct 2009 10:10:25 +0200 x2goclient (3.01-3) unstable; urgency=low * smart card works with gpg 2.0.11-1 -- Oleksandr Shneyder Thu, 24 Sep 2009 21:31:45 +0200 x2goclient (3.01-2) unstable; urgency=low * Use x2goclient as SSH_ASKPASS program -- Oleksandr Shneyder Fri, 31 Jul 2009 19:49:02 +0200 x2goclient (3.01-1) unstable; urgency=low * create desktop icon * start rdesktop session * start LXDE session * fixed error "ssh password with special symbols" thank Phillip Krause -- Oleksandr Shneyder Mon, 15 Jun 2009 19:35:38 +0200 x2goclient (3.00-1) unstable; urgency=low * Client side printing support -- Oleksandr Shneyder Tue, 24 Feb 2009 21:50:45 +0100 x2goclient (2.99-3) unstable; urgency=low * make sshfs mount work if user home is not in /home/ -- Oleksandr Shneyder Mon, 02 Feb 2009 22:05:49 +0100 x2goclient (2.99-2) unstable; urgency=low * fixed ssh key in path with -- Oleksandr Shneyder Mon, 26 Jan 2009 23:15:46 +0100 x2goclient (2.99-1) unstable; urgency=low * PulseAudio support * you can use running arts or esd daemons * use blowfish cipher for ssh tunnels * reverse ssh tunnel for fs export (sshfs) -- Oleksandr Shneyder Thu, 15 Jan 2009 19:03:58 +0100 x2goclient (2.0.1-24) unstable; urgency=low * command line options: * --session= start session "session" * --user= preselect user "username" (LDAP mode) * --hide do not show x2goclient (start hidden) -- Oleksandr Shneyder Tue, 09 Dec 2008 21:30:07 +0100 x2goclient (2.0.1-23) unstable; urgency=low * fixed: use listed in ldap x2goserver for "x2gogetservers" request instead ldapserver itself * fixed: do not display error by initldap in slot_rereadUsers * fixed: libldap dependencies in package -- Oleksandr Shneyder Mon, 08 Dec 2008 22:28:27 +0100 x2goclient (2.0.1-22) unstable; urgency=low * xorg dependency in control file -- Oleksandr Shneyder Tue, 25 Nov 2008 19:21:18 +0100 x2goclient (2.0.1-21) unstable; urgency=low * fixed pass error with gpg card -- Oleksandr Shneyder Thu, 20 Nov 2008 19:10:33 +0100 x2goclient (2.0.1-20) unstable; urgency=low * fixed resizing by session selecting -- Oleksandr Shneyder Wed, 19 Nov 2008 18:56:10 +0100 x2goclient (2.0.1-19) unstable; urgency=low * Fixes in traslation -- Oleksandr Shneyder Tue, 04 Nov 2008 19:57:59 +0100 x2goclient (2.0.1-18) unstable; urgency=low * Fixed check for sudo config error -- Oleksandr Shneyder Mon, 13 Oct 2008 22:20:21 +0200 x2goclient (2.0.1-17) unstable; urgency=low * Fixed: command with arguments * Error massages (sudo config, can't execute command) -- Oleksandr Shneyder Thu, 09 Oct 2008 21:45:05 +0200 x2goclient (2.0.1-16) unstable; urgency=low * LDAP factor -- Oleksandr Shneyder Thu, 09 Oct 2008 21:52:21 +0200 x2goclient (2.0.1-15) unstable; urgency=low * Fixed sess_tv columns * Change Xmap for hildon -- Oleksandr Shneyder Wed, 01 Oct 2008 22:57:35 +0200 x2goclient (2.0.1-14) unstable; urgency=low * fixed editconnectiondialog -- Oleksandr Shneyder Wed, 01 Oct 2008 21:18:08 +0200 x2goclient (2.0.1-13) unstable; urgency=low * Fixed "black buttons" on button focus with new qt -- Oleksandr Shneyder Mon, 16 Jun 2008 21:08:01 +0000 x2goclient (2.0.1-12) unstable; urgency=low * Client ssh port in settings dialog * Sound system selections in session dialog * "Mini mode" for modes < "800x600" -- Oleksandr Shneyder Fri, 14 Mar 2008 21:03:48 +0100 x2goclient (2.0.1-11) unstable; urgency=low * Mac OS X support * Fixed Error '"visual != -1" in file itemviews/qheaderview.cpp' by compiling with qt >=4.3 * Fixed mouse tracking on SessionButton -- Oleksandr Shneyder Thu, 10 Jan 2008 21:54:24 +0100 x2goclient (2.0.1-10) unstable; urgency=low * russian translation -- Oleksandr Shneyder Mon, 1 Oct 2007 22:23:58 +0200 x2goclient (2.0.1-9) unstable; urgency=low * Added widget for ssh port select in editsessiondialog * ssh port to connect in command line options * client ssh port (for sshfs) in command line options -- Oleksandr Shneyder Fri, 21 Sep 2007 19:31:59 +0200 x2goclient (2.0.1-8) unstable; urgency=low * Fixed export directories with " " in path * Fixed SessionButton frame size by empty session * Compare session and display color depth * MS Windows support -- Oleksandr Shneyder Thu, 13 Sep 2007 19:30:59 +0200 x2goclient (2.0.1-7) unstable; urgency=low * esd support -- Oleksandr Shneyder Tue, 7 Aug 2007 18:33:32 +0200 x2goclient (2.0.1-6) unstable; urgency=low * OpenPGP smart cards support -- Oleksandr Shneyder Fri, 3 Aug 2007 19:40:27 +0200 x2goclient (2.0.1-5) unstable; urgency=low * extern auth (usb, smartcard) support -- Oleksandr Shneyder Tue, 26 Jun 2007 21:54:48 +0200 x2goclient (2.0.1-4) unstable; urgency=low * minimized reaction time by many LDAP users -- Oleksandr Shneyder Thu, 1 Mar 2007 21:15:14 +0100 x2goclient (2.0.1-3) unstable; urgency=low * Failover LDAP Server config * reload new users from LDAP -- Oleksandr Shneyder Thu, 1 Mar 2007 22:15:14 +0100 x2goclient (2.0.1-2) unstable; urgency=low * Updated German translation * Add "wrong password!" in ssh error message -- Oleksandr Shneyder Mon, 26 Feb 2007 20:25:02 +0100 x2goclient (2.0.1-1) unstable; urgency=low * Initial release -- Oleksandr Shneyder Fri, 2 Feb 2007 21:36:59 +0100 x2goclient-4.1.2.3/config_linux.sh0000755000000000000000000000004614447111613013650 0ustar #!/bin/bash make distclean qmake-qt4 x2goclient-4.1.2.3/config_linux_static.sh0000755000000000000000000000021314447111613015213 0ustar #!/bin/bash make distclean X2GO_LINUX_STATIC=x2go_linux_static /usr/local/Trolltech/Qt-4.7.1/bin/qmake CONFIG+='release' -spec linux-g++ x2goclient-4.1.2.3/config_win.bat0000755000000000000000000000044014447111613013440 0ustar rmdir /s /q client_build mingw32-make clean mkdir client_build cd client_build lrelease ..\x2goclient.pro set X2GO_CLIENT_TARGET= set config=release if [%1]==[debug] set config=debug console qmake ..\x2goclient.pro CONFIG+="%config%" cd .. cd x2gohelper mingw32-make clean cd .. x2goclient-4.1.2.3/copy-deps-win32.bat0000755000000000000000000000334514447111613014170 0ustar if "%~3"=="" ( echo "Usage: copy-deps-win32.bat path-to-x2goclient-contrib path-to-OpenSSL-Win32 destination" goto :a ) xcopy /E /Y %1\cygwin\20180615-1_bin %3\ || exit /b %errorlevel% del %3\nxproxy.exe.unstripped %3\libXcomp.a %3\libXcomp.dll.a || exit /b %errorlevel% xcopy /E /Y %1\libssh\0.9.3-x2go1-mingw482_bin\bin\libssh.dll %3\ || exit /b %errorlevel% xcopy /E /Y %1\MinGW-DLLs\i686-4.8.2-release-posix-dwarf-rt_v3-rev3\libgcc_s_dw2-1.dll %3\ || exit /b %errorlevel% xcopy /E /Y %1\MinGW-DLLs\i686-4.8.2-release-posix-dwarf-rt_v3-rev3\libstdc++-6.dll %3\ || exit /b %errorlevel% xcopy /E /Y %1\MinGW-DLLs\i686-4.8.2-release-posix-dwarf-rt_v3-rev3\libwinpthread-1.dll %3\ || exit /b %errorlevel% xcopy /E /Y %1\MSVC-DLLs\2013-12.0.21005.1-x86\msvcr120.dll %3\ || exit /b %errorlevel% xcopy /E /Y %1\pulse\13.0-lp151.19.1_bin %3\ || exit /b %errorlevel% xcopy /E /Y %1\PuTTY\0.78_bin %3\ || exit /b %errorlevel% xcopy /E /Y /I %1\VcXsrv\1.20.6.0_bin %3\VcXsrv || exit /b %errorlevel% xcopy /E /Y /I %1\x3270-fonts\3.6ga4\misc %3\VcXsrv\fonts\misc || exit /b %errorlevel% xcopy /E /Y %1\x3270-fonts\3.6ga4\copyright-x3270-fonts %3\VcXsrv\ || exit /b %errorlevel% rem We have to call mkfontscale and mkfontdir after updating the misc font directory. rem Sadly this can't be done statically, so we need a usable Cygwin installation with rem the mentioned packages installed. pushd %3\VcXsrv\fonts\misc C:\cygwin.latest\bin\bash.exe -c "/usr/bin/mkfontdir" C:\cygwin.latest\bin\bash.exe -c "/usr/bin/mkfontscale" popd xcopy /E /Y %1\zlib\1.2.8_bin\zlib1.dll %3\ || exit /b %errorlevel% xcopy /E /Y %2\bin\ssleay32.dll %3\ || exit /b %errorlevel% xcopy /E /Y %2\bin\libeay32.dll %3\ || exit /b %errorlevel% :a x2goclient-4.1.2.3/COPYING0000644000000000000000000004325414447111613011670 0ustar 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. x2goclient-4.1.2.3/COPYRIGHT.x2go-logos0000644000000000000000000000166114447111613014123 0ustar Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: X2Go-artwork [~X] Upstream-Contact: Heinz-M. Graesing Files: res/img/x2go-logos/mksizedsymbols.sh Copyright: 2005-2023 Heinz-M. Graesing License: GPL-2.0+ res/img/x2go-logos/x2go-logo-colored.svg res/img/x2go-logos/x2go-logo.svg res/img/x2go-logos/x2go-logo-rotated.svg res/img/x2go-logos/x2go-mascot.svg Copyright: 2005-2023 Heinz-M. Grasesing License: GPL-2.0+ Files: res/img/icons/16x16/x2goclient.png res/img/icons/32x32/x2goclient.png res/img/icons/48x48/x2goclient.png res/img/icons/64x64/x2goclient.png res/img/icons/128x128/x2goclient.png Copyright: 2005-2023 Heinz-M. Graesing License: GPL-2.0+ x2goclient-4.1.2.3/desktop/x2goclient.desktop0000644000000000000000000000051514447111613015750 0ustar [Desktop Entry] Version=1.0 Type=Application Name=X2Go Client Exec=x2goclient Icon=x2goclient StartupWMClass=x2goclient X-Window-Icon=x2goclient X-Osso-Type=application/x-executable Terminal=false Categories=Qt;KDE;Network; Keywords=Terminal,Client,Remote,Desktop,Published,Applications,Session,Profile; MimeType=application/x-x2go; x2goclient-4.1.2.3/Doxyfile0000644000000000000000000002374614447111613012347 0ustar # Doxyfile 1.4.1-KDevelop #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- PROJECT_NAME = x2goclient PROJECT_NUMBER = $VERSION$ OUTPUT_DIRECTORY = CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English USE_WINDOWS_ENCODING = NO BRIEF_MEMBER_DESC = YES REPEAT_BRIEF = YES ABBREVIATE_BRIEF = "The $name class" \ "The $name widget" \ "The $name file" \ is \ provides \ specifies \ contains \ represents \ a \ an \ the ALWAYS_DETAILED_SEC = NO INLINE_INHERITED_MEMB = NO FULL_PATH_NAMES = YES STRIP_FROM_PATH = /home/admin/ STRIP_FROM_INC_PATH = SHORT_NAMES = NO JAVADOC_AUTOBRIEF = NO MULTILINE_CPP_IS_BRIEF = NO DETAILS_AT_TOP = NO INHERIT_DOCS = YES DISTRIBUTE_GROUP_DOC = NO TAB_SIZE = 8 ALIASES = OPTIMIZE_OUTPUT_FOR_C = NO OPTIMIZE_OUTPUT_JAVA = NO SUBGROUPING = YES #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- EXTRACT_ALL = NO EXTRACT_PRIVATE = NO EXTRACT_STATIC = NO EXTRACT_LOCAL_CLASSES = YES EXTRACT_LOCAL_METHODS = NO HIDE_UNDOC_MEMBERS = NO HIDE_UNDOC_CLASSES = NO HIDE_FRIEND_COMPOUNDS = NO HIDE_IN_BODY_DOCS = NO INTERNAL_DOCS = NO CASE_SENSE_NAMES = YES HIDE_SCOPE_NAMES = NO SHOW_INCLUDE_FILES = YES INLINE_INFO = YES SORT_MEMBER_DOCS = YES SORT_BRIEF_DOCS = NO SORT_BY_SCOPE_NAME = NO GENERATE_TODOLIST = YES GENERATE_TESTLIST = YES GENERATE_BUGLIST = YES GENERATE_DEPRECATEDLIST= YES ENABLED_SECTIONS = MAX_INITIALIZER_LINES = 30 SHOW_USED_FILES = YES SHOW_DIRECTORIES = NO FILE_VERSION_FILTER = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- QUIET = NO WARNINGS = YES WARN_IF_UNDOCUMENTED = YES WARN_IF_DOC_ERROR = YES WARN_NO_PARAMDOC = NO WARN_FORMAT = "$file:$line: $text" WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- INPUT = src FILE_PATTERNS = *.c \ *.cc \ *.cxx \ *.cpp \ *.c++ \ *.java \ *.ii \ *.ixx \ *.ipp \ *.i++ \ *.inl \ *.h \ *.hh \ *.hxx \ *.hpp \ *.h++ \ *.idl \ *.odl \ *.cs \ *.php \ *.php3 \ *.inc \ *.m \ *.mm \ *.dox \ *.C \ *.CC \ *.C++ \ *.II \ *.I++ \ *.H \ *.HH \ *.H++ \ *.CS \ *.PHP \ *.PHP3 \ *.M \ *.MM \ *.C \ *.H \ *.tlh \ *.diff \ *.patch \ *.moc \ *.xpm \ *.dox RECURSIVE = yes EXCLUDE = EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = EXAMPLE_PATH = EXAMPLE_PATTERNS = * EXAMPLE_RECURSIVE = NO IMAGE_PATH = INPUT_FILTER = FILTER_PATTERNS = FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- SOURCE_BROWSER = NO INLINE_SOURCES = NO STRIP_CODE_COMMENTS = YES REFERENCED_BY_RELATION = YES REFERENCES_RELATION = YES VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- ALPHABETICAL_INDEX = NO COLS_IN_ALPHA_INDEX = 5 IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- GENERATE_HTML = YES HTML_OUTPUT = .build_doxygen/doxygen/html HTML_FILE_EXTENSION = .html HTML_HEADER = HTML_FOOTER = HTML_STYLESHEET = HTML_ALIGN_MEMBERS = YES GENERATE_HTMLHELP = NO CHM_FILE = HHC_LOCATION = GENERATE_CHI = NO BINARY_TOC = NO TOC_EXPAND = NO DISABLE_INDEX = NO ENUM_VALUES_PER_LINE = 4 GENERATE_TREEVIEW = NO TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- GENERATE_LATEX = NO LATEX_OUTPUT = .build_doxygen/doxygen/latex LATEX_CMD_NAME = latex MAKEINDEX_CMD_NAME = makeindex COMPACT_LATEX = NO PAPER_TYPE = a4wide EXTRA_PACKAGES = LATEX_HEADER = PDF_HYPERLINKS = NO USE_PDFLATEX = NO LATEX_BATCHMODE = NO LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- GENERATE_RTF = NO RTF_OUTPUT = .build_doxygen/doxygen/rtf COMPACT_RTF = NO RTF_HYPERLINKS = NO RTF_STYLESHEET_FILE = RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- GENERATE_MAN = YES MAN_OUTPUT = .build_doxygen/man MAN_EXTENSION = .3 MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- GENERATE_XML = NO XML_OUTPUT = .build_doxygen/doxygen/xml XML_SCHEMA = XML_DTD = XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- GENERATE_PERLMOD = NO PERLMOD_LATEX = NO PERLMOD_PRETTY = YES PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- ENABLE_PREPROCESSING = YES MACRO_EXPANSION = NO EXPAND_ONLY_PREDEF = NO SEARCH_INCLUDES = YES INCLUDE_PATH = INCLUDE_FILE_PATTERNS = PREDEFINED = EXPAND_AS_DEFINED = SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- TAGFILES = GENERATE_TAGFILE = x2goclient.tag ALLEXTERNALS = NO EXTERNAL_GROUPS = YES PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- CLASS_DIAGRAMS = YES HIDE_UNDOC_RELATIONS = YES HAVE_DOT = NO CLASS_GRAPH = YES COLLABORATION_GRAPH = YES GROUP_GRAPHS = YES UML_LOOK = NO TEMPLATE_RELATIONS = NO INCLUDE_GRAPH = YES INCLUDED_BY_GRAPH = YES CALL_GRAPH = NO GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = YES DOT_IMAGE_FORMAT = png DOT_PATH = DOTFILE_DIRS = MAX_DOT_GRAPH_WIDTH = 1024 MAX_DOT_GRAPH_HEIGHT = 1024 MAX_DOT_GRAPH_DEPTH = 1000 DOT_TRANSPARENT = NO DOT_MULTI_TARGETS = NO GENERATE_LEGEND = YES DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::additions related to the search engine #--------------------------------------------------------------------------- SEARCHENGINE = NO x2goclient-4.1.2.3/examples/x2goclient-cli0000755000000000000000000003214214447111613015216 0ustar #!/usr/bin/perl ############################################################################ # Copyright (C) 2005-2023 by Oleksandr Shneyder # # # # # # This program is free software; you can redistribute 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., # # 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # ############################################################################ use File::Path; use Proc::Simple; use Term::ReadPassword; use Getopt::Long; use strict; my $user; my $server; my $geometry="fullscreen"; my $link="lan"; my $pack="16m-jpeg-9"; my $type="unix-kde"; my $stype="desktop"; my $kbdlay="us"; my $kbdtype="pc105/us"; my $setkbd="0"; my $accept=0; my $sound=1; my $cmd="startkde"; my $ssh_key=0; my $port="22"; system ("rm -rf ~/.x2go/ssh/askpass*"); sub printpass { my $prog=shift; my $pass=shift; open (F,">$prog") or die "Couldn't open $prog for writing"; print F '#!/usr/bin/perl $param=shift;'; print F " open (F,\">$prog.log\");"; print F ' print F $param; close (F); if($param =~ m/RSA key/) {'; if($accept){ print F 'print "yes\n";';} else{ print F 'print "no\n";';} print F ' } else {'; print F " print \"$pass\\n\"; }"; close(F); chmod (0700, $prog); } sub checkstat { my $prog=shift; open (F,"<$prog.log") or return; my @outp; my $ln=; for(my $i=0;$ln;$i++) { @outp[$i]=$ln; $ln=; } close(F); if(join(" ",@outp) =~ m/Are you sure you want to continue connecting/) { print "@outp[0]@outp[1]"; print "If you are sure you want to continue connecting, please launch this programm with --add-to-known-hosts yes\n"; exit; } } sub hidepass { my $prog=shift; open (F,">$prog") or die "Couldn't open $prog for writing"; print F "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; close(F); } my $pack_methods= "nopack 8 64 256 512 4k 32k 64k 256k 2m 16m 256-rdp 256-rdp-compressed 32k-rdp 32k-rdp-compressed 64k-rdp 64k-rdp-compressed 16m-rdp 16m-rdp-compressed rfb-hextile rfb-tight rfb-tight-compressed 8-tight 64-tight 256-tight 512-tight 4k-tight 32k-tight 64k-tight 256k-tight 2m-tight 16m-tight 8-jpeg-% 64-jpeg 256-jpeg 512-jpeg 4k-jpeg 32k-jpeg 64k-jpeg 256k-jpeg 2m-jpeg 16m-jpeg-% 8-png-jpeg-% 64-png-jpeg 256-png-jpeg 512-png-jpeg 4k-png-jpeg 32k-png-jpeg 64k-png-jpeg 256k-png-jpeg 2m-png-jpeg 16m-png-jpeg-% 8-png-% 64-png 256-png 512-png 4k-png 32k-png 64k-png 256k-png 2m-png 16m-png-% 16m-rgb-% 16m-rle-%"; sub printargs { print "Usage: $0 --user --server [Options]\nOptions:\ --help Print this message\ --help-pack Print availabel pack methods --user Connect as user 'username'\ --server Connect to 'hostname'\ --command Run command 'cmd', default value 'startkde' --port SSH port, default 22 --ssh-key Us 'fname' as a key for ssh connection --add-to-known-hosts Add RSA key fingerprint to .ssh/known_hosts if authenticity of server can't be established, default value 'no' --use-sound Start sound server and ssh tunel for sound connections, default value 'yes' nxagent options: --geometry x Set window size, default value 'fullscreen' --link Set link type, default 'lan' --pack Use pack method, default '16m-jpeg-9' --session-type Session type, 'desktop' or 'application' default 'desktop' --kbd-layout Use keyboard layout, default 'us' --kbd-type Set Keyboard type, default 'pc105/us'\n"; exit; } sub printpack { my $m=$pack_methods; $m=~s/%/[0-9]/g; print "$m\n"; exit; } sub check_pack { my $p=shift; if($p =~ m/%/) { return 0; } my @arr=split("-","$p"); my $pm=$pack_methods; if(@arr>1) { my $qa=@arr[@arr-1]; my @vals=unpack('cc',$qa); if($qa ge '0' && $qa le '9' && @vals == 1) { $pm=~s/%/$qa/g; } } my @met=split("\n","$pm"); for(my $i=0;$i<@met;$i++) { if(@met[$i] eq $p) { return 1; } } return 0; } sub getindex { my @sess=@_; print("Number\tStatus\t\tCreation time\t\tDisplay\tClient IP\n"); for(my $i=1;$i<=@sess;$i++) { my @vals=split('\\|',"@sess[$i-1]"); my $status=@vals[4]; if(@vals[4] eq 'S') { $status='Suspended' } elsif(@vals[4] eq 'R') { $status='Running ' } print "$i)\t$status\t@vals[5]\t@vals[2]\t@vals[7]\n"; } print "Enter numer of session to resume or 'n' to start new session: "; my $answ=; chomp($answ); if($answ > 0 && $answ <= @sess) { my @vals=split('\\|',"@sess[$answ-1]"); if(@vals[4] eq 'R') { print("Session is already running on @vals[7], continue? (y/n): "); my $nansw=; chomp($nansw); if($nansw eq 'y') { return $answ; } else { return -1; } } else { return $answ; } } elsif ($answ eq "n") { return 0; } else { print "Input Error\n"; return -1; } } GetOptions("user=s" => \$user, "server=s" => \$server, "command=s" => \$cmd, "port=s" => \$port, "ssh-key=s" => \$ssh_key, "add-to-known-hosts=s" => \$accept, "use-sound=s" => \$sound, "geometry=s" => \$geometry, "link=s" => \$link, "pack=s" => \$pack, "session-type=s" => \$stype, "kbd-layout=s" => \$kbdlay, "kbd-type=s" => \$kbdtype, 'help-pack' => \&printpack, 'help' => \&printargs) or printargs; printargs unless (($user and $server)); if($ssh_key) { if ( ! -e $ssh_key) { print "Error, $ssh_key not exists\n"; exit; } } if($kbdlay or $kbdtype) { $setkbd=1; } if(($link ne "modem" )&&($link ne "isdn")&&($link ne "adsl")&&($link ne "wan")&&($link ne "lan")) { print "Error parsing command line, wrong \"link\" argument\n"; printargs; exit; } if(! check_pack($pack) ) { print "Error parsing command line, wrong \"pack\" argument\n"; printargs; exit; } if($accept) { if($accept eq "yes") { $accept=1; } elsif($accept eq "no") { $accept=0; } else { print "Error parsing command line, wrong \"add-to-known-hosts\" argument\n"; printargs; exit; } } if($sound != 1) { if($sound eq "yes") { $sound=1; } elsif($sound eq "no") { $sound=0; } else { print "Error parsing command line, wrong \"use-sound\" argument\n"; printargs; exit; } } my $nxroot="$ENV{'HOME'}/.x2go"; my $dirpath="$nxroot/ssh"; eval { mkpath($dirpath) }; if ($@) { print "Couldn't create $dirpath: $@"; exit; } my $askpass="$dirpath/askpass"; my $pass; my $sessions; if(!$ssh_key) { $pass=read_password('Password:'); printpass $askpass,$pass; $sessions=`DISPLAY=:0 SSH_ASKPASS=$askpass setsid ssh -p $port $user\@$server "x2golistsessions"`; hidepass $askpass; checkstat $askpass; } else { $sessions=`ssh -p $port -i $ssh_key $user\@$server "x2golistsessions"`; } my @sess=split("\n","$sessions"); my $newses=0; my $snum=-1;#index of session+1,-1 - error, -0 - new session if (@sess == 0) { $newses=1; } else { my @lines=split('\\|',"@sess[0]"); my $status=@lines[4]; if($status eq 'S' && @sess == 1) { $snum=0; } else { while($snum==-1) { $snum=getindex(@sess); } if($snum == 0) { $newses=1; } else { $snum--; } } } my $disp; my $snd_port; my $gr_port; my $cookie; my $agentpid; my $sname; my $t="D"; if( $stype eq "application" ) { $t="R"; } if($newses) { my $outp; if(! $ssh_key) { printpass $askpass,$pass; $outp=`DISPLAY=:0 SSH_ASKPASS=$askpass setsid ssh -p $port $user\@$server "x2gostartagent $geometry $link $pack $type $kbdlay $kbdtype $setkbd $t"`; hidepass $askpass; checkstat $askpass; } else { $outp=`ssh -p $port -i $ssh_key $user\@$server "x2gostartagent $geometry $link $pack $type $kbdlay $kbdtype $setkbd $t"`; } my @lines=split("\n","$outp"); $disp=@lines[0]; $cookie=@lines[1]; $agentpid=@lines[2]; $sname=@lines[3]; $gr_port=@lines[4]; $snd_port=@lines[5]; # print ":$disp $cookie $agentpid $sname $gr_port $snd_port\n"; } else { my @lines=split('\\|',"@sess[$snum]"); $agentpid=@lines[0]; $sname=@lines[1]; $disp=@lines[2]; my $status=@lines[4]; $cookie=@lines[6]; $gr_port=@lines[8]; $snd_port=@lines[9]; if($status eq 'R') { if(! $ssh_key) { printpass $askpass,$pass; system("DISPLAY=:0 SSH_ASKPASS=$askpass setsid ssh -p $port $user\@$server \"setsid x2gosuspend-session $sname\""); hidepass $askpass; checkstat $askpass; } else { system("ssh -p $port -i $ssh_key $user\@$server \"setsid x2gosuspend-session $sname\""); } sleep (1); } if(! $ssh_key) { printpass $askpass,$pass; system("DISPLAY=:0 SSH_ASKPASS=$askpass setsid ssh -p $port $user\@$server \"setsid x2goresume-session $sname $geometry $link $pack $kbdlay $kbdtype $setkbd\""); hidepass $askpass; checkstat $askpass; } else { system("ssh -p $port -i $ssh_key $user\@$server \"setsid x2goresume-session $sname $geometry $link $pack $kbdlay $kbdtype $setkbd\""); } } my $tunnel = Proc::Simple->new(); my $snd_tun; my $snd_server; if($sound) { $snd_tun= Proc::Simple->new(); $snd_server= Proc::Simple->new(); $snd_server->start("artsd -u -N -p $snd_port"); } if( !$ssh_key) { printpass $askpass,$pass; $tunnel->start("DISPLAY=:0 SSH_ASKPASS=$askpass setsid ssh -p $port -N -L $gr_port:localhost:$gr_port $user\@$server"); if($sound) { $snd_tun->start("DISPLAY=:0 SSH_ASKPASS=$askpass setsid ssh -p $port -N -R $snd_port:localhost:$snd_port $user\@$server"); } } else { $tunnel->start("ssh -p $port -i $ssh_key -N -L $gr_port:localhost:$gr_port $user\@$server"); if($sound) { $snd_tun->start("ssh -p $port -i $ssh_key -N -R $snd_port:localhost:$snd_port $user\@$server"); } } sleep 2; $dirpath="$nxroot/S-$sname"; eval { mkpath($dirpath) }; if ($@) { print "Couldn't create $dirpath: $@"; hidepass $askpass; exit; } my $nx_host="nx/nx,composite=1,root=$nxroot,connect=localhost,cookie=$cookie,port=$gr_port,errors=$dirpath/session"; open (FILE,">$dirpath/options")or die "Couldnt't open $dirpath/options for writing"; print FILE "$nx_host:$disp"; close (FILE); my $proxy = Proc::Simple->new(); $proxy->start("LD_LIBRARY_PATH=\$X2GO_LIB nxproxy -S nx/nx,options=$dirpath/options:$disp 2>>$dirpath/session"); if($newses) { if(! $ssh_key) { system("DISPLAY=:0 SSH_ASKPASS=$askpass setsid ssh -p $port $user\@$server \"setsid x2goruncommand $disp $agentpid $sname $snd_port $cmd arts $t >& /dev/null & exit \""); } else { system("ssh -p $port -i $ssh_key $user\@$server \"setsid x2goruncommand $disp $agentpid $sname $snd_port $cmd arts $t>& /dev/null & exit \""); } } #hidepass $askpass; #checkstat $askpass; while($proxy->poll()) { sleep(1); } $tunnel->kill(); if($sound) { $snd_server->kill(); $snd_tun->kill(); } system ("rm -rf ~/.x2go/ssh/askpass*"); x2goclient-4.1.2.3/handle_mxe.sh0000755000000000000000000000340014447111613013265 0ustar #!/bin/bash # # prepare or build x2goclient and x2gohelper for Windows using MXE # cross build environment for Linux (https://mxe.cc/). # # Usage: $0 [prepare] [] # # prepare means only prepare the build dirs (create them, clean # them). If omitted, it will build the binaries instead. # can be "debug" or "release". Default is "release". # # # Adjust these values to match your MXE installation: MXE_BASE='/usr/lib/mxe/usr' #MXE_TARGET='i686-w64-mingw32.shared MXE_TARGET='i686-w64-mingw32.static' #MXE_TARGET='x86-64-w64-mingw32.shared' #MXE_TARGET='x86-64-w64-mingw32.static' mxe_path="${MXE_BASE}/${MXE_TARGET}" if ! test -d "${mxe_path}"; then printf 'Cannot find MXE installation at "%s".' "${mxe_path}" >&2 exit '1' fi BUILD_DIR='client_build_mxe' BUILD_CONFIG='release' mode='build' if [ 'prepare' = "${1}" ]; then mode='prepare' shift fi if [ 'debug' = "${1}" ]; then BUILD_CONFIG='debug' shift fi export 'MXE_BASE' 'MXE_TARGETS' 'BUILD_DIR' 'BUILD_CONFIG' X2GO_CLIENT_TARGET='' export 'X2GO_CLIENT_TARGET' if [ 'build' = "${mode}" ] && [ ! -d "${BUILD_DIR}" ]; then printf 'Please run "%s prepare" first.' "${0}" >&2 exit '2' fi if [ 'prepare' = "${mode}" ]; then if test -e "${BUILD_DIR}"; then rm -rf "${BUILD_DIR}" fi make clean mkdir -p "${BUILD_DIR}/${BUILD_CONFIG}" pushd "${BUILD_DIR}" "${mxe_path}/qt5/bin/lrelease" '../x2goclient.pro' # no special Makefile required as qmake will create that "${mxe_path}/qt5/bin/qmake" '../x2goclient.pro' CONFIG+="${BUILD_CONFIG} mxe" popd else pushd "${BUILD_DIR}" make popd fi pushd 'x2gohelper' # Here we do not have qmake but a unique Makefile for MXE. if [ 'prepare' = "${mode}" ]; then make -f 'Makefile.mxe' 'clean' else make -f 'Makefile.mxe' fi popd x2goclient-4.1.2.3/HOWTO.GPGCARD0000644000000000000000000001033714447111613012522 0ustar x2goclient smartcard HOWTO: 1. gpg card configuration: user@x2goclient$ gpg --card-edit Application ID ...: D2760001240102000000000000420000 Version ..........: 2.0 Manufacturer .....: test card Serial number ....: 00000042 Name of cardholder: [not set] Language prefs ...: de Sex ..............: unspecified URL of public key : [not set] Login data .......: [not set] Private DO 1 .....: [not set] Private DO 2 .....: [not set] Signature PIN ....: forced Max. PIN lengths .: 24 24 24 PIN retry counter : 3 0 3 Signature counter : 0 Signature key ....: [none] Encryption key....: [none] Authentication key: [none] General key info..: [none] Command> admin Admin commands are allowed Command> sex Sex ((M)ale, (F)emale or space): M gpg: 3 Admin PIN attempts remaining before card is permanently locked Admin PIN Command> login Login data (account name): beispielb Command> generate Make off-card backup of encryption key? (Y/n) n Please note that the factory settings of the PINs are PIN = `123456' Admin PIN = `12345678' You should change them using the command --change-pin PIN Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Key is valid for? (0) Key does not expire at all Is this correct? (y/N) y You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) " Real name: Bert Beispiel Email address: bert.beispiel@x2go-test.org Comment: Test user You selected this USER-ID: "Bert Beispiel (Test user) " Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O gpg: generating new key gpg: please wait while key is being generated ... gpg: key generation completed (17 seconds) gpg: signatures created so far: 0 gpg: generating new key gpg: please wait while key is being generated ... gpg: key generation completed (14 seconds) gpg: signatures created so far: 1 gpg: signatures created so far: 2 gpg: generating new key gpg: please wait while key is being generated ... gpg: key generation completed (13 seconds) gpg: signatures created so far: 3 gpg: signatures created so far: 4 gpg: key 8CE52B35 marked as ultimately trusted public and secret key created and signed. gpg: checking the trustdb gpg: 3 marginal(s) needed, 1 complete(s) needed, classic trust model gpg: depth: 0 valid: 8 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 8u pub 1024R/8CE52B35 2009-09-24 Key fingerprint = 2475 8498 7FF4 2727 B476 F72E 7BF2 CFE9 8CE5 2B35 uid Bert Beispiel (Test user) sub 1024R/C7151669 2009-09-24 sub 1024R/593801C0 2009-09-24 Command> quit IMPORTANT: login Name is a name of user on remote system 2. configuring ssh connection 2.1 start gpg-agent with ssh support Be sure, that pinentry-x2go is installed. For test purposes you can use other pinentry program, but for x2goclient pinentry-x2go is required (pinentry-x2go-gtk if you are using the gtk-version of x2goclient) user@x2goclient$ gpg-agent --enable-ssh-support --daemon --pinentry-program /usr/bin/pinentry-x2go GPG_AGENT_INFO=/tmp/gpg-Xh4lY7/S.gpg-agent:24620:1; export GPG_AGENT_INFO; SSH_AUTH_SOCK=/tmp/gpg-LO41WU/S.gpg-agent.ssh; export SSH_AUTH_SOCK; SSH_AGENT_PID=24620; export SSH_AGENT_PID; 2.2 export SSH environment variables (copy gpg-agent output in console) user@x2goclient$ GPG_AGENT_INFO=/tmp/gpg-Xh4lY7/S.gpg-agent:24620:1; export GPG_AGENT_INFO; user@x2goclient$ SSH_AUTH_SOCK=/tmp/gpg-LO41WU/S.gpg-agent.ssh; export SSH_AUTH_SOCK; user@x2goclient$ SSH_AGENT_PID=24620; export SSH_AGENT_PID; 2.3 You can check the key on your smartcard with: user@x2goclient$ ssh-add -l 1024 ef:d5:8c:37:cb:38:01:8d:c2:30:00:ac:93:a2:43:98 cardno:000000000042 (RSA) 2.4 Copy the public part of your key to the remote computer user@x2goclient$ ssh-copy-id beispielb@x2goserver beispielb@x2goserver's password: Now try logging in into the machine, e.g., via "ssh 'beispielb@x2goserver'", and check: ~/.ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting. 2.5 Testing ssh connection TBD x2goclient-4.1.2.3/INSTALL0000644000000000000000000000216614447111613011663 0ustar Requirements ================== Before use this program you need to install: Qt4: https://download.qt.io/archive/qt/ nxcomp + nxproxy: https://code.x2go.org/releases/source/nx-libs/ You may want also install the PulseAudio sound server and client to enable sound support https://www.freedesktop.org/wiki/Software/PulseAudio/Download/ Building ================== Edit the Makefile to suit your needs. Variables that may need modifications are: - QMAKE_BINARY - LRELEASE_BINARY Variables that are being used by the install targets called later and might need modifications are: - PREFIX - ETCDIR Everything else should be left as-is. ------------------ On Linux-based systems, run: make all or make build_client to build X2Go Client. Installing ================== On Linux-based systems, run: make install to install X2Go Client. Alternatively, use one of the targets: - install_client: for X2Go Client only - install_man: for the man pages only Uninstalling ================== On Linux-based systems, use the same procedure as lined out in the "Installing" section, but replace "install" with "uninstall". x2goclient-4.1.2.3/LICENSE0000644000000000000000000000170514447111613011635 0ustar Copyright (C) 2005-2023 Obviously Nice -- https://www.obviously-nice.de Copyright (C) 2007-2023 X2Go Project -- https://wiki.x2go.org This program is free software; you can redistribute 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, see . Copyright (C) 2005-2023 Oleksandr Shneyder Copyright (C) 2005-2023 Heinz-Markus Graesing Copyright (C) 2007-2023 X2Go Project x2goclient-4.1.2.3/macbuild.sh0000755000000000000000000004706514447111613012760 0ustar #!/bin/bash make_boolean() { OPTION="${1}" case "${OPTION}" in ("0"|"no"|""|"No"|"nO"|"NO"|"false"|"FALSE") OPTION="0";; (*) OPTION="1";; esac printf "${OPTION}" } phase() { echo echo "***" echo "*** ${1}..." echo "***" echo } usage() { exec >&2 NO_VAL="0, no, NO, No, nO, false or FALSE" printf "$(basename ${0}): usage\n\n" printf "Accepted environment variables:\n" printf "\tSDK:\t\t\t\tsets the target SDK [string]\n\t\t\t\t\tdefault: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk\n" printf "\tMACOSX_DEPLOYMENT_TARGET:\tsets the deployment target (specific OS X version to optimize/build for) [string]\n\t\t\t\t\tdefault: 10.7\n" printf "\tSTDLIB:\t\t\t\tsets a specific stdlib variant. Must be used with FORCE_STDLIB to have any effect. [string]\n\t\t\t\t\tdefault: autodetect\n" printf "\tFORCE_STDLIB:\t\t\tforces a specific C++ stdlib version. If you use this, also specify STDLIB. YOU SHOULD NEVER USE THIS, UNLESS YOU KNOW WHAT YOU ARE DOING! [boolean]\n\t\t\t\t\tdefault: disabled\n" printf "\tDEBUG\t\t\t\tenables or disables debug builds [boolean]\n\t\t\t\t\tdefault: disabled\n" printf "\tBUNDLE\t\t\t\tenables or disables library bundling and the creation of a .dmg installer [boolean]\n\t\t\t\t\tdefault: enabled\n" printf "\tUNIVERSAL\t\t\tenables or disables x86 support. x86_64 support is always enabled [boolean]\n\t\t\t\t\tdefault: enabled\n" printf "\tMACPORTS_PREFIX\t\t\tsets the (MacPorts) prefix used to detect PulseAudio, nxproxy and xauth binaries [string]\n\t\t\t\t\tdefault: /opt/local/\n" printf "\n" printf "Boolean values help:\n" printf "\ta value of ${NO_VAL} will be treated as false\n" printf "\tany other value will be treated as true\n" exit 2 } dependency_error() { exec >&2 typeset element="${1}"; shift typeset component="${1}"; shift typeset type="${1}"; shift echo "${element} ${type} not found." echo "Install ${component} -- e.g., via "port -vt install ${component}" if using MacPorts." echo "If ${component} is already installed, try passing MACPORTS_PREFIX if the autodetected or default value (${MACPORTS_PREFIX}) does not match your setup." exit 3 } lazy_canonical_path() { typeset path="${1}" typeset old_path="" while [ "${old_path}" != "${path}" ]; do old_path="${path}" path="${path//\/\///}" done printf "${old_path}" } get_nesting_level() { set -x typeset -i level=0 typeset path="${1}" while [ -n "${path}" ] && [ "${path}" != "." ] && [ "${path}" != "/" ]; do i="$((${i} + 1))" path="$(dirname "${path}")" done printf "${level}" set +x } repeat_str() { # INPUT COUNT typeset INPUT="${1:?"Error: no input string passed to ${FUNCNAME}()."}" typeset COUNT="${2:?"Error: no count passed to ${FUNCNAME}()."}" typeset ret="" typeset -i i=0 while [ "${i}" -lt "${COUNT}" ]; do ret="${ret}$(printf "${INPUT}")" i=$((${i} + 1)) done printf "${ret}" return 0 } typeset -a otool_fail_str otool_fail_str=( "is not an object file" "can't open file" "Archive : " ) parse_otool_output() { #set -x typeset raw_output="${@}" typeset fail_str="" for fail_str in "${otool_fail_str[@]}"; do if echo "${raw_output}" | grep -q "${fail_str}"; then return 1 fi done typeset tmp_regex='^[[:space:]]+(.*)[[:space:]]\(compatibility version .*, current version .*\)' # In this special case, we do not want read to perform any word splitting. typeset oldifs="${IFS}" IFS='' # Used for skipping the ID entry. # Initialized to the empty string, but the first matching line will set it once. # The ID filename is required for subsequent dependency discovery. typeset id="" typeset line="" while read -r line; do if [[ "${line}" =~ ${tmp_regex} ]]; then typeset file="${BASH_REMATCH[1]}" if [ -z "${id}" ]; then echo "ID unset, something is wrong" >&2 return 1 elif [ "$(basename "${file}")" != "${id}" ]; then echo "${BASH_REMATCH[1]}" else first="0" fi elif [ -z "${id}" ]; then id="$(basename "${line%":"}")" fi done <<< "${raw_output}" IFS="${oldifs}" #set +x return 0 } MATCH_HELP='(^((-h)|(--help))([ ]|$))|([ ]+((-h)|(--help))([ ]|$))' [ -n "${*}" ] && [[ "${*}" =~ ${MATCH_HELP} ]] && usage NAME="x2goclient" TOP_DIR="$(dirname "$0")" [[ "${TOP_DIR}" == /* ]] || TOP_DIR="${PWD}/${TOP_DIR#./}" BUILD_DIR="${TOP_DIR}/client_build" APPBUNDLE="${BUILD_DIR}/${NAME}.app" EXE_DIR="${APPBUNDLE}/Contents/exe/" FRAMEWORKS_DIR="${APPBUNDLE}/Contents/Frameworks/" RESOURCES_DIR="${APPBUNDLE}/Contents/Resources/" DMGFILE="${BUILD_DIR}/${NAME}.dmg" PROJECT="${TOP_DIR}/${NAME}.pro" PKG_DMG="${TOP_DIR}/pkg-dmg" # Try to find the MacPorts prefix. typeset MACPORTS_PREFIX_SEARCH="" if type -P port >/dev/null 2>&1; then MACPORTS_PREFIX_SEARCH="$(type -P port)" MACPORTS_PREFIX_SEARCH="${MACPORTS_PREFIX_SEARCH%%bin/port}" else # Port not being found in ${PATH} doesn't necessarily mean it isn't available. # Try to guess. MACPORTS_PREFIX_SEARCH="/opt/local/" fi NXPROXY="nxproxy" NXAUTH="xauth" PULSEAUDIO_BINARIES=( "pulseaudio" "esdcompat" "pacat" "pacmd" "pactl" "pamon" "paplay" "parec" "parecord" "pasuspender" ) PULSEAUDIO_LIBRARIES=( "libpulse-simple.0.dylib" "pulse-13.0" "pulseaudio" ) RESOURCE_FILES=( "audio/startup.wav" ) typeset -a special_files_regex special_files_regex+=( "pulseaudio/libpulsecommon-[0-9]+\.[0-9]+\.dylib" "pulseaudio/libpulsecore-[0-9]+\.[0-9]+\.dylib" ) typeset -r dependency_base_format='@executable_path/../Frameworks/' : ${SDK:="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk"} : ${MACOSX_DEPLOYMENT_TARGET:="10.7"} : ${FORCE_STDLIB:="0"} : ${DEBUG:="0"} : ${BUNDLE:="1"} : ${UNIVERSAL:="1"} : ${MACPORTS_PREFIX:="${MACPORTS_PREFIX_SEARCH}"} unset MACPORTS_PREFIX_SEARCH FORCE_STDLIB="$(make_boolean "${FORCE_STDLIB}")" DEBUG="$(make_boolean "${DEBUG}")" BUNDLE="$(make_boolean "${BUNDLE}")" UNIVERSAL="$(make_boolean "${UNIVERSAL}")" [ "${DEBUG}" -eq "0" ] && BUILD_MODE="release" || BUILD_MODE="debug" BUILD_ARCH="x86_64" [ "${UNIVERSAL}" -eq "1" ] && BUILD_ARCH="${BUILD_ARCH} x86" if [ "${FORCE_STDLIB}" -eq "1" ]; then if [[ -z "${STDLIB}" ]]; then echo "stdlib forcing enabled, but STDLIB not passed." >&2 exit 1 fi if [[ "${STDLIB}" != "libc++" && "${STDLIB}" != "libstdc++" ]]; then echo "stdlib forcing enabled, but STDLIB contains illegal value. Legal values: libc++, libstdc++" >&2 exit 1 fi else SDK_MINOR_VERSION="$(/usr/bin/perl -pe 's#.*?10\.(\d+).*?\.sdk$#\1#' <<< "${SDK}")" MATCH_NUMBERS='^[0-9]+$' if [[ "${SDK_MINOR_VERSION}" =~ ${MATCH_NUMBERS} ]]; then [ "${SDK_MINOR_VERSION}" -gt "6" ] && STDLIB="libstdc++" [ "${SDK_MINOR_VERSION}" -gt "8" ] && STDLIB="libc++" else echo "Unable to determine OS X version. Unknown value '${SDK_MINOR_VERSION}'." >&2 exit 1 fi fi # Gather files. NXPROXY="$(lazy_canonical_path "${MACPORTS_PREFIX}/bin/${NXPROXY}")" NXAUTH="$(lazy_canonical_path "${MACPORTS_PREFIX}/bin/${NXAUTH}")" [ -x "${NXPROXY}" ] || dependency_error "nxproxy" "nxproxy" "binary" [ -x "${NXAUTH}" ] || dependency_error "xauth" "xauth" "binary" typeset -i i typeset -i fail typeset -a PULSEAUDIO_BINARIES_FULL typeset cur_binary fail="0" for cur_binary in ${PULSEAUDIO_BINARIES[@]}; do cur_binary="$(lazy_canonical_path "${MACPORTS_PREFIX}/bin/${cur_binary}")" if [ -x "${cur_binary}" ]; then PULSEAUDIO_BINARIES_FULL+=( "${cur_binary}" ) else fail="1" break fi done [ "${fail}" -eq "1" ] && dependency_error "${cur_binary##"$(lazy_canonical_path "${MACPORTS_PREFIX}/bin/")"}" "pulseaudio" "binary" typeset cur_lib_or_libdir typeset -a PULSEAUDIO_LIBRARIES_FULL fail="0" for cur_lib_or_libdir in ${PULSEAUDIO_LIBRARIES[@]}; do cur_lib_or_libdir="$(lazy_canonical_path "${MACPORTS_PREFIX}/lib/${cur_lib_or_libdir}")" if [ ! -d "${cur_lib_or_libdir}" ] && [ -x "${cur_lib_or_libdir}" ]; then echo "Adding ${cur_lib_or_libdir} to \${PULSEAUDIO_LIBRARIES_FULL}" PULSEAUDIO_LIBRARIES_FULL+=( "${cur_lib_or_libdir}" ) elif [ -d "${cur_lib_or_libdir}" ]; then # That's a directory... more work needed here. echo "Scrubbing directory ${cur_lib_or_libdir}" typeset entry="" # -r parameter to read: Backslashes may NOT escape any characters! # -d '': specifies the delimiter to be used - as '' resolves to an empty string followed # by a NUL character, the delimiter is set to this very NUL (\000) character. while read -r -d '' entry; do typeset cur_file="$(basename "${entry}")" typeset TMP_REGEX='^.*\.(\.[0-9]+){0,2}(so|dylib|bundle)$' # This is only here should the PA build system ever break and create # "linux-style" library file names. Let's hope it never actually comes to that. typeset TMP_REGEX_LINUX_COMPAT='^.*\.(so|dylib|bundle)(\.[0-9]+){0,2}$' if [[ "${cur_file}" =~ ${TMP_REGEX} ]] || [[ "${cur_file}" =~ ${TMP_REGEX_LINUX_COMPAT} ]]; then # Filename matched the expected template. echo "Adding $(lazy_canonical_path "${entry}") to \${PULSEAUDIO_LIBRARIES_FULL}" PULSEAUDIO_LIBRARIES_FULL+=( "$(lazy_canonical_path "${entry}")" ) fi done < <(gfind "${cur_lib_or_libdir}" -type 'f' -print0) else fail="1" break fi done [ "${fail}" -eq "1" ] && dependency_error "${cur_lib_or_libdir}" "pulseaudio" "library or library directory" set -e phase "Cleaning" make clean # Create gitlog. git --no-pager log --since "2 years ago" --format="%ai %aN (%h) %n%n%x09*%w(68,0,10) %s%d%n" > "ChangeLog.gitlog" mv "ChangeLog.gitlog" "res/txt/git-info" # Copy debian changelog as the general changelog. cp -a "debian/changelog" "res/txt/" [ -e "${BUILD_DIR}" ] && rm -rf "${BUILD_DIR}" mkdir "${BUILD_DIR}" pushd "${BUILD_DIR}" phase "Running lrelease" lrelease "${PROJECT}" phase "Running qmake" qmake CONFIG+="${BUILD_MODE} ${BUILD_ARCH}" -spec macx-g++ "${PROJECT}" \ QMAKE_MAC_SDK="${SDK}" \ QMAKE_MACOSX_DEPLOYMENT_TARGET="${MACOSX_DEPLOYMENT_TARGET}" \ OSX_STDLIB="${STDLIB}" \ MACPORTS_INCLUDE_PATH="${MACPORTS_PREFIX}/include" \ MACPORTS_LIBRARY_PATH="${MACPORTS_PREFIX}/lib" \ MACPORTS_PREFIX="${MACPORTS_PREFIX}" phase "Running make" make -j2 mkdir -p "${EXE_DIR}/" mkdir -p "${FRAMEWORKS_DIR}/" phase "Copying nxproxy" cp -av "${NXPROXY}" "${EXE_DIR}/" phase "Copying (n)xauth" cp -av "${NXAUTH}" "${EXE_DIR}/nxauth" phase "Copying misc resources" typeset cur_res_file for cur_res_file in ${RESOURCE_FILES[@]}; do cp -av "${TOP_DIR}/res/${cur_res_file}" "${RESOURCES_DIR}/" done phase "Copying PulseAudio" for cur_binary in ${PULSEAUDIO_BINARIES_FULL[@]}; do cp -av "${cur_binary}" "${EXE_DIR}/" done typeset intermediate_lib_dir="" for cur_binary in ${PULSEAUDIO_LIBRARIES_FULL[@]}; do set -x intermediate_lib_dir="$(lazy_canonical_path "$(dirname "${cur_binary}")/")" intermediate_lib_dir="${intermediate_lib_dir##"$(lazy_canonical_path "${MACPORTS_PREFIX}/lib/")"}" mkdir -p "${FRAMEWORKS_DIR}/${intermediate_lib_dir}/" cp -av "${cur_binary}" "${FRAMEWORKS_DIR}/${intermediate_lib_dir}/" set +x done if [ "${BUNDLE}" = "1" ]; then phase "Bundling nxproxy" dylibbundler \ --fix-file "${EXE_DIR}/nxproxy" \ --bundle-deps \ --dest-dir "${FRAMEWORKS_DIR}/" \ --install-path "@executable_path/../Frameworks/" \ --create-dir phase "Bundling (n)xauth" dylibbundler \ --fix-file "${EXE_DIR}/nxauth" \ --bundle-deps \ --dest-dir "${FRAMEWORKS_DIR}/" \ --install-path "@executable_path/../Frameworks/" \ --create-dir phase "Bundling PulseAudio" typeset cur_binary_name="" for cur_binary in ${PULSEAUDIO_BINARIES_FULL[@]}; do if [ ! -L "${cur_binary}" ]; then cur_binary_name="$(basename "${cur_binary}")" dylibbundler \ --fix-file "${EXE_DIR}/${cur_binary_name}" \ --bundle-deps \ --dest-dir "${FRAMEWORKS_DIR}/" \ --install-path "@executable_path/../Frameworks/" \ --create-dir \ --overwrite-files fi done typeset intermediate_lib_dir="" for cur_binary in ${PULSEAUDIO_LIBRARIES_FULL[@]}; do intermediate_lib_dir="$(lazy_canonical_path "$(dirname "${cur_binary}")/")" intermediate_lib_dir="${intermediate_lib_dir##"$(lazy_canonical_path "${MACPORTS_PREFIX}/lib/")"}" if [ ! -L "${cur_binary}" ]; then cur_binary_name="$(basename "${cur_binary}")" echo "Handling ${cur_binary} => ${intermediate_lib_dir}/${cur_binary_name}." typeset nesting_level="$(get_nesting_level "${intermediate_lib_dir}")" dylibbundler \ --fix-file "${FRAMEWORKS_DIR}/${intermediate_lib_dir}/${cur_binary_name}" \ --bundle-deps \ --dest-dir "${FRAMEWORKS_DIR}/${intermediate_lib_dir}" \ --install-path "@executable_path/$(repeat_str "../" "${nesting_level}")../Frameworks/${intermediate_lib_dir}" \ --create-dir \ --overwrite-files fi done phase "Deduplicating PulseAudio libraries and dependencies" typeset -r base_dir="$(lazy_canonical_path "${FRAMEWORKS_DIR}")" typeset -a all_files typeset entry="" while read -r -d '' entry; do typeset sanitized_entry="$(lazy_canonical_path "${entry}")" echo "Adding ${sanitized_entry} to all files" all_files+=( "${sanitized_entry}" ) done < <(gfind "${base_dir}" -type 'f' -print0) typeset -a top_files for entry in "${all_files[@]}"; do typeset relative_path="${entry##"$(lazy_canonical_path "${base_dir}/")"}" typeset tmp_regex='^[^/]+$' echo "Checking ${relative_path} against regex '${tmp_regex}'" if [[ "${relative_path}" =~ ${tmp_regex} ]]; then echo "${relative_path} is top file, adding to array." top_files+=( "${relative_path}" ) fi done typeset -a duplicates for entry in "${all_files[@]}"; do typeset relative_path="${entry##"$(lazy_canonical_path "${base_dir}/")"}" typeset file_name="$(basename "${entry}")" typeset top_entry="" for top_entry in "${top_files[@]}"; do if [ "${top_entry}" != "${relative_path}" ]; then if [ "${file_name}" = "${top_entry}" ]; then echo "Adding duplicate: ${relative_path}" duplicates+=( "${relative_path}" ) fi fi done done echo "duplicates array before:" for entry in "${duplicates[@]}"; do echo "${entry}" done typeset -i i="0" for i in "${!duplicates[@]}"; do entry="${duplicates[${i}]}" typeset special_file_regex="" for special_file_regex in "${special_files_regex[@]}"; do typeset tmp_regex='^'"${special_file_regex}"'$' if [[ "${entry}" =~ ${tmp_regex} ]]; then cp -v "${base_dir}/$(basename "${entry}")" "${base_dir}/$(dirname "${special_file_regex}")/" duplicates[${i}]="$(basename "${entry}")" echo "Renamed ${entry} in duplicates array to ${duplicates[${i}]}" fi done done echo "duplicates array after:" for entry in "${duplicates[@]}"; do echo "${entry}" done for entry in "${duplicates[@]}"; do rm -v "${base_dir}/${entry}" typeset -i i="0" for i in "${!all_files[@]}"; do typeset all_entry="${all_files[${i}]}" typeset relative_path="${all_entry##"$(lazy_canonical_path "${base_dir}/")"}" if [ "${relative_path}" = "${entry}" ]; then unset all_files[${i}] fi done done echo "New value for all_files:" for entry in "${all_files[@]}"; do echo "${entry}" done echo "Duplicates-to-real map:" # Build complementary array to duplicates. typeset -a to_files for entry in "${duplicates[@]}"; do typeset filename="$(basename "${entry}")" typeset all_entry="" for all_entry in "${all_files[@]}"; do typeset all_entry_filename="$(basename "${all_entry}")" if [ -n "${filename}" ] && [ -n "${all_entry_filename}" ]; then if [ "${filename}" = "${all_entry_filename}" ]; then typeset dependency_format="$(lazy_canonical_path "${dependency_base_format}/${all_entry##${base_dir}}")" to_files+=( "${dependency_format}" ) echo "${entry} => ${dependency_format}" # There should be only one entry matching, so we can save a bit of time and break out of the loop. # Even more importantly, we only want one entry for each duplicates entry anyway... break fi else echo "ERROR: empty file name while matching duplicates with non-duplicates." >&2 echo "ERROR: duplicate entry: \"${entry}\"" >&2 echo "ERROR: real entry: \"${all_entry}\"" >&2 exit 1 fi done done # Add binaries to all_files as well. typeset entry="" while read -r -d '' entry; do echo "Adding ${entry} to all files" all_files+=( "${entry}" ) done < <(gfind "${EXE_DIR}" -type 'f' -executable -print0) # Try to fixup files broken by duplicates removal. for all_entry in "${all_files[@]}"; do typeset otool_out="" typeset -i tmp_ret="0" # Newer otool versions terminate with a non-zero return code on errors, # while the classic/legacy versions do not. We need to make sure our # script doesn't terminate just because otool returns a non-zero exit # status. set +e otool_out="$(otool -L "${all_entry}")" tmp_ret="${?}" set -e # If the return code was non-zero, skip this file. # A return code of zero does not automatically mean that otool finished # successfully, so in that case throw otool's stdout into parse_otool_output(). if [ "${tmp_ret}" -eq "0" ]; then # Don't merge the declaration and initialization with the real value assignment. # We need the return value of parse_otool_output(), but running # typeset foo="$(bar)" will give us the return value of typeset, not bar(). typeset dependencies="" set +e dependencies="$(parse_otool_output "${otool_out}")" tmp_ret="${?}" set -e fi if [ "${tmp_ret}" -ne "0" ]; then echo "WARNING: otool returned error for file: ${all_entry}" >&2 echo "WARNING: skipping." >&2 continue fi typeset line="" while read -r line; do #echo "dependency of ${all_entry}: ${line}" typeset duplicate_entry="" typeset -i i="0" for i in "${!duplicates[@]}"; do typeset duplicate_entry="${duplicates[${i}]}" #echo "checking for duplicate ${duplicate_entry}" typeset duplicate_format="$(lazy_canonical_path "${dependency_base_format}/${duplicate_entry}")" if [ -n "${line}" ] && [ -n "${duplicate_format}" ]; then if [ "${line}" = "${duplicate_format}" ]; then install_name_tool -change "${line}" "${to_files[${i}]}" "${all_entry}" fi else echo "ERROR: empty file name while replacing duplicate dependencies." >&2 echo "ERROR: for file ${all_entry}" >&2 echo "ERROR: at dependency ${line}" >&2 echo "ERROR: duplicate entry: \"${duplicate_entry}\"" >&2 echo "ERROR: dependency: \"${line}\"" >&2 exit 1 fi done done <<< "${dependencies}" done phase "Bundling up using macdeployqt" macdeployqt "${APPBUNDLE}" -verbose=2 phase "Creating DMG" ${PKG_DMG} \ --source "${APPBUNDLE}" \ --sourcefile \ --target "${DMGFILE}" \ --volname "x2goclient" \ --verbosity 2 \ --mkdir "/.background" \ --copy "${TOP_DIR}/res/img/png/macinstaller_background.png:/.background" \ --copy "${TOP_DIR}/res/osxbundle/macdmg.DS_Store:/.DS_Store" \ --copy "${TOP_DIR}/LICENSE" \ --copy "${TOP_DIR}/COPYING" \ --symlink "/Applications" \ --icon "${TOP_DIR}/res/img/icons/dmg/x2go-mac-dmg.icns" \ --format "UDBZ" fi popd x2goclient-4.1.2.3/Makefile0000755000000000000000000001414614447111613012276 0ustar #!/usr/bin/make -f TOP_DIR=$(CURDIR) CLIENT_DIR=$(TOP_DIR)/client_build CLIENT_BINARY=$(CLIENT_DIR)/x2goclient SHELL=/bin/bash # Default to Qt 4. # We'll change this to Qt 5 as soon as Qt-4-based platforms go EOL. QT_VERSION ?= 4 INSTALL_DIR ?= install -d -o root -g root -m 755 INSTALL_FILE ?= install -o root -g root -m 644 INSTALL_SYMLINK ?= ln -s -f INSTALL_PROGRAM ?= install -o root -g root -m 755 RM_FILE ?= rm -f RM_DIR ?= rmdir -p --ignore-fail-on-non-empty DESTDIR ?= PREFIX ?= /usr/local ETCDIR ?= /etc/x2go BINDIR ?= $(PREFIX)/bin SHAREDIR ?= $(PREFIX)/share MANDIR ?= $(SHAREDIR)/man ifeq ($(QT_VERSION),4) QMAKE_BINARY ?= qmake-qt4 LRELEASE_BINARY ?= lrelease-qt4 else ifeq ($(QT_VERSION),5) QMAKE_BINARY ?= qmake LRELEASE_BINARY ?= lrelease else $(error Unsupported Qt version "$(QT_VERSION)" passed.) endif endif QMAKE_OPTS ?= LDFLAGS ?= LIBS ?= ##################################################################### # Make sure that variables passed via the command line are not # automatically exported. # # By default, such variables are exported and passed on to child # (make) processes, which means that we will run into trouble if we # pass CXXFLAGS="some value" as an argument to the top-level # make call. Whatever qmake generates will be overridden by this # definition, leading to build failures (since the code expects # macro values to be set in some cases - which won't be the case # for "generic" CXXFLAGS values.) # # Doing that turns out to be somewhat difficult, though. # # While preventing make from passing down *options* is possible via # giving the new make call an empty MAKEFLAGS value and even though # variables defined on the command line are part of MAKEFLAGS, this # doesn't affect implicit exporting of variables (for most # implementations.) # # Even worse, the correct way to this stuff differs from make # implementation to make implementation. # GNU make way. MAKEOVERRIDES = SHELL QT_VERSION INSTALL_DIR INSTALL_FILE INSTALL_SYMLINK INSTALL_PROGRAM RM_FILE RM_DIR DESTDIR PREFIX ETCDIR BINDIR SHAREDIR MANDIR QMAKE_BINARY LRELEASE_BINARY QMAKE_OPTS LDFLAGS LIBS # FreeBSD and NetBSD way. .MAKEOVERRIDES = SHELL QT_VERSION INSTALL_DIR INSTALL_FILE INSTALL_SYMLINK INSTALL_PROGRAM RM_FILE RM_DIR DESTDIR PREFIX ETCDIR BINDIR SHAREDIR MANDIR QMAKE_BINARY LRELEASE_BINARY QMAKE_OPTS LDFLAGS LIBS # OpenBSD way. .MAKEFLAGS = SHELL QT_VERSION INSTALL_DIR INSTALL_FILE INSTALL_SYMLINK INSTALL_PROGRAM RM_FILE RM_DIR DESTDIR PREFIX ETCDIR BINDIR SHAREDIR MANDIR QMAKE_BINARY LRELEASE_BINARY QMAKE_OPTS LDFLAGS LIBS all: build build: build_man $(MAKE) build_client build_client: $(LRELEASE_BINARY) x2goclient.pro mkdir -p $(CLIENT_DIR) && cd $(CLIENT_DIR) && $(QMAKE_BINARY) QMAKE_CFLAGS="${CPPFLAGS} ${CFLAGS}" QMAKE_CXXFLAGS="${CPPFLAGS} ${CXXFLAGS}" QMAKE_LFLAGS="${LDFLAGS}" QMAKE_LIBS="${LIBS}" $(QMAKE_OPTS) ../x2goclient.pro cd $(CLIENT_DIR) && $(MAKE) build_man: ${MAKE} -f Makefile.man2html build clean: clean_client clean_man find . -maxdepth 3 -name '*.o' -exec rm -vf {} + -type f find . -maxdepth 3 -name 'moc_*.cpp' -exec rm -vf {} + -type f find . -maxdepth 3 -name 'ui_*.h' -exec rm -vf {} + -type f find . -maxdepth 3 -name 'qrc_*.cpp' -exec rm -vf {} + -type f find . -maxdepth 3 -name 'x2goclient_*.qm' -exec rm -vf {} + -type f rm -f x2goclient rm -f x2goclient.tag rm -f res/txt/changelog rm -f res/txt/git-info clean_client: rm -fr $(CLIENT_DIR) clean_man: $(MAKE) -f Makefile.man2html clean install: install_client install_man install_client: $(INSTALL_DIR) $(DESTDIR)$(BINDIR)/ $(INSTALL_DIR) $(DESTDIR)$(SHAREDIR)/applications $(INSTALL_DIR) $(DESTDIR)$(SHAREDIR)/mime/packages $(INSTALL_DIR) $(DESTDIR)$(SHAREDIR)/x2goclient/icons $(INSTALL_DIR) $(DESTDIR)$(SHAREDIR)/icons/hicolor/128x128/apps $(INSTALL_DIR) $(DESTDIR)$(SHAREDIR)/icons/hicolor/16x16/apps $(INSTALL_DIR) $(DESTDIR)$(SHAREDIR)/icons/hicolor/64x64/apps $(INSTALL_DIR) $(DESTDIR)$(SHAREDIR)/icons/hicolor/32x32/apps $(INSTALL_PROGRAM) $(CLIENT_DIR)/x2goclient $(DESTDIR)$(BINDIR)/x2goclient $(INSTALL_FILE) desktop/x2goclient.desktop $(DESTDIR)$(SHAREDIR)/applications/x2goclient.desktop $(INSTALL_FILE) mime/x-x2go.xml $(DESTDIR)$(SHAREDIR)/mime/packages/x-x2go.xml $(INSTALL_FILE) res/img/icons/x2goclient.xpm $(DESTDIR)$(SHAREDIR)/x2goclient/icons/x2goclient.xpm $(INSTALL_FILE) res/img/icons/128x128/x2goclient.png $(DESTDIR)$(SHAREDIR)/x2goclient/icons/x2goclient.png $(INSTALL_FILE) res/img/icons/128x128/x2gosession.png $(DESTDIR)$(SHAREDIR)/x2goclient/icons/x2gosession.png $(INSTALL_FILE) res/img/icons/128x128/x2goclient.png $(DESTDIR)$(SHAREDIR)/icons/hicolor/128x128/apps/x2goclient.png $(INSTALL_FILE) res/img/icons/16x16/x2goclient.png $(DESTDIR)$(SHAREDIR)/icons/hicolor/16x16/apps/x2goclient.png $(INSTALL_FILE) res/img/icons/64x64/x2goclient.png $(DESTDIR)$(SHAREDIR)/icons/hicolor/64x64/apps/x2goclient.png $(INSTALL_FILE) res/img/icons/32x32/x2goclient.png $(DESTDIR)$(SHAREDIR)/icons/hicolor/32x32/apps/x2goclient.png install_man: $(INSTALL_DIR) $(DESTDIR)$(MANDIR)/ $(INSTALL_DIR) $(DESTDIR)$(MANDIR)/man1 $(INSTALL_FILE) man/man1/x2goclient.1 $(DESTDIR)$(MANDIR)/man1/x2goclient.1 gzip -f $(DESTDIR)$(MANDIR)/man1/x2goclient.1 uninstall: uninstall_client uninstall_man uninstall_client: $(RM_FILE) $(BINDIR)/x2goclient $(RM_FILE) $(SHAREDIR)/applications/x2goclient.desktop $(RM_FILE) $(SHAREDIR)/x2goclient/icons/x2goclient.png $(RM_FILE) $(SHAREDIR)/x2goclient/icons/x2goclient.xpm $(RM_FILE) $(SHAREDIR)/x2goclient/icons/x2gosession.png $(RM_FILE) $(SHAREDIR)/icons/hicolor/128x128/apps/x2goclient.png $(RM_FILE) $(SHAREDIR)/icons/hicolor/16x16/apps/x2goclient.png $(RM_FILE) $(SHAREDIR)/icons/hicolor/64x64/apps/x2goclient.png $(RM_FILE) $(SHAREDIR)/icons/hicolor/32x32/apps/x2goclient.png $(RM_DIR) $(SHAREDIR)/applications $(RM_DIR) $(SHAREDIR)/x2goclient/icons $(RM_DIR) $(SHAREDIR)/icons/hicolor/128x128/apps $(RM_DIR) $(SHAREDIR)/icons/hicolor/16x16/apps $(RM_DIR) $(SHAREDIR)/icons/hicolor/64x64/apps $(RM_DIR) $(SHAREDIR)/icons/hicolor/32x32/apps uninstall_man: $(RM_FILE) $(MANDIR)/man1/x2goclient.1.gz $(RM_DIR) $(MANDIR)/man1 x2goclient-4.1.2.3/Makefile.docupload0000644000000000000000000000112714447111613014237 0ustar #!/usr/bin/make -f # Makefile.docupload file - for x2goclient # Copyright (C) 2010-2023 by Mike Gabriel , GPLv3 applies to this file VERSION=$(head -n1 debian/changelog | sed 's,.*(\(.*\)).*,\1,' | cut -d"-" -f1) DOC_HOST="code.x2go.org" DOC_PATH="/srv/sites/x2go.org/packages/doc/x2goclient/man/" DOC_USER="x2go-admin" doc: docbuild docupload docbuild: make -f Makefile.man2html build_man2html docupload: ssh -l${DOC_USER} ${DOC_HOST} "{ mkdir -p ${DOC_PATH}; rm -Rfv ${DOC_PATH}/*; }" scp -r .build_man2html/html/* ${DOC_USER}@${DOC_HOST}:${DOC_PATH}/ x2goclient-4.1.2.3/Makefile.man2html0000644000000000000000000000112314447111613014003 0ustar #!/usr/bin/make -f MAN2HTML_BIN = $(shell which man2html) MAN2HTML_SRC = man BUILD_DIR = .build_man2html MAN2HTML_DEST = $(BUILD_DIR)/html man_pages = $(cd $(MAN2HTML_SRC) && find * -type f) all: build build: build_man2html build_man2html: if [ -n "$(MAN2HTML_BIN)" ]; then \ mkdir -p $(MAN2HTML_DEST); \ for man_page in $(man_pages); do mkdir -p $$(dirname $(MAN2HTML_DEST)/$$man_page); done; \ for man_page in $(man_pages); do $(MAN2HTML_BIN) $(MAN2HTML_SRC)/$$man_page > $(MAN2HTML_DEST)/$$man_page.html; done; \ fi clean: clean_man2html clean_man2html: rm -Rf $(BUILD_DIR) x2goclient-4.1.2.3/man/man1/x2goclient.10000644000000000000000000002626014447111613014402 0ustar '\" -*- coding: utf-8 -*- .if \n(.g .ds T< \\FC .if \n(.g .ds T> \\F[\n[.fam]] .de URL \\$2 \(la\\$1\(ra\\$3 .. .if \n(.g .mso www.tmac .TH x2goclient 1 "Jun 2023" "Version 4.1.2.3" "X2Go Client (Qt4)" .SH NAME x2goclient \- Client application to launch server-side X2Go sessions. .SH SYNOPSIS 'nh .fi .ad l \fBx2goclient\fR .SH DESCRIPTION \fBx2goclient\fR is a GUI application for launching server-side X2Go sessions. .PP .SH HELP AND DEBUG OPTIONS \fBx2goclient\fR has the following help and debugging options: .TP \*(T<\fB\-\-help\fR\*(T> Show available command line options. .TP \*(T<\fB\-\-help\-pack\fR\*(T> Show available pack methods and exit. .TP \*(T<\fB\-v, \-\-version\fR\*(T> Output X2Go Client version to stderr. .TP \*(T<\fB\-\-debug\fR\*(T> Enable extensive console output for debugging X2Go Client. .TP \*(T<\fB\-\-changelog\fR\*(T> Show changelog file. .TP \*(T<\fB\-\-git\-info\fR\*(T> Show Git commit history (not available on all X2Go Client builds). .SH GUI OPTIONS The following options can be used for controlling the GUI behaviour: .TP \*(T<\fB\-\-no\-menu\fR\*(T> Hide menu-/toolbar (default: false). .TP \*(T<\fB\-\-maximize\fR\*(T> Start client maximized (default: false). .TP \*(T<\fB\-\-hide\fR\*(T> Hide client (start hidden, default: false). .TP \*(T<\fB\-\-keep\-trayicon\fR\*(T> Always keep the "accelerated X" icon in the system tray. Without this option the default behaviour is: Switch the tray icon to the session's icon on successful session startup/resumption. .TP \*(T<\fB\-\-tray\-icon\fR\*(T> Show tray icon (default: false). This option overrides the global tray icon settings and also forces the tray icon to be shown in hidden X2Go Client mode. .TP \*(T<\fB\-\-hide\-foldersharing\fR\*(T> Hide all elements in X2Go Client GUI that are related to folder sharing. .TP \*(T<\fB\-\-close\-disconnect\fR\*(T> Close X2Go Client after a session got disconnected. .TP \*(T<\fB\-\-client\-ssh\-port\fR\*(T> Local ssh port (for filesystem export, default: 22). .TP \*(T<\fB\-\-autostart=\fR\*(T> Launch by session start in "published applications" mode. This parameter should go along with --session=, where the given session profile should be configured as a session profile of type "Published Applications". .TP \*(T<\fB\-\-support\-menu=\fR\*(T> Add a "Support..." submenu item to X2Go Client's "Help" menu. The support information is provided via a simple HTML file. Example: .sp .if n \{\ .RS 4 .\} .nf \fI

IT-Support for X2Go

DAS-NETZWERKTEAM | Mike Gabriel:
support@das-netzwerkteam.de

Thanks for using X2Go... \fR .fi .if n \{\ .RE .\} .TP \*(T<\fB\-\-background=\fR\*(T> Use a custom/branded background image (SVG format) for X2Go Client's main window (i.e. replace the blue gradient area in X2Go Client by some background of your own (business/workgroup/project). If a directory is given, will randomly pick an SVG file inside of it. .TP \*(T<\fB\-\-branding=\fR\*(T> Use a custom icon (SVG format) for additional branding to replace the default in the lower left corner of X2Go Client's main window. .SH MISCELLANEOUS OPTIONS These options change X2Go Client's behavior globally. Some might not be available on all platforms. .TP \*(T<\fB\-\-xserver-start-limit=\fR\*(T> (Windows-only) Limit the X.Org Server start count to at most tries. Default: \fB3\fR. If \fB\fR is zero or a negative number, no limit is imposed. The limits for \fB\fR are platform dependent. If the passed value is out of bounds, X2Go Client falls back to the default value. .SH SESSION PROFILE DEFAULTS You can set certain defaults for session profiles via command line switches using the following options: .TP \*(T<\fB\-\-user\fR\*(T> Pre-selection of user at client startup (LDAP mode only). .TP \*(T<\fB\-\-command=\fR\*(T> Default command for session startup. .TP \*(T<\fB\-\-ssh\-port\fR\*(T> Use this default TCP/IP port for connection (default: 22). .TP \*(T<\fB\-\-ssh\-key\fR\*(T> Use this SSH private key file by default. .TP \*(T<\fB\-\-autologin\fR\*(T> By default, search for standard SSH key file names or try using an SSH agent. .TP \*(T<\fB\-\-link\fR\*(T> Set default link type (modem,isdn,adsl,wan or lan, default: adsl). .TP \*(T<\fB\-\-pack\fR\*(T> Set default pack method (default: '16m-jpeg'). .TP \*(T<\fB\-\-quality\fR\*(T> Set default image quality(0-9, default: 9). .TP \*(T<\fB\-\-set\-kbd\fR\*(T> Overwrite current keyboard settings, no override by default. .TP \*(T<\fB\-\-kbd\-layout\fR\*(T> Set keyboard layout (default: 'de'). .TP \*(T<\fB\-\-kbd\-type\fR\*(T> Set keyboard type (default: pc105/us, depend on our clients language setup, though). .TP \*(T<\fB\-\-clipboard=\fR\*(T> Set default clipboard mode. .TP \*(T<\fB\-\-geometry=x|fullscreen\fR\*(T> Set default geometry, default '800x600'. .TP \*(T<\fB\-\-dpi=\fR\*(T> set DPI of X2Go Agent to , default set to same as local display. .TP \*(T<\fB\-\-sound\fR\*(T> Activate sound for session, not enabled by default. .TP \*(T<\fB\-\-sound\-system\fR\*(T> Which soundsystem to use: arts, esd, pulse (default: pulse). .TP \*(T<\fB\-\-xinerama\fR\*(T> Use Xinerama by default. .TP \*(T<\fB\-\-session\-icon=<128x128px\-icon\-png\-file>\fR\*(T> Use a custom session icon by default. .SH THIN CLIENT OPTIONS The following command line options are primarily interesting if \fBx2goclient\fR is used as a login manager on X2Go thin clients. .TP \*(T<\fB\-\-thinclient\fR\*(T> Let X2Go Client run without window manager. .TP \*(T<\fB\-\-sessionid=\fR\*(T> Pre-selection of a session profile (by its session profile ID) at client startup. .TP \*(T<\fB\-\-session=\fR\*(T> Pre-selection of a session profile (by its session profile name) at client startup. .TP \*(T<\fB\-\-no\-session\-edit\fR\*(T> Disable session editing. .TP \*(T<\fB\-\-pgp\-card\fR\*(T> Use openPGP Card authentication (default: false). .TP \*(T<\fB\-\-external\-login=\fR\*(T> Authenticate via SMART card, path to login notification file. .TP \*(T<\fB\-\-add\-to\-known\-hosts\fR\*(T> Add DSA/RSA host key fingerprint to .ssh/known_hosts in case of "authenticity of server can't be established". .TP \*(T<\fB\-\-read\-exports\-from\fR\*(T> Specifies a directory where some external mechanism (e.g. script) can notify \fBx2goclient\fR on new block devices (CD/DVDs, USB sticks, etc.). .TP \*(T<\fB\-\-haltbt\fR\*(T> Show a "Shutdown" button in the top left corner of X2Go Client. When pressed, X2Go Client will create the file $HOME/.halt. An external script has to watch for this file and trigger a thinclient shutdown once it appears. .SH PORTABLE OPTIONS X2Go Client can be installed on a USB-Flashdrive as a portable applications. If installed that way, the following options support the portable setup of X2Go Client: .TP \*(T<\fB\-\-portable\fR\*(T> Start X2Go Client in "portable" mode. This implies... (TODO). .TP \*(T<\fB\-\-home=\fR\*(T> Set the users home directory. This is the directory where X2Go Client will store settings and cache files. .TP \*(T<\fB\-\-session\-conf=\fR\*(T> Path to alternative session profile config (default: $HOME/.x2goclient/sessions). .TP \*(T<\fB\-\-clean\-all\-files\fR\*(T> In portable mode, X2Go Client removes several directories it has created (and probably directories you don't want to have removed on a normal system): \fI$HOME/.ssh $HOME/ssh $HOME/.x2go\fR If \fI\-\-clean\-all\-files\fR is used on the command line, also the directory containing the configuration files of X2Go Client gets removed: \fI$HOME/.x2goclient\fR .SH BROKER OPTIONS In case you want to retrieve \fBx2goclient\fR session profiles from an X2Go Session Broker use the following options: .TP \*(T<\fB\-\-broker\-url=\fR\*(T> Specify the of the X2Go Session Broker. X2Go Client can access http:// and ssh:// style URLs. Syntax of for HTTP brokerage: http(s)://:@:/path/to/broker Syntax of for SSH brokerage: ssh://:@:/usr/bin/x2gobroker (or any executable that provides the broker via SSH). .TP \*(T<\fB\-\-broker\-cacertfile=\fR\*(T> Specify a special (self-signed) root-CACert file that shall get used when connecting to an X2Go Session Broker via https (SSL). .TP \*(T<\fB\-\-broker\-noauth\fR\*(T> The X2Go Session Broker is accessible without authentication. .TP \*(T<\fB\-\-broker\-krblogin\fR\*(T> Login to X2Go Session Broker via GSSAPI. Only supported with ssh:// broker URLs. .TP \*(T<\fB\-\-auth\-id=\fR\*(T> Use this for authenticating against the X2Go Session Broker. This option mostly makes sense together with \fI--broker-autologin\fR or \fI--broker-ssh-key\fR. .TP \*(T<\fB\-\-broker\-autologin\fR\*(T> For SSH based X2Go Session Brokers. If an SSH agent is available or default key files exist then try those for authentication against the X2Go Session Broker. .TP \*(T<\fB\-\-broker\-autologoff\fR\*(T> Enforce re-authentication against X2Go Session Broker after a session has been suspended or terminated. .TP \*(T<\fB\-\-broker\-ssh\-key=\fR\*(T> For SSH based X2Go Session Brokers. Full path to a valid SSH private key file. .TP \*(T<\fB\-\-broker\-name=\fR\*(T> Sets the broker name to display in X2Go Client. This parameter is optional. .TP \*(T<\fB\-\-connectivity\-test\fR\*(T> Run a connectivity test against X2Go Session Broker. Not supported by all broker implementations. .TP \*(T<\fB\-\-change\-broker\-pass\fR\*(T> Send a change-password request to an X2Go Session Broker. Not supported by all broker implementations. .TP \*(T<\fB\-\-broker\-noauth\-with\-session\-username\fR\*(T> Informs the broker to use the username you entered for X2Go Server authentication when selecting a server/session. Only has functionality if --broker-noauth is used. .TP \*(T<\fB\-\-broker\-use\-creds\-for\-session\fR\*(T> Use broker credentials as session user/password credentials when using broker mode with broker authentication. Currently only affects direct RDP sessions. .TP \*(T<\fB\-\-broker\-logoutbt\fR\*(T> Show a "Logout" button in the top left corner of X2Go Client. When logged in to a broker, pressing this button X2Go Client lets you login to the broker again. .SH LDAP OPTIONS (deprecated) NOTE: LDAP support won't be continued in X2Go Client 2 (next generation of X2Go Client). .PP A slightly different approach than X2Go Client's LDAP functionality is available via the X2Go Session Brokerage feature. .PP In case you want to control \fBx2goclient\fR via an LDAP server use the following options: .TP \*(T<\fB\-\-ldap=\fR\*(T> Start with LDAP support (disabled by default). Example: --ldap=ldapserver:389:o=organization,c=de .TP \*(T<\fB\-\-ldap1=\fR\*(T> Failover LDAP URI No. 1. .TP \*(T<\fB\-\-ldap2=\fR\*(T> Failover LDAP URI No. 2. .TP \*(T<\fB\-\-ldap\-printing\fR\*(T> Allow client side printing in LDAP mode. .PP .SH AUTHOR This manual has been written by Mike Gabriel for the X2Go project (https://www.x2go.org). x2goclient-4.1.2.3/mime/x-x2go.xml0000644000000000000000000000046114447111613013423 0ustar X2Go session file x2goclient-4.1.2.3/nsis/gpl.txt0000644000000000000000000004326114447111613013132 0ustar 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 Library 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. x2goclient-4.1.2.3/nsis/icons/win-install.ico0000644000000000000000000000206614447111613015655 0ustar (& N( """"""333333"""""!33333!0!0333!00!00!03!0333!0!33333!( @4DD0DCd36ff34D3D06ff40eeee6ff4C333306ff4D06ff4D06ff4D0""D00VVVS33""D03330330""03@4d3C3""03C30""3DDDDDC306ffDfffffc306ff3333334303C33D`3C044D3Ff3DDDDC406CD@330DffffC030d4ff@3336C06@ff@6C0`3306C0060`ff6C060`f6C060`6C060``6C060`ff6C0606C063333336C06DDDDDDDC0fffffffc04DDDDDDF033333330??x2goclient-4.1.2.3/nsis/icons/win-uninstall.ico0000644000000000000000000000206614447111613016220 0ustar (& N( wxwwwGwDwwxwpwxwx{{w{w ( @wwxwxxwwxwwwwxwwwwxwwwwxLGwwwwxLDwwwwxLDGwwwxLDDwwwxLD@wwwxD@wwwx@wwwxxw@wwwxwwwwxxwpwwwxpwwpxpwwwwwwwwwwwwwwwpwpp sp{s? ?x2goclient-4.1.2.3/nsis/make_installer.sh0000755000000000000000000000010314447111613015124 0ustar #!/bin/bash upx x2goclient/x2goclient.exe makensis x2goclient.nsi x2goclient-4.1.2.3/nsis/x2goclient.nsi0000644000000000000000000002761114447111613014401 0ustar ;NSIS Modern User Interface ;Multilingual Example Script ;Written by Joost Verburg !include "MUI.nsh" !include "FileFunc.nsh" !include "Sections.nsh" !insertmacro Locate ;-------------------------------- ;General RequestExecutionLevel admin !define VERSION "X2GOCLIENT_VERSION" !define FILENAME "x2goclient-${VERSION}-setup.exe" Name "x2goclient ${VERSION}" Caption "x2goclient ${VERSION}" OutFile "${FILENAME}" !define MUI_ICON icons\win-install.ico !define MUI_UNICON icons\win-uninstall.ico ;Default installation folder InstallDir "$PROGRAMFILES\x2goclient" ;NSIS 2.46 defaults to zlib. Setting this reduces the size of a default ;(no fonts) build by about 24% SetCompressor /SOLID lzma ;Get installation folder from registry if available InstallDirRegKey HKLM "Software\x2goclient" "" ;-------------------------------- ;Check if user is admin Section userInfo::getAccountType pop $0 strCmp $0 "Admin" +3 messageBox MB_OK $(ADM_RIGHT) abort SectionEnd ;-------------------------------- ;Interface Settings !define MUI_ABORTWARNING ;-------------------------------- ;Language Selection Dialog Settings ;Remember the installer language !define MUI_LANGDLL_REGISTRY_ROOT "HKLM" !define MUI_LANGDLL_REGISTRY_KEY "Software\x2goclient" !define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language" ;------------------------------ ;Variables Var STARTMENU_FOLDER Var MUI_TEMP !define UNINSTALL_REGKEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\x2goclient" !define UNINSTALL_DISPLAYNAME "X2Go Client for Windows" !define UNINSTALL_PUBLISHER "X2Go Project" !define UNINSTALL_DISPLAYVERSION ${VERSION} !define UNINSTALL_URL "https://www.x2go.org" ;-------------------------------- ;Pages !insertmacro MUI_PAGE_LICENSE "gpl.txt" !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY !define MUI_STARTMENUPAGE_DEFAULTFOLDER "X2Go Client for Windows" !define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKLM" !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\x2goclient" !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" !insertmacro MUI_PAGE_STARTMENU "Application" $STARTMENU_FOLDER !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_PAGE_FINISH ;-------------------------------- ;Languages !insertmacro MUI_LANGUAGE "English" !insertmacro MUI_LANGUAGE "German" !insertmacro MUI_LANGUAGE "Russian" ;------------------------------ ; File Properties ; This gets truncated to a.b.c.d VIProductVersion "${UNINSTALL_DISPLAYVERSION}" VIAddVersionKey /LANG=${LANG_ENGLISH} "InternalName" "x2goclient" VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductName" "${UNINSTALL_DISPLAYNAME}" VIAddVersionKey /LANG=${LANG_ENGLISH} "FileDescription" "Installer for ${UNINSTALL_DISPLAYNAME}" VIAddVersionKey /LANG=${LANG_ENGLISH} "CompanyName" "${UNINSTALL_PUBLISHER}" VIAddVersionKey /LANG=${LANG_ENGLISH} "OriginalFilename" "${FILENAME}" ; Due to NSIS "Feature Request" #270, this gets overriden by VIProductVersion VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "${UNINSTALL_DISPLAYVERSION}" VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductVersion" "${UNINSTALL_DISPLAYVERSION}" VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "GPL-2+" ;-------------------------------- ;Reserve Files ;If you are using solid compression, files that are required before ;the actual installation should be stored first in the data block, ;because this will make your installer start faster. !insertmacro MUI_RESERVEFILE_LANGDLL ;-------------------------------- ;Installer Sections ;"Recommended" is the default because it is specified 1st. InstType "Recommended" InstType "Full" InstType "Minimal" Section "X2Go Client (required)" base SetShellVarContext all SectionIn RO SetOutPath "$INSTDIR" File /a /x x2goclient.debug.exe /x pageant.exe /x puttygen.exe "x2goclient\*.*" File /r "x2goclient\pulse" File /r /x "fonts" "x2goclient\VcXsrv" File "..\res\audio\startup.wav" ;Store installation folder WriteRegStr HKLM "Software\x2goclient" "" $INSTDIR ;Create uninstaller WriteUninstaller "$INSTDIR\Uninstall.exe" !insertmacro MUI_STARTMENU_WRITE_BEGIN Application CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER" CreateShortCut "$INSTDIR\X2Go Client.lnk" "$INSTDIR\x2goclient.exe" CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\X2Go Client.lnk" "$INSTDIR\x2goclient.exe" ;Cleanup previous icon names (prior to X2Go Client 4.0.1.2) Delete "$INSTDIR\X2GoClient.lnk" Delete "$SMPROGRAMS\$STARTMENU_FOLDER\X2GoClient.lnk" Delete "$DESKTOP\X2GoClient.lnk" !insertmacro MUI_STARTMENU_WRITE_END ;Add uninstall information to Add/Remove Programs ;https://nsis.sourceforge.net/Add_uninstall_information_to_Add/Remove_Programs WriteRegStr HKLM ${UNINSTALL_REGKEY} "InstallLocation" "$INSTDIR" WriteRegStr HKLM ${UNINSTALL_REGKEY} "UninstallString" "$\"$INSTDIR\Uninstall.exe$\"" WriteRegStr HKLM ${UNINSTALL_REGKEY} "DisplayIcon" "$INSTDIR\x2goclient.exe" WriteRegStr HKLM ${UNINSTALL_REGKEY} "DisplayName" "${UNINSTALL_DISPLAYNAME}" WriteRegStr HKLM ${UNINSTALL_REGKEY} "Publisher" "${UNINSTALL_PUBLISHER}" WriteRegStr HKLM ${UNINSTALL_REGKEY} "DisplayVersion" "${UNINSTALL_DISPLAYVERSION}" WriteRegStr HKLM ${UNINSTALL_REGKEY} "HelpLink" "${UNINSTALL_URL}" WriteRegStr HKLM ${UNINSTALL_REGKEY} "URLInfoAbout" "${UNINSTALL_URL}" WriteRegStr HKLM ${UNINSTALL_REGKEY} "URLUpdateInfo" "${UNINSTALL_URL}" WriteRegDWORD HKLM ${UNINSTALL_REGKEY} "NoModify" 1 WriteRegDWORD HKLM ${UNINSTALL_REGKEY} "NoRepair" 1 SectionEnd ;x2goclient bug 108 fix SectionGroup "Fonts" fonts ;Empirical testing shows that "misc" fixes compatibility for the majority ;of applications with font compatibility programs. ;So lets make "misc" be part of "recommended", and therefore the default. ; ;As of VcXsrv-xp 1.14.3.2 ;misc is 412 files at 6.80 MB (7.94 MB on disk) Section "misc" fonts-misc SectionIn 1 2 SetOutPath "$INSTDIR\VcXsrv\fonts\" File "x2goclient\VcXsrv\fonts\fonts.conf" File /r "x2goclient\VcXsrv\fonts\misc" SectionEnd ;As of VcXsrv-xp 1.14.3.2 ;75dpi is 1,897 files at 10.7 MB (15.6 MB on disk) Section "75dpi" fonts-75dpi SectionIn 2 SetOutPath "$INSTDIR\VcXsrv\fonts\" File "x2goclient\VcXsrv\fonts\fonts.conf" File /r "x2goclient\VcXsrv\fonts\75dpi" SectionEnd ;As of VcXsrv-xp 1.14.3.2 ;100dpi is 1,897 files at 12.3 MB (16.8 MB on disk) Section "100dpi" fonts-100dpi SectionIn 2 SetOutPath "$INSTDIR\VcXsrv\fonts\" File "x2goclient\VcXsrv\fonts\fonts.conf" File /r "x2goclient\VcXsrv\fonts\100dpi" SectionEnd ;As of VcXsrv-xp 1.14.3.2 ;everything else is 466 files at 12.8MB (13.8 MB on disk) Section "others" fonts-others SectionIn 2 SetOutPath "$INSTDIR\VcXsrv\fonts\" File "x2goclient\VcXsrv\fonts\fonts.conf" File /r "x2goclient\VcXsrv\fonts\cyrillic" File /r "x2goclient\VcXsrv\fonts\encodings" File /r "x2goclient\VcXsrv\fonts\OTF" File /r "x2goclient\VcXsrv\fonts\Speedo" File /r "x2goclient\VcXsrv\fonts\terminus-font" File /r "x2goclient\VcXsrv\fonts\TTF" File /r "x2goclient\VcXsrv\fonts\Type1" SectionEnd SectionGroupEnd SectionGroup "PuTTY Key Utilities" puttykeyutils Section "Pageant" pageant SectionIn 1 2 SetOutPath "$INSTDIR" File "x2goclient\pageant.exe" CreateShortCut "$INSTDIR\Pageant.lnk" "$INSTDIR\pageant.exe" CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Pageant.lnk" "$INSTDIR\pageant.exe" SectionEnd Section "PuTTYgen" puttygen SectionIn 1 2 SetOutPath "$INSTDIR" File "x2goclient\puttygen.exe" CreateShortCut "$INSTDIR\PuTTYgen.lnk" "$INSTDIR\puttygen.exe" CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\PuTTYgen.lnk" "$INSTDIR\puttygen.exe" SectionEnd SectionGroupEnd Section "Desktop Shortcut" desktopshortcut SectionIn 1 2 # When you run SetOutPath,you set the "Start in" dir for the shortcut. # This "Start in" dir must exist for the shortcut to work. SetOutPath "$INSTDIR" CreateShortCut "$DESKTOP\X2Go Client.lnk" "$INSTDIR\x2goclient.exe" SectionEnd Section "Debug Build" debugbuild SectionIn 2 SetOutPath "$INSTDIR" File "x2goclient\x2goclient.debug.exe" CreateShortCut "$INSTDIR\X2Go Client (Debug).lnk" "$INSTDIR\x2goclient.debug.exe" "--debug" CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\X2Go Client (Debug).lnk" "$INSTDIR\x2goclient.debug.exe" "--debug" SectionEnd Section -EstimatedSize SectionIn RO ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2 IntFmt $0 "0x%08X" $0 WriteRegDWORD HKLM ${UNINSTALL_REGKEY} "EstimatedSize" "$0" SectionEnd ;------------------------------------------- ;Descriptions LangString ADM_RIGHT ${LANG_ENGLISH} "You have to be Administrator on this computer to install X2Go Client" LangString ADM_RIGHT ${LANG_GERMAN} "Sie brauchen Administratorenrechte um X2Go Client zu installieren" LangString ADM_RIGHT ${LANG_RUSSIAN} " , X2Go Client, " LangString DESC_base ${LANG_ENGLISH} "The regular build of X2Go Client and all its required dependencies" LangString DESC_fonts ${LANG_ENGLISH} "Fonts are required for certain legacy/proprietary apps to run properly." LangString DESC_puttykeyutils ${LANG_ENGLISH} "Utilities from the PuTTY project for SSH public key authentication" LangString DESC_pageant ${LANG_ENGLISH} "PuTTY SSH authentication agent. Use this to load private keys into RAM so that you are not repeatedly prompted for the key's password." LangString DESC_puttygen ${LANG_ENGLISH} "PuTTY key generator && converter. Note that keys for Pageant must be in PuTTY format, but key files on disk must be in OpenSSH format." LangString DESC_desktopshortcut ${LANG_ENGLISH} "Desktop shortcut" LangString DESC_debugbuild ${LANG_ENGLISH} "A build of X2Go Client with console debugging output. Install and use this if you are reporting a bug." !Insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${base} $(DESC_base) !insertmacro MUI_DESCRIPTION_TEXT ${fonts} $(DESC_fonts) !insertmacro MUI_DESCRIPTION_TEXT ${fonts-misc} $(DESC_fonts) !insertmacro MUI_DESCRIPTION_TEXT ${fonts-75dpi} $(DESC_fonts) !insertmacro MUI_DESCRIPTION_TEXT ${fonts-100dpi} $(DESC_fonts) !insertmacro MUI_DESCRIPTION_TEXT ${fonts-others} $(DESC_fonts) !insertmacro MUI_DESCRIPTION_TEXT ${puttykeyutils} $(DESC_puttykeyutils) !insertmacro MUI_DESCRIPTION_TEXT ${pageant} $(DESC_pageant) !insertmacro MUI_DESCRIPTION_TEXT ${puttygen} $(DESC_puttygen) !insertmacro MUI_DESCRIPTION_TEXT ${desktopshortcut} $(DESC_desktopshortcut) !insertmacro MUI_DESCRIPTION_TEXT ${debugbuild} $(DESC_debugbuild) !Insertmacro MUI_FUNCTION_DESCRIPTION_END ;-------------------------------- ;Installer Functions Function .onInit !insertmacro MUI_LANGDLL_DISPLAY FunctionEnd ;-------------------------------- ;Uninstaller Section Section "Uninstall" SetShellVarContext all !insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk" Delete "$SMPROGRAMS\$MUI_TEMP\X2Go Client.lnk" Delete "$SMPROGRAMS\$MUI_TEMP\X2Go Client (Debug).lnk" Delete "$SMPROGRAMS\$MUI_TEMP\Pageant.lnk" Delete "$SMPROGRAMS\$MUI_TEMP\PuTTYgen.lnk" Delete "$DESKTOP\X2Go Client.lnk" StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP" startMenuDeleteLoop: ClearErrors RMDir $MUI_TEMP GetFullPathName $MUI_TEMP "$MUI_TEMP\.." IfErrors startMenuDeleteLoopDone StrCmp $MUI_TEMP $SMPROGRAMS startMenuDeleteLoopDone startMenuDeleteLoop startMenuDeleteLoopDone: RMDir /r "$INSTDIR" DeleteRegKey HKLM "Software\x2goclient" DeleteRegKey HKLM "${UNINSTALL_REGKEY}" SectionEnd ;-------------------------------- ;Uninstaller Functions Function un.onInit !insertmacro MUI_UNGETLANGUAGE FunctionEnd x2goclient-4.1.2.3/pkg-dmg0000755000000000000000000014426514447111613012115 0ustar #!/usr/bin/perl # ***** BEGIN LICENSE BLOCK ***** # Version: MPL 1.1/GPL 2.0/LGPL 2.1 # # The contents of this file are subject to the Mozilla Public License Version # 1.1 (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # https://www.mozilla.org/MPL/ # # Software distributed under the License is distributed on an "AS IS" basis, # WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License # for the specific language governing rights and limitations under the # License. # # The Original Code is pkg-dmg, a Mac OS X disk image (.dmg) packager # # The Initial Developer of the Original Code is # Mark Mentovai . # Portions created by the Initial Developer are Copyright (C) 2005 # the Initial Developer. All Rights Reserved. # # Contributor(s): # # Alternatively, the contents of this file may be used under the terms of # either the GNU General Public License Version 2 or later (the "GPL"), or # the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), # in which case the provisions of the GPL or the LGPL are applicable instead # of those above. If you wish to allow use of your version of this file only # under the terms of either the GPL or the LGPL, and not to allow others to # use your version of this file under the terms of the MPL, indicate your # decision by deleting the provisions above and replace them with the notice # and other provisions required by the GPL or the LGPL. If you do not delete # the provisions above, a recipient may use your version of this file under # the terms of any one of the MPL, the GPL or the LGPL. # # ***** END LICENSE BLOCK ***** use strict; use warnings; =pod =head1 NAME B - Mac OS X disk image (.dmg) packager =head1 SYNOPSIS B B<--source> I B<--target> I [B<--format> I] [B<--volname> I] [B<--tempdir> I] [B<--mkdir> I] [B<--copy> I[:I]] [B<--symlink> I[:I]] [B<--license> I] [B<--resource> I] [B<--icon> I] [B<--attribute> I:I[:I...] [B<--idme>] [B<--sourcefile>] [B<--verbosity> I] [B<--dry-run>] =head1 DESCRIPTION I takes a directory identified by I and transforms it into a disk image stored as I. The disk image will occupy the least space possible for its format, or the least space that the authors have been able to figure out how to achieve. =head1 OPTIONS =over 5 ==item B<--source> I Identifies the directory that will be packaged up. This directory is not touched, a copy will be made in a temporary directory for staging purposes. See B<--tempdir>. ==item B<--target> I The disk image to create. If it exists and is not in use, it will be overwritten. If I already contains a suitable extension, it will be used unmodified. If no extension is present, or the extension is incorrect for the selected format, the proper extension will be added. See B<--format>. ==item B<--format> I The format to create the disk image in. Valid values for I are: - UDZO - zlib-compressed, read-only; extension I<.dmg> - UDBZ - bzip2-compressed, read-only; extension I<.dmg>; create and use on 10.4 ("Tiger") and later only - UDRO - uncompressed, read-only; extension I<.dmg> - UDRW - uncompressed, read-write; extension I<.dmg> - UDSP - uncompressed, read-write, sparse; extension I<.sparseimage> UDZO is the default format. See L for a description of these formats. =item B<--volname> I The name of the volume in the disk image. If not specified, I defaults to the name of the source directory from B<--source>. =item B<--tempdir> I A temporary directory to stage intermediate files in. I must have enough space available to accommodate twice the size of the files being packaged. If not specified, defaults to the same directory that the I is to be placed in. B will remove any temporary files it places in I. =item B<--mkdir> I Specifies a directory that should be created in the disk image. I and any ancestor directories will be created. This is useful in conjunction with B<--copy>, when copying files to directories that may not exist in I. B<--mkdir> may appear multiple times. =item B<--copy> I[:I] Additional files to copy into the disk image. If I is specified, I is copied to the location I identifies, otherwise, I is copied to the root of the new volume. B<--copy> provides a way to package up a I by adding files to it without modifying the original I. B<--copy> may appear multiple times. This option is useful for adding .DS_Store files and window backgrounds to disk images. =item B<--symlink> I[:I] Like B<--copy>, but allows symlinks to point out of the volume. Empty symlink destinations are interpreted as "like the source path, but inside the dmg" This option is useful for adding symlinks to external resources, e.g. to /Applications. =item B<--license> I A plain text file containing a license agreement to be displayed before the disk image is mounted. English is the only supported language. To include license agreements in other languages, in multiple languages, or to use formatted text, prepare a resource and use L<--resource>. =item B<--resource> I A resource file to merge into I. If I is UDZO, UDBZ, or UDRO, the disk image will be flattened to a single-fork file that contains the resource but may be freely transferred without any special encodings. I must be in a format suitable for L. See L for a description of the format, and L for a discussion on flattened disk images. B<--resource> may appear multiple times. This option is useful for adding license agreements and other messages to disk images. =item B<--icon> I Specifies an I file that will be used as the icon for the root of the volume. This file will be copied to the new volume and the custom icon attribute will be set on the root folder. =item B<--attribute> I:I[:I...] Sets the attributes of I to the attribute list in I. See L =item B<--idme> Enable IDME to make the disk image "Internet-enabled." The first time the image is mounted, if IDME processing is enabled on the system, the contents of the image will be copied out of the image and the image will be placed in the trash with IDME disabled. =item B<--sourcefile> If this option is present, I is treated as a file, and is placed as a file within the volume's root folder. Without this option, I is treated as the volume root itself. =item B<--verbosity> I Adjusts the level of loudness of B. The possible values for I are: 0 - Only error messages are displayed. 1 - Print error messages and command invocations. 2 - Print everything, including command output. The default I is 2. =item B<--dry-run> When specified, the commands that would be executed are printed, without actually executing them. When commands depend on the output of previous commands, dummy values are displayed. =back =head1 NON-OPTIONS =over 5 =item Resource forks aren't copied. =item The root folder of the created volume is designated as the folder to open when the volume is mounted. See L. =item All files in the volume are set to be world-readable, only writable by the owner, and world-executable when appropriate. All other permissions bits are cleared. =item When possible, disk images are created without any partition tables. This is what L refers to as I<-layout NONE>, and saves a handful of kilobytes. The alternative, I, contains a partition table that is not terribly handy on disk images that are not intended to represent any physical disk. =item Read-write images are created with journaling off. Any read-write image created by this tool is expected to be transient, and the goal of this tool is to create images which consume a minimum of space. =back =head1 EXAMPLE pkg-dmg --source /Applications/DeerPark.app --target ~/DeerPark.dmg --sourcefile --volname DeerPark --icon ~/DeerPark.icns --mkdir /.background --copy DeerParkBackground.png:/.background/background.png --copy DeerParkDSStore:/.DS_Store --symlink /Applications:"/Drag to here" =head1 REQUIREMENTS I has been tested with Mac OS X releases 10.2 ("Jaguar") through 10.4 ("Tiger"). Certain adjustments to behavior are made depending on the host system's release. Mac OS X 10.3 ("Panther") or later are recommended. =head1 LICENSE MPL 1.1/GPL 2.0/LGPL 2.1. Your choice. =head1 AUTHOR Mark Mentovai =head1 SEE ALSO L, L, L, L, L, L, L =cut use Fcntl; use POSIX; use Getopt::Long; sub argumentEscape(@); sub cleanupDie($); sub command(@); sub commandInternal($@); sub commandInternalVerbosity($$@); sub commandOutput(@); sub commandOutputVerbosity($@); sub commandVerbosity($@); sub copyFiles($@); sub diskImageMaker($$$$$$$$); sub giveExtension($$); sub hdidMountImage($@); sub isFormatReadOnly($); sub licenseMaker($$); sub pathSplit($); sub setAttributes($@); sub trapSignal($); sub usage(); # Variables used as globals my(@gCleanup, %gConfig, $gDarwinMajor, $gDryRun, $gVerbosity); # Use the commands by name if they're expected to be in the user's # $PATH (/bin:/sbin:/usr/bin:/usr/sbin). Otherwise, go by absolute # path. These may be overridden with --config. %gConfig = ('cmd_bless' => 'bless', 'cmd_chmod' => 'chmod', 'cmd_diskutil' => 'diskutil', 'cmd_du' => 'du', 'cmd_hdid' => 'hdid', 'cmd_hdiutil' => 'hdiutil', 'cmd_mkdir' => 'mkdir', 'cmd_mktemp' => 'mktemp', 'cmd_Rez' => '/usr/bin/Rez', 'cmd_rm' => 'rm', 'cmd_rsync' => 'rsync', 'cmd_SetFile' => '/usr/bin/SetFile', # create_directly indicates whether hdiutil create supports # -srcfolder and -srcdevice. It does on >= 10.3 (Panther). # This is fixed up for earlier systems below. If false, # hdiutil create is used to create empty disk images that # are manually filled. 'create_directly' => 1, # If hdiutil attach -mountpoint exists, use it to avoid # mounting disk images in the default /Volumes. This reduces # the likelihood that someone will notice a mounted image and # interfere with it. Only available on >= 10.3 (Panther), # fixed up for earlier systems below. # # This is presently turned off for all systems, because there # is an infrequent synchronization problem during ejection. # diskutil eject might return before the image is actually # unmounted. If pkg-dmg then attempts to clean up its # temporary directory, it could remove items from a read-write # disk image or attempt to remove items from a read-only disk # image (or a read-only item from a read-write image) and fail, # causing pkg-dmg to abort. This problem is experienced # under Tiger, which appears to eject asynchronously where # previous systems treated it as a synchronous operation. # Using hdiutil attach -mountpoint didn't always keep images # from showing up on the desktop anyway. 'hdiutil_mountpoint' => 0, # hdiutil makehybrid results in optimized disk images that # consume less space and mount more quickly. Use it when # it's available, but that's only on >= 10.3 (Panther). # If false, hdiutil create is used instead. Fixed up for # earlier systems below. 'makehybrid' => 1, # hdiutil create doesn't allow specifying a folder to open # at volume mount time, so those images are mounted and # their root folders made holy with bless -openfolder. But # only on >= 10.3 (Panther). Earlier systems are out of luck. # Even on Panther, bless refuses to run unless root. # Fixed up below. 'openfolder_bless' => 1, # It's possible to save a few more kilobytes by including the # partition only without any partition table in the image. # This is a good idea on any system, so turn this option off. # # Except it's buggy. "-layout NONE" seems to be creating # disk images with more data than just the partition table # stripped out. You might wind up losing the end of the # filesystem - the last file (or several) might be incomplete. 'partition_table' => 1, # To create a partition table-less image from something # created by makehybrid, the hybrid image needs to be # mounted and a new image made from the device associated # with the relevant partition. This requires >= 10.4 # (Tiger), presumably because earlier systems have # problems creating images from devices themselves attached # to images. If this is false, makehybrid images will # have partition tables, regardless of the partition_table # setting. Fixed up for earlier systems below. 'recursive_access' => 1); # --verbosity $gVerbosity = 2; # --dry-run $gDryRun = 0; # %gConfig fix-ups based on features and bugs present in certain releases. my($ignore, $uname_r, $uname_s); ($uname_s, $ignore, $uname_r, $ignore, $ignore) = POSIX::uname(); if($uname_s eq 'Darwin') { ($gDarwinMajor, $ignore) = split(/\./, $uname_r, 2); # $major is the Darwin major release, which for our purposes, is 4 higher # than the interesting digit in a Mac OS X release. if($gDarwinMajor <= 6) { # <= 10.2 (Jaguar) # hdiutil create does not support -srcfolder or -srcdevice $gConfig{'create_directly'} = 0; # hdiutil attach does not support -mountpoint $gConfig{'hdiutil_mountpoint'} = 0; # hdiutil mkhybrid does not exist $gConfig{'makehybrid'} = 0; } if($gDarwinMajor <= 7) { # <= 10.3 (Panther) # Can't mount a disk image and then make a disk image from the device $gConfig{'recursive_access'} = 0; # bless does not support -openfolder on 10.2 (Jaguar) and must run # as root under 10.3 (Panther) $gConfig{'openfolder_bless'} = 0; } } else { # If it's not Mac OS X, just assume all of those good features are # available. They're not, but things will fail long before they # have a chance to make a difference. # # Now, if someone wanted to document some of these private formats... print STDERR ($0.": warning, not running on Mac OS X, ". "this could be interesting.\n"); } # Non-global variables used in Getopt my(@attributes, @copyFiles, @createSymlinks, $iconFile, $idme, $licenseFile, @makeDirs, $outputFormat, @resourceFiles, $sourceFile, $sourceFolder, $targetImage, $tempDir, $volumeName); # --format $outputFormat = 'UDZO'; # --idme $idme = 0; # --sourcefile $sourceFile = 0; # Leaving this might screw up the Apple tools. delete $ENV{'NEXT_ROOT'}; # This script can get pretty messy, so trap a few signals. $SIG{'INT'} = \&trapSignal; $SIG{'HUP'} = \&trapSignal; $SIG{'TERM'} = \&trapSignal; Getopt::Long::Configure('pass_through'); GetOptions('source=s' => \$sourceFolder, 'target=s' => \$targetImage, 'volname=s' => \$volumeName, 'format=s' => \$outputFormat, 'tempdir=s' => \$tempDir, 'mkdir=s' => \@makeDirs, 'copy=s' => \@copyFiles, 'symlink=s' => \@createSymlinks, 'license=s' => \$licenseFile, 'resource=s' => \@resourceFiles, 'icon=s' => \$iconFile, 'attribute=s' => \@attributes, 'idme' => \$idme, 'sourcefile' => \$sourceFile, 'verbosity=i' => \$gVerbosity, 'dry-run' => \$gDryRun, 'config=s' => \%gConfig); # "hidden" option not in usage() if(@ARGV) { # All arguments are parsed by Getopt usage(); exit(1); } if($gVerbosity<0 || $gVerbosity>2) { usage(); exit(1); } if(!defined($sourceFolder) || $sourceFolder eq '' || !defined($targetImage) || $targetImage eq '') { # --source and --target are required arguments usage(); exit(1); } # Make sure $sourceFolder doesn't contain trailing slashes. It messes with # rsync. while(substr($sourceFolder, -1) eq '/') { chop($sourceFolder); } if(!defined($volumeName)) { # Default volumeName is the name of the source directory. my(@components); @components = pathSplit($sourceFolder); $volumeName = pop(@components); } my(@tempDirComponents, $targetImageFilename); @tempDirComponents = pathSplit($targetImage); $targetImageFilename = pop(@tempDirComponents); if(defined($tempDir)) { @tempDirComponents = pathSplit($tempDir); } else { # Default tempDir is the same directory as what is specified for # targetImage $tempDir = join('/', @tempDirComponents); } # Ensure that the path of the target image has a suitable extension. If # it didn't, hdiutil would add one, and we wouldn't be able to find the # file. # # Note that $targetImageFilename is not being reset. This is because it's # used to build other names below, and we don't need to be adding all sorts # of extra unnecessary extensions to the name. my($originalTargetImage, $requiredExtension); $originalTargetImage = $targetImage; if($outputFormat eq 'UDSP') { $requiredExtension = '.sparseimage'; } else { $requiredExtension = '.dmg'; } $targetImage = giveExtension($originalTargetImage, $requiredExtension); if($targetImage ne $originalTargetImage) { print STDERR ($0.": warning: target image extension is being added\n"); print STDERR (' The new filename is '. giveExtension($targetImageFilename,$requiredExtension)."\n"); } # Make a temporary directory in $tempDir for our own nefarious purposes. my(@output, $tempSubdir, $tempSubdirTemplate); $tempSubdirTemplate=join('/', @tempDirComponents, 'pkg-dmg.'.$$.'.XXXXXXXX'); if(!(@output = commandOutput($gConfig{'cmd_mktemp'}, '-d', $tempSubdirTemplate)) || $#output != 0) { cleanupDie('mktemp failed'); } if($gDryRun) { (@output)=($tempSubdirTemplate); } ($tempSubdir) = @output; push(@gCleanup, sub {commandVerbosity(0, $gConfig{'cmd_rm'}, '-rf', $tempSubdir);}); my($tempMount, $tempRoot, @tempsToMake); $tempRoot = $tempSubdir.'/stage'; $tempMount = $tempSubdir.'/mount'; push(@tempsToMake, $tempRoot); if($gConfig{'hdiutil_mountpoint'}) { push(@tempsToMake, $tempMount); } if(command($gConfig{'cmd_mkdir'}, @tempsToMake) != 0) { cleanupDie('mkdir tempRoot/tempMount failed'); } # This cleanup object is not strictly necessary, because $tempRoot is inside # of $tempSubdir, but the rest of the script relies on this object being # on the cleanup stack and expects to remove it. push(@gCleanup, sub {commandVerbosity(0, $gConfig{'cmd_rm'}, '-rf', $tempRoot);}); # If $sourceFile is true, it means that $sourceFolder is to be treated as # a file and placed as a file within the volume root, as opposed to being # treated as the volume root itself. rsync will do this by default, if no # trailing '/' is present. With a trailing '/', $sourceFolder becomes # $tempRoot, instead of becoming an entry in $tempRoot. if(command($gConfig{'cmd_rsync'}, '-aC', '--include', '*.so', '--copy-unsafe-links', $sourceFolder.($sourceFile?'':'/'),$tempRoot) != 0) { cleanupDie('rsync failed'); } if(@makeDirs) { my($makeDir, @tempDirsToMake); foreach $makeDir (@makeDirs) { if($makeDir =~ /^\//) { push(@tempDirsToMake, $tempRoot.$makeDir); } else { push(@tempDirsToMake, $tempRoot.'/'.$makeDir); } } if(command($gConfig{'cmd_mkdir'}, '-p', @tempDirsToMake) != 0) { cleanupDie('mkdir failed'); } } # copy files and/or create symlinks copyFiles($tempRoot, 'copy', @copyFiles); copyFiles($tempRoot, 'symlink', @createSymlinks); if($gConfig{'create_directly'}) { # If create_directly is false, the contents will be rsynced into a # disk image and they would lose their attributes. setAttributes($tempRoot, @attributes); } if(defined($iconFile)) { if(command($gConfig{'cmd_rsync'}, '-aC', '--include', '*.so', '--copy-unsafe-links', $iconFile, $tempRoot.'/.VolumeIcon.icns') != 0) { cleanupDie('rsync failed for volume icon'); } # It's pointless to set the attributes of the root when diskutil create # -srcfolder is being used. In that case, the attributes will be set # later, after the image is already created. if(isFormatReadOnly($outputFormat) && (command($gConfig{'cmd_SetFile'}, '-a', 'C', $tempRoot) != 0)) { cleanupDie('SetFile failed'); } } if(command($gConfig{'cmd_chmod'}, '-R', 'a+rX,a-st,u+w,go-w', $tempRoot) != 0) { cleanupDie('chmod failed'); } my($unflattenable); if(isFormatReadOnly($outputFormat)) { $unflattenable = 1; } else { $unflattenable = 0; } diskImageMaker($tempRoot, $targetImage, $outputFormat, $volumeName, $tempSubdir, $tempMount, $targetImageFilename, defined($iconFile)); if(defined($licenseFile) && $licenseFile ne '') { my($licenseResource); $licenseResource = $tempSubdir.'/license.r'; if(!licenseMaker($licenseFile, $licenseResource)) { cleanupDie('licenseMaker failed'); } push(@resourceFiles, $licenseResource); # Don't add a cleanup object because licenseResource is in tempSubdir. } if(@resourceFiles) { # Add resources, such as a license agreement. # Only unflatten read-only and compressed images. It's not supported # on other image times. if($unflattenable && (command($gConfig{'cmd_hdiutil'}, 'unflatten', $targetImage)) != 0) { cleanupDie('hdiutil unflatten failed'); } # Don't push flatten onto the cleanup stack. If we fail now, we'll be # removing $targetImage anyway. # Type definitions come from Carbon.r. if(command($gConfig{'cmd_Rez'}, 'Carbon.r', @resourceFiles, '-a', '-o', $targetImage) != 0) { cleanupDie('Rez failed'); } # Flatten. This merges the resource fork into the data fork, so no # special encoding is needed to transfer the file. if($unflattenable && (command($gConfig{'cmd_hdiutil'}, 'flatten', $targetImage)) != 0) { cleanupDie('hdiutil flatten failed'); } } # $tempSubdir is no longer needed. It's buried on the stack below the # rm of the fresh image file. Splice in this fashion is equivalent to # pop-save, pop, push-save. splice(@gCleanup, -2, 1); # No need to remove licenseResource separately, it's in tempSubdir. if(command($gConfig{'cmd_rm'}, '-rf', $tempSubdir) != 0) { cleanupDie('rm -rf tempSubdir failed'); } if($idme) { if(command($gConfig{'cmd_hdiutil'}, 'internet-enable', '-yes', $targetImage) != 0) { cleanupDie('hdiutil internet-enable failed'); } } # Done. exit(0); # argumentEscape(@arguments) # # Takes a list of @arguments and makes them shell-safe. sub argumentEscape(@) { my(@arguments); @arguments = @_; my($argument, @argumentsOut); foreach $argument (@arguments) { $argument =~ s%([^A-Za-z0-9_\-/.=+,])%\\$1%g; push(@argumentsOut, $argument); } return @argumentsOut; } # cleanupDie($message) # # Displays $message as an error message, and then runs through the # @gCleanup stack, performing any cleanup operations needed before # exiting. Does not return, exits with exit status 1. sub cleanupDie($) { my($message); ($message) = @_; print STDERR ($0.': '.$message.(@gCleanup?' (cleaning up)':'')."\n"); while(@gCleanup) { my($subroutine); $subroutine = pop(@gCleanup); &$subroutine; } exit(1); } # command(@arguments) # # Runs the specified command at the verbosity level defined by $gVerbosity. # Returns nonzero on failure, returning the exit status if appropriate. # Discards command output. sub command(@) { my(@arguments); @arguments = @_; return commandVerbosity($gVerbosity,@arguments); } # commandInternal($command, @arguments) # # Runs the specified internal command at the verbosity level defined by # $gVerbosity. # Returns zero(!) on failure, because commandInternal is supposed to be a # direct replacement for the Perl system call wrappers, which, unlike shell # commands and C equivalent system calls, return true (instead of 0) to # indicate success. sub commandInternal($@) { my(@arguments, $command); ($command, @arguments) = @_; return commandInternalVerbosity($gVerbosity, $command, @arguments); } # commandInternalVerbosity($verbosity, $command, @arguments) # # Run an internal command, printing a bogus command invocation message if # $verbosity is true. # # If $command is unlink: # Removes the files specified by @arguments. Wraps unlink. # # If $command is symlink: # Creates the symlink specified by @arguments. Wraps symlink. sub commandInternalVerbosity($$@) { my(@arguments, $command, $verbosity); ($verbosity, $command, @arguments) = @_; if($command eq 'unlink') { if($verbosity || $gDryRun) { print(join(' ', 'rm', '-f', argumentEscape(@arguments))."\n"); } if($gDryRun) { return $#arguments+1; } return unlink(@arguments); } elsif($command eq 'symlink') { if($verbosity || $gDryRun) { print(join(' ', 'ln', '-s', argumentEscape(@arguments))."\n"); } if($gDryRun) { return 1; } my($source, $target); ($source, $target) = @arguments; return symlink($source, $target); } } # commandOutput(@arguments) # # Runs the specified command at the verbosity level defined by $gVerbosity. # Output is returned in an array of lines. undef is returned on failure. # The exit status is available in $?. sub commandOutput(@) { my(@arguments); @arguments = @_; return commandOutputVerbosity($gVerbosity, @arguments); } # commandOutputVerbosity($verbosity, @arguments) # # Runs the specified command at the verbosity level defined by the # $verbosity argument. Output is returned in an array of lines. undef is # returned on failure. The exit status is available in $?. # # If an error occurs in fork or exec, an error message is printed to # stderr and undef is returned. # # If $verbosity is 0, the command invocation is not printed, and its # stdout is not echoed back to stdout. # # If $verbosity is 1, the command invocation is printed. # # If $verbosity is 2, the command invocation is printed and the output # from stdout is echoed back to stdout. # # Regardless of $verbosity, stderr is left connected. sub commandOutputVerbosity($@) { my(@arguments, $verbosity); ($verbosity, @arguments) = @_; my($pid); if($verbosity || $gDryRun) { print(join(' ', argumentEscape(@arguments))."\n"); } if($gDryRun) { return(1); } if (!defined($pid = open(*COMMAND, '-|'))) { printf STDERR ($0.': fork: '.$!."\n"); return undef; } elsif ($pid) { # parent my(@lines); while(!eof(*COMMAND)) { my($line); chop($line = ); if($verbosity > 1) { print($line."\n"); } push(@lines, $line); } close(*COMMAND); if ($? == -1) { printf STDERR ($0.': fork: '.$!."\n"); return undef; } elsif ($? & 127) { printf STDERR ($0.': exited on signal '.($? & 127). ($? & 128 ? ', core dumped' : '')."\n"); return undef; } return @lines; } else { # child; this form of exec is immune to shell games if(!exec {$arguments[0]} (@arguments)) { printf STDERR ($0.': exec: '.$!."\n"); exit(-1); } } } # commandVerbosity($verbosity, @arguments) # # Runs the specified command at the verbosity level defined by the # $verbosity argument. Returns nonzero on failure, returning the exit # status if appropriate. Discards command output. sub commandVerbosity($@) { my(@arguments, $verbosity); ($verbosity, @arguments) = @_; if(!defined(commandOutputVerbosity($verbosity, @arguments))) { return -1; } return $?; } # copyFiles($tempRoot, $method, @arguments) # # Copies files or create symlinks in the disk image. # See --copy and --symlink descriptions for details. # If $method is 'copy', @arguments are interpreted as source:target, if $method # is 'symlink', @arguments are interpreted as symlink:target. sub copyFiles($@) { my(@fileList, $method, $tempRoot); ($tempRoot, $method, @fileList) = @_; my($file, $isSymlink); $isSymlink = ($method eq 'symlink'); foreach $file (@fileList) { my($source, $target); ($source, $target) = split(/:/, $file); if(!defined($target) and $isSymlink) { # empty symlink targets would result in an invalid target and fail, # but they shall be interpreted as "like source path, but inside dmg" $target = $source; } if(!defined($target)) { $target = $tempRoot; } elsif($target =~ /^\//) { $target = $tempRoot.$target; } else { $target = $tempRoot.'/'.$target; } my($success); if($isSymlink) { $success = commandInternal('symlink', $source, $target); } else { $success = !command($gConfig{'cmd_rsync'}, '-aC', '--include', '*.so', '--copy-unsafe-links', $source, $target); } if(!$success) { cleanupDie('copyFiles failed for method '.$method); } } } # diskImageMaker($source, $destination, $format, $name, $tempDir, $tempMount, # $baseName, $setRootIcon) # # Creates a disk image in $destination of format $format corresponding to the # source directory $source. $name is the volume name. $tempDir is a good # place to write temporary files, which should be empty (aside from the other # things that this script might create there, like stage and mount). # $tempMount is a mount point for temporary disk images. $baseName is the # name of the disk image, and is presently unused. $setRootIcon is true if # a volume icon was added to the staged $source and indicates that the # custom volume icon bit on the volume root needs to be set. sub diskImageMaker($$$$$$$$) { my($baseName, $destination, $format, $name, $setRootIcon, $source, $tempDir, $tempMount); ($source, $destination, $format, $name, $tempDir, $tempMount, $baseName, $setRootIcon) = @_; if(isFormatReadOnly($format)) { my($uncompressedImage); if($gConfig{'makehybrid'}) { my($hybridImage); $hybridImage = giveExtension($tempDir.'/hybrid', '.dmg'); if(command($gConfig{'cmd_hdiutil'}, 'makehybrid', '-hfs', '-hfs-volume-name', $name, ($gConfig{'openfolder_bless'} ? ('-hfs-openfolder', $source) : ()), '-ov', $source, '-o', $hybridImage) != 0) { cleanupDie('hdiutil makehybrid failed'); } $uncompressedImage = $hybridImage; # $source is no longer needed and will be removed before anything # else can fail. splice in this form is the same as pop/push. splice(@gCleanup, -1, 1, sub {commandInternalVerbosity(0, 'unlink', $hybridImage);}); if(command($gConfig{'cmd_rm'}, '-rf', $source) != 0) { cleanupDie('rm -rf failed'); } if(!$gConfig{'partition_table'} && $gConfig{'recursive_access'}) { # Even if we do want to create disk images without partition tables, # it's impossible unless recursive_access is set. my($rootDevice, $partitionDevice, $partitionMountPoint); if(!(($rootDevice, $partitionDevice, $partitionMountPoint) = hdidMountImage($tempMount, '-readonly', $hybridImage))) { cleanupDie('hdid mount failed'); } push(@gCleanup, sub {commandVerbosity(0, $gConfig{'cmd_diskutil'}, 'eject', $rootDevice);}); my($udrwImage); $udrwImage = giveExtension($tempDir.'/udrw', '.dmg'); if(command($gConfig{'cmd_hdiutil'}, 'create', '-format', 'UDRW', '-ov', '-srcdevice', $partitionDevice, $udrwImage) != 0) { cleanupDie('hdiutil create failed'); } $uncompressedImage = $udrwImage; # Going to eject before anything else can fail. Get the eject off # the stack. pop(@gCleanup); # $hybridImage will be removed soon, but until then, it needs to # stay on the cleanup stack. It needs to wait until after # ejection. $udrwImage is staying around. Make it appear as # though it's been done before $hybridImage. # # splice in this form is the same as popping one element to # @tempCleanup and pushing the subroutine. my(@tempCleanup); @tempCleanup = splice(@gCleanup, -1, 1, sub {commandInternalVerbosity(0, 'unlink', $udrwImage);}); push(@gCleanup, @tempCleanup); if(command($gConfig{'cmd_diskutil'}, 'eject', $rootDevice) != 0) { cleanupDie('diskutil eject failed'); } # Pop unlink of $uncompressedImage pop(@gCleanup); if(commandInternal('unlink', $hybridImage) != 1) { cleanupDie('unlink hybridImage failed: '.$!); } } } else { # makehybrid is not available, fall back to making a UDRW and # converting to a compressed image. It ought to be possible to # create a compressed image directly, but those come out far too # large (journaling?) and need to be read-write to fix up the # volume icon anyway. Luckily, we can take advantage of a single # call back into this function. my($udrwImage); $udrwImage = giveExtension($tempDir.'/udrw', '.dmg'); diskImageMaker($source, $udrwImage, 'UDRW', $name, $tempDir, $tempMount, $baseName, $setRootIcon); # The call back into diskImageMaker already removed $source. $uncompressedImage = $udrwImage; } # The uncompressed disk image is now in its final form. Compress it. # Jaguar doesn't support hdiutil convert -ov, but it always allows # overwriting. # bzip2-compressed UDBZ images can only be created and mounted on 10.4 # and later. The bzip2-level imagekey is only effective when creating # images in 10.5. In 10.4, bzip2-level is harmlessly ignored, and the # default value of 1 is always used. if(command($gConfig{'cmd_hdiutil'}, 'convert', '-format', $format, ($format eq 'UDZO' ? ('-imagekey', 'zlib-level=9') : ()), ($format eq 'UDBZ' ? ('-imagekey', 'bzip2-level=9') : ()), (defined($gDarwinMajor) && $gDarwinMajor <= 6 ? () : ('-ov')), $uncompressedImage, '-o', $destination) != 0) { cleanupDie('hdiutil convert failed'); } # $uncompressedImage is going to be unlinked before anything else can # fail. splice in this form is the same as pop/push. splice(@gCleanup, -1, 1, sub {commandInternalVerbosity(0, 'unlink', $destination);}); if(commandInternal('unlink', $uncompressedImage) != 1) { cleanupDie('unlink uncompressedImage failed: '.$!); } # At this point, the only thing that the compressed block has added to # the cleanup stack is the removal of $destination. $source has already # been removed, and its cleanup entry has been removed as well. } elsif($format eq 'UDRW' || $format eq 'UDSP') { my(@extraArguments); if(!$gConfig{'partition_table'}) { @extraArguments = ('-layout', 'NONE'); } if($gConfig{'create_directly'}) { # Use -fs HFS+ to suppress the journal. if(command($gConfig{'cmd_hdiutil'}, 'create', '-format', $format, @extraArguments, '-fs', 'HFS+', '-volname', $name, '-ov', '-srcfolder', $source, $destination) != 0) { cleanupDie('hdiutil create failed'); } # $source is no longer needed and will be removed before anything # else can fail. splice in this form is the same as pop/push. splice(@gCleanup, -1, 1, sub {commandInternalVerbosity(0, 'unlink', $destination);}); if(command($gConfig{'cmd_rm'}, '-rf', $source) != 0) { cleanupDie('rm -rf failed'); } } else { # hdiutil create does not support -srcfolder or -srcdevice, it only # knows how to create blank images. Figure out how large an image # is needed, create it, and fill it. This is needed for Jaguar. # Use native block size for hdiutil create -sectors. delete $ENV{'BLOCKSIZE'}; my(@duOutput, $ignore, $sizeBlocks, $sizeOverhead, $sizeTotal, $type); if(!(@output = commandOutput($gConfig{'cmd_du'}, '-s', $tempRoot)) || $? != 0) { cleanupDie('du failed'); } ($sizeBlocks, $ignore) = split(' ', $output[0], 2); # The filesystem itself takes up 152 blocks of its own blocks for the # filesystem up to 8192 blocks, plus 64 blocks for every additional # 4096 blocks or portion thereof. $sizeOverhead = 152 + 64 * POSIX::ceil( (($sizeBlocks - 8192) > 0) ? (($sizeBlocks - 8192) / (4096 - 64)) : 0); # The number of blocks must be divisible by 8. my($mod); if($mod = ($sizeOverhead % 8)) { $sizeOverhead += 8 - $mod; } # sectors is taken as the size of a disk, not a filesystem, so the # partition table eats into it. if($gConfig{'partition_table'}) { $sizeOverhead += 80; } # That was hard. Leave some breathing room anyway. Use 1024 sectors # (512kB). These read-write images wouldn't be useful if they didn't # have at least a little free space. $sizeTotal = $sizeBlocks + $sizeOverhead + 1024; # Minimum sizes - these numbers are larger on Jaguar than on later # systems. Just use the Jaguar numbers, since it's unlikely to wind # up here on any other release. if($gConfig{'partition_table'} && $sizeTotal < 8272) { $sizeTotal = 8272; } if(!$gConfig{'partition_table'} && $sizeTotal < 8192) { $sizeTotal = 8192; } # hdiutil create without -srcfolder or -srcdevice will not accept # -format. It uses -type. Fortunately, the two supported formats # here map directly to the only two supported types. if ($format eq 'UDSP') { $type = 'SPARSE'; } else { $type = 'UDIF'; } if(command($gConfig{'cmd_hdiutil'}, 'create', '-type', $type, @extraArguments, '-fs', 'HFS+', '-volname', $name, '-ov', '-sectors', $sizeTotal, $destination) != 0) { cleanupDie('hdiutil create failed'); } push(@gCleanup, sub {commandInternalVerbosity(0, 'unlink', $destination);}); # The rsync will occur shortly. } my($mounted, $rootDevice, $partitionDevice, $partitionMountPoint); $mounted=0; if(!$gConfig{'create_directly'} || $gConfig{'openfolder_bless'} || $setRootIcon) { # The disk image only needs to be mounted if: # create_directly is false, because the content needs to be copied # openfolder_bless is true, because bless -openfolder needs to run # setRootIcon is true, because the root needs its attributes set. if(!(($rootDevice, $partitionDevice, $partitionMountPoint) = hdidMountImage($tempMount, $destination))) { cleanupDie('hdid mount failed'); } $mounted=1; push(@gCleanup, sub {commandVerbosity(0, $gConfig{'cmd_diskutil'}, 'eject', $rootDevice);}); } if(!$gConfig{'create_directly'}) { # Couldn't create and copy directly in one fell swoop. Now that # the volume is mounted, copy the files. --copy-unsafe-links is # unnecessary since it was used to copy everything to the staging # area. There can be no more unsafe links. if(command($gConfig{'cmd_rsync'}, '-aC', '--include', '*.so', $source.'/',$partitionMountPoint) != 0) { cleanupDie('rsync to new volume failed'); } # We need to get the rm -rf of $source off the stack, because it's # being cleaned up here. There are two items now on top of it: # removing the target image and, above that, ejecting it. Splice it # out. my(@tempCleanup); @tempCleanup = splice(@gCleanup, -2); # The next splice is the same as popping once and pushing @tempCleanup. splice(@gCleanup, -1, 1, @tempCleanup); if(command($gConfig{'cmd_rm'}, '-rf', $source) != 0) { cleanupDie('rm -rf failed'); } } if($gConfig{'openfolder_bless'}) { # On Tiger, the bless docs say to use --openfolder, but only # --openfolder is accepted on Panther. Tiger takes it with a single # dash too. Jaguar is out of luck. if(command($gConfig{'cmd_bless'}, '-openfolder', $partitionMountPoint) != 0) { cleanupDie('bless failed'); } } setAttributes($partitionMountPoint, @attributes); if($setRootIcon) { # When "hdiutil create -srcfolder" is used, the root folder's # attributes are not copied to the new volume. Fix up. if(command($gConfig{'cmd_SetFile'}, '-a', 'C', $partitionMountPoint) != 0) { cleanupDie('SetFile failed'); } } if($mounted) { # Pop diskutil eject pop(@gCleanup); if(command($gConfig{'cmd_diskutil'}, 'eject', $rootDevice) != 0) { cleanupDie('diskutil eject failed'); } } # End of UDRW/UDSP section. At this point, $source has been removed # and its cleanup entry has been removed from the stack. } else { cleanupDie('unrecognized format'); print STDERR ($0.": unrecognized format\n"); exit(1); } } # giveExtension($file, $extension) # # If $file does not end in $extension, $extension is added. The new # filename is returned. sub giveExtension($$) { my($extension, $file); ($file, $extension) = @_; if(substr($file, -length($extension)) ne $extension) { return $file.$extension; } return $file; } # hdidMountImage($mountPoint, @arguments) # # Runs the hdid command with arguments specified by @arguments. # @arguments may be a single-element array containing the name of the # disk image to mount. Returns a three-element array, with elements # corresponding to: # - The root device of the mounted image, suitable for ejection # - The device corresponding to the mounted partition # - The mounted partition's mount point # # If running on a system that supports easy mounting at points outside # of the default /Volumes with hdiutil attach, it is used instead of hdid, # and $mountPoint is used as the mount point. # # The root device will differ from the partition device when the disk # image contains a partition table, otherwise, they will be identical. # # If hdid fails, undef is returned. sub hdidMountImage($@) { my(@arguments, @command, $mountPoint); ($mountPoint, @arguments) = @_; my(@output); if($gConfig{'hdiutil_mountpoint'}) { @command=($gConfig{'cmd_hdiutil'}, 'attach', @arguments, '-mountpoint', $mountPoint); } else { @command=($gConfig{'cmd_hdid'}, @arguments); } if(!(@output = commandOutput(@command)) || $? != 0) { return undef; } if($gDryRun) { return('/dev/diskX','/dev/diskXsY','/Volumes/'.$volumeName); } my($line, $restOfLine, $rootDevice); foreach $line (@output) { my($device, $mountpoint); if($line !~ /^\/dev\//) { # Consider only lines that correspond to /dev entries next; } ($device, $restOfLine) = split(' ', $line, 2); if(!defined($rootDevice) || $rootDevice eq '') { # If this is the first device seen, it's the root device to be # used for ejection. Keep it. $rootDevice = $device; } if($restOfLine =~ /(\/.*)/) { # The first partition with a mount point is the interesting one. It's # usually Apple_HFS and usually the last one in the list, but beware of # the possibility of other filesystem types and the Apple_Free partition. # If the disk image contains no partition table, the partition will not # have a type, so look for the mount point by looking for a slash. $mountpoint = $1; return($rootDevice, $device, $mountpoint); } } # No mount point? This is bad. If there's a root device, eject it. if(defined($rootDevice) && $rootDevice ne '') { # Failing anyway, so don't care about failure commandVerbosity(0, $gConfig{'cmd_diskutil'}, 'eject', $rootDevice); } return undef; } # isFormatReadOnly($format) # # Returns true if $format corresponds to a read-only disk image format. # Returns false otherwise. sub isFormatReadOnly($) { my($format); ($format) = @_; return $format eq 'UDZO' || $format eq 'UDBZ' || $format eq 'UDRO'; } # licenseMaker($text, $resource) # # Takes a plain text file at path $text and creates a license agreement # resource containing the text at path $license. English-only, and # no special formatting. This is the bare-bones stuff. For more # intricate license agreements, create your own resource. # # ftp://ftp.apple.com/developer/Development_Kits/SLAs_for_UDIFs_1.0.dmg sub licenseMaker($$) { my($resource, $text); ($text, $resource) = @_; if(!sysopen(*TEXT, $text, O_RDONLY)) { print STDERR ($0.': licenseMaker: sysopen text: '.$!."\n"); return 0; } if(!sysopen(*RESOURCE, $resource, O_WRONLY|O_CREAT|O_EXCL)) { print STDERR ($0.': licenseMaker: sysopen resource: '.$!."\n"); return 0; } print RESOURCE << '__EOT__'; // See /System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h for language IDs. data 'LPic' (5000) { // Default language ID, 0 = English $"0000" // Number of entries in list $"0001" // Entry 1 // Language ID, 0 = English $"0000" // Resource ID, 0 = STR#/TEXT/styl 5000 $"0000" // Multibyte language, 0 = no $"0000" }; resource 'STR#' (5000, "English") { { // Language (unused?) = English "English", // Agree "Agree", // Disagree "Disagree", __EOT__ # This stuff needs double-quotes for interpolations to work. print RESOURCE (" // Print, ellipsis is 0xC9\n"); print RESOURCE (" \"Print\xc9\",\n"); print RESOURCE (" // Save As, ellipsis is 0xC9\n"); print RESOURCE (" \"Save As\xc9\",\n"); print RESOURCE (' // Descriptive text, curly quotes are 0xD2 and 0xD3'. "\n"); print RESOURCE (' "If you agree to the terms of this license '. "agreement, click \xd2Agree\xd3 to access the software. If you ". "do not agree, press \xd2Disagree.\xd3\"\n"); print RESOURCE << '__EOT__'; }; }; // Beware of 1024(?) byte (character?) line length limitation. Split up long // lines. // If straight quotes are used ("), remember to escape them (\"). // Newline is \n, to leave a blank line, use two of them. // 0xD2 and 0xD3 are curly double-quotes ("), 0xD4 and 0xD5 are curly // single quotes ('), 0xD5 is also the apostrophe. data 'TEXT' (5000, "English") { __EOT__ while(!eof(*TEXT)) { my($line); chop($line = ); while(defined($line)) { my($chunk); # Rez doesn't care for lines longer than (1024?) characters. Split # at less than half of that limit, in case everything needs to be # backwhacked. if(length($line)>500) { $chunk = substr($line, 0, 500); $line = substr($line, 500); } else { $chunk = $line; $line = undef; } if(length($chunk) > 0) { # Unsafe characters are the double-quote (") and backslash (\), escape # them with backslashes. $chunk =~ s/(["\\])/\\$1/g; print RESOURCE ' "'.$chunk.'"'."\n"; } } print RESOURCE ' "\n"'."\n"; } close(*TEXT); print RESOURCE << '__EOT__'; }; data 'styl' (5000, "English") { // Number of styles following = 1 $"0001" // Style 1. This is used to display the first two lines in bold text. // Start character = 0 $"0000 0000" // Height = 16 $"0010" // Ascent = 12 $"000C" // Font family = 1024 (Lucida Grande) $"0400" // Style bitfield, 0x1=bold 0x2=italic 0x4=underline 0x8=outline // 0x10=shadow 0x20=condensed 0x40=extended $"00" // Style, unused? $"02" // Size = 12 point $"000C" // Color, RGB $"0000 0000 0000" }; __EOT__ close(*RESOURCE); return 1; } # pathSplit($pathname) # # Splits $pathname into an array of path components. sub pathSplit($) { my($pathname); ($pathname) = @_; return split(/\//, $pathname); } # setAttributes($root, @attributeList) # # @attributeList is an array, each element of which must be in the form # :. is a list of attributes, per SetFile. is a file # which is taken as relative to $root (even if it appears as an absolute # path.) SetFile is called to set the attributes on each file in # @attributeList. sub setAttributes($@) { my(@attributes, $root); ($root, @attributes) = @_; my($attribute); foreach $attribute (@attributes) { my($attrList, $file, @fileList, @fixedFileList); ($attrList, @fileList) = split(/:/, $attribute); if(!defined($attrList) || !@fileList) { cleanupDie('--attribute requires :'); } @fixedFileList=(); foreach $file (@fileList) { if($file =~ /^\//) { push(@fixedFileList, $root.$file); } else { push(@fixedFileList, $root.'/'.$file); } } if(command($gConfig{'cmd_SetFile'}, '-a', $attrList, @fixedFileList)) { cleanupDie('SetFile failed to set attributes'); } } return; } sub trapSignal($) { my($signalName); ($signalName) = @_; cleanupDie('exiting on SIG'.$signalName); } sub usage() { print STDERR ( "usage: pkg-dmg --source \n". " --target \n". " [--format ] (default: UDZO)\n". " [--volname ] (default: same name as source)\n". " [--tempdir ] (default: same dir as target)\n". " [--mkdir ] (make directory in image)\n". " [--copy [:]] (extra files to add)\n". " [--symlink [:]] (extra symlinks to add)\n". " [--license ] (plain text license agreement)\n". " [--resource ] (flat .r files to merge)\n". " [--icon ] (volume icon)\n". " [--attribute :] (set file attributes)\n". " [--idme] (make Internet-enabled image)\n". " [--sourcefile] (treat --source as a file)\n". " [--verbosity ] (0, 1, 2; default=2)\n". " [--dry-run] (print what would be done)\n"); return; } x2goclient-4.1.2.3/portable/manifest.u3i0000644000000000000000000000112614447111613014665 0ustar x2goclient.ico Portable X2Go Client for Windows x2go Portable X2Go Client for Windows 3 x2goclient-4.1.2.3/portable/stopu3client.cpp0000644000000000000000000000347114447111613015602 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ /* this is helper program to stop running in "portable" mode X2Go Client before U3 USB-drive will be unmounted */ #include int main() { HWND wid=FindWindowEx(0,0,0,"X2Go Client - U3"); while(wid) { HWND prevWid=wid; wid=FindWindowEx(0,wid,0,"X2Go Client - U3"); PostMessage(prevWid,WM_CLOSE,0,0); } return 0; } x2goclient-4.1.2.3/README.i18n0000644000000000000000000000563214447111613012271 0ustar Translating X2Go Client ====================== Translating with Qt-Linguist ------------------------ X2Go Client uses Quick Translation mechanism (.qm, .ts files). The translation files can be found in the main folder of X2Go Client of this source project. New team member --- new language for X2Go Client ----------------------------------------------- If you are a new member in the x2go-i18n team, the first we say is: WELCOME!!! and THANKS!!! for the time you give to the X2Go project. And, if you are new to the team and language files for the language you want to feel responsible for do not yet exist, please subscribe to this mailing list first: https://lists.x2go.org/listinfo/x2go-i18n Once you are subscribed, send an email to x2go-i18n@lists.x2go.org that explains your willingness to translate this-and-that language. The developers will then provide a language file for you in the above mentioned /po folder. Git cloning ----------- Next thing to do is to obtained the latest sources from X2Go Git. $ # git needs to be installed, on Debian/Ubuntu this is $ aptitude install git # <----for debian $ sudo apt-get install git # <----for ubuntu $ # then checkout the code $ git clone git://code.x2go.org/x2goclient.git In your current working directory there should now be a subfolder named ,,x2goclient''. Creating Your Language File --------------------------- First, copy the file x2goclient_de.ts, for instance via the terminal. You can do this by running the following commands: 1. cd x2goclient/res/i18n 2. cp x2goclient_de.ts "x2goclient_da.ts ". Now, the file is ready for editing to your desired language. Editing Your Language File -------------------------- The tool needed for editing qt translation files is ,,linguist-qt4'' $ open Ubuntu Software Center, search for ,,Qt 4 Linguist'' and install it from there # <--for ubuntu Now open your language file in /x2goclient/res/i18n/x2goclient_.ts and edit it with linguist-qt4. NOTE: Make sure you translate all boldly marked items: non-translated as well as fuzzy (i.e., inaccurate) items. Sending in the Translation File ------------------------------- When done, please send the complete translation file /x2goclient/res/i18n/x2goclient_.ts to x2go-i18n@lists.x2go.org and remove your working copy of X2Go Client from your system (or read how to use Git and keep the folder.) Next time... ------------ You will get informed on x2go-i18n if a translation update is necessary. So check your mails there regularly. For updating a translation, keep the X2Go Client source project folder and read more about Git by yourself. Alternatively, just remove the folder (once you have sent in the translation file) and start with this documentation all over again. THANKS AGAIN FOR YOUR TIME!!! light+love, Mike Gabriel x2goclient-4.1.2.3/README.mxe0000644000000000000000000003533614447111613012307 0ustar To build Windows binaries you can use the MXE cross build environment (https://mxe.cc). Currently only 32bit static builds are working. Install MXE as described on the MXE site (I suggest to use the system wide installation). Next, adjust the MXE_BASE variable in handle_mxe.sh. Then run ./handle_mxe.sh prepare && handle_mxe.sh. That's it. Following is the list of packages on Debian Buster that will be sufficient to make the magic happen (many of these seem unrelated but have to be installed due to depencies). In addition you need GNU make. ii mxe-i686-w64-mingw32.static-assimp 3.2-buster-build-2021-01-10 amd64 MXE package assimp for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-binutils 2.28-buster-build-2021-01-10 amd64 MXE package binutils for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-boost 1.60.0-buster-build-2021-01-10 amd64 MXE package boost for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-bzip2 1.0.6-buster-build-2021-01-10 amd64 MXE package bzip2 for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-cairo 1.16.0-buster-build-2021-01-10 amd64 MXE package cairo for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-cc 1-buster-build-2021-01-10 amd64 MXE package cc for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-ccache 3.6-buster-build-2021-01-10 amd64 MXE package ccache for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-cmake-conf 1-buster-build-2021-01-10 amd64 MXE package cmake-conf for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-dbus 1.13.18-buster-build-2021-01-10 amd64 MXE package dbus for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-expat 2.2.10-buster-build-2021-01-10 amd64 MXE package expat for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-fontconfig 2.13.1-buster-build-2021-01-10 amd64 MXE package fontconfig for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-freetds 1.2.18-buster-build-2021-01-10 amd64 MXE package freetds for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-freetype 2.10.4-buster-build-2021-01-10 amd64 MXE package freetype for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-freetype-bootstrap 2.10.4-buster-build-2021-01-10 amd64 MXE package freetype-bootstrap for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-gcc 5.5.0-buster-build-2021-01-10 amd64 MXE package gcc for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-gettext 0.21-buster-build-2021-01-10 amd64 MXE package gettext for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-glib 2.50.2-buster-build-2021-01-10 amd64 MXE package glib for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-gpgme 1.14.0-buster-build-2021-01-10 amd64 MXE package gpgme for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-harfbuzz 2.7.4-buster-build-2021-01-10 amd64 MXE package harfbuzz for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-icu4c 66.1-buster-build-2021-01-10 amd64 MXE package icu4c for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-jasper 2.0.23-buster-build-2021-01-10 amd64 MXE package jasper for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-jpeg 9d-buster-build-2021-01-10 amd64 MXE package jpeg for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-lcms 2.11-buster-build-2021-01-10 amd64 MXE package lcms for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-libassuan 2.5.3-buster-build-2021-01-10 amd64 MXE package libassuan for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-libffi 3.2.1-buster-build-2021-01-10 amd64 MXE package libffi for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-libgcrypt 1.8.7-buster-build-2021-01-10 amd64 MXE package libgcrypt for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-libgpg-error 1.41-buster-build-2021-01-10 amd64 MXE package libgpg_error for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-libiconv 1.16-buster-build-2021-01-10 amd64 MXE package libiconv for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-libidn2 2.3.0-buster-build-2021-01-10 amd64 MXE package libidn2 for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-libmng 2.0.3-buster-build-2021-01-10 amd64 MXE package libmng for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-libmysqlclient 6.1.6-buster-build-2021-01-10 amd64 MXE package libmysqlclient for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-libpng 1.6.37-buster-build-2021-01-10 amd64 MXE package libpng for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-libssh 0.9.1-buster-build-2021-01-10 amd64 MXE package libssh for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-libunistring 0.9.10-buster-build-2021-01-10 amd64 MXE package libunistring for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-libwebp 1.0.3-buster-build-2021-01-10 amd64 MXE package libwebp for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-lzo 2.10-buster-build-2021-01-10 amd64 MXE package lzo for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-mesa 20.3.0-buster-build-2021-01-10 amd64 MXE package mesa for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-mingw-w64 8.0.0-buster-build-2021-01-10 amd64 MXE package mingw-w64 for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-minizip 2aa369c-buster-build-2021-01-10 amd64 MXE package minizip for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-mxe-conf 1-buster-build-2021-01-10 amd64 MXE package mxe-conf for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-openssl 1.1.1i-buster-build-2021-01-10 amd64 MXE package openssl for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-pcre 8.44-buster-build-2021-01-10 amd64 MXE package pcre for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-pcre2 10.36-buster-build-2021-01-10 amd64 MXE package pcre2 for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-pe-parse 64989f6-buster-build-2021-01-10 amd64 MXE package pe-parse for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-pe-util 5b07cb3-buster-build-2021-01-10 amd64 MXE package pe-util for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-pixman 0.33.6-buster-build-2021-01-10 amd64 MXE package pixman for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-pkgconf 0.da179fd-buster-build-2021-01-10 amd64 MXE package pkgconf for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-postgresql 9.2.4-buster-build-2021-01-10 amd64 MXE package postgresql for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-pthreads 0.POSIX-1003.1-2001-buster-build-2021-01-10 amd64 MXE package pthreads for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-qt3d 5.15.2-buster-build-2021-01-10 amd64 MXE package qt3d for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-qt5 5.15.2-buster-build-2021-01-10 amd64 MXE package qt5 for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-qtactiveqt 5.15.2-buster-build-2021-01-10 amd64 MXE package qtactiveqt for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-qtbase 5.15.2-buster-build-2021-01-10 amd64 MXE package qtbase for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-qtcharts 5.15.2-buster-build-2021-01-10 amd64 MXE package qtcharts for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-qtconnectivity 5.15.2-buster-build-2021-01-10 amd64 MXE package qtconnectivity for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-qtdatavis3d 5.15.2-buster-build-2021-01-10 amd64 MXE package qtdatavis3d for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-qtdeclarative 5.15.2-buster-build-2021-01-10 amd64 MXE package qtdeclarative for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-qtgamepad 5.15.2-buster-build-2021-01-10 amd64 MXE package qtgamepad for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-qtgraphicaleffects 5.15.2-buster-build-2021-01-10 amd64 MXE package qtgraphicaleffects for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-qtimageformats 5.15.2-buster-build-2021-01-10 amd64 MXE package qtimageformats for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-qtlocation 5.15.2-buster-build-2021-01-10 amd64 MXE package qtlocation for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-qtlottie 5.15.2-buster-build-2021-01-10 amd64 MXE package qtlottie for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-qtmultimedia 5.15.2-buster-build-2021-01-10 amd64 MXE package qtmultimedia for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-qtnetworkauth 5.15.2-buster-build-2021-01-10 amd64 MXE package qtnetworkauth for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-qtpurchasing 5.15.2-buster-build-2021-01-10 amd64 MXE package qtpurchasing for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-qtquick3d 5.15.2-buster-build-2021-01-10 amd64 MXE package qtquick3d for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-qtquickcontrols 5.15.2-buster-build-2021-01-10 amd64 MXE package qtquickcontrols for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-qtquickcontrols2 5.15.2-buster-build-2021-01-10 amd64 MXE package qtquickcontrols2 for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-qtremoteobjects 5.15.2-buster-build-2021-01-10 amd64 MXE package qtremoteobjects for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-qtscript 5.15.2-buster-build-2021-01-10 amd64 MXE package qtscript for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-qtscxml 5.15.2-buster-build-2021-01-10 amd64 MXE package qtscxml for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-qtsensors 5.15.2-buster-build-2021-01-10 amd64 MXE package qtsensors for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-qtserialbus 5.15.2-buster-build-2021-01-10 amd64 MXE package qtserialbus for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-qtserialport 5.15.2-buster-build-2021-01-10 amd64 MXE package qtserialport for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-qtspeech 5.15.2-buster-build-2021-01-10 amd64 MXE package qtspeech for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-qtsvg 5.15.2-buster-build-2021-01-10 amd64 MXE package qtsvg for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-qttools 5.15.2-buster-build-2021-01-10 amd64 MXE package qttools for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-qttranslations 5.15.2-buster-build-2021-01-10 amd64 MXE package qttranslations for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-qtvirtualkeyboard 5.15.2-buster-build-2021-01-10 amd64 MXE package qtvirtualkeyboard for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-qtwebchannel 5.15.2-buster-build-2021-01-10 amd64 MXE package qtwebchannel for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-qtwebsockets 5.15.2-buster-build-2021-01-10 amd64 MXE package qtwebsockets for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-qtwebview 5.15.2-buster-build-2021-01-10 amd64 MXE package qtwebview for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-qtwinextras 5.15.2-buster-build-2021-01-10 amd64 MXE package qtwinextras for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-qtxmlpatterns 5.15.2-buster-build-2021-01-10 amd64 MXE package qtxmlpatterns for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-sqlite 3340000-buster-build-2021-01-10 amd64 MXE package sqlite for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-tiff 4.2.0-buster-build-2021-01-10 amd64 MXE package tiff for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-xz 5.2.5-buster-build-2021-01-10 amd64 MXE package xz for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-zlib 1.2.11-buster-build-2021-01-10 amd64 MXE package zlib for i686-w64-mingw32.static ii mxe-i686-w64-mingw32.static-zstd 1.4.8-buster-build-2021-01-10 amd64 MXE package zstd for i686-w64-mingw32.static ii mxe-requirements 2.23-buster-build-2021-01-10 amd64 MXE requirements package ii mxe-source 2.23-buster-build-2021-01-10 amd64 MXE source x2goclient-4.1.2.3/README.OpenSSL-Exception0000644000000000000000000000127614447111613014731 0ustar In addition, as a special exception, the copyright holders give permission to link the code of portions of this program with the OpenSSL library under certain conditions as described in each individual source file, and distribute linked combinations including the two. You must obey the GNU General Public License in all respects for all of the code used other than OpenSSL. If you modify file(s) with this exception, you may extend this exception to your version of the file(s), but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. If you delete this exception statement from all source files in the program, then also delete it here. x2goclient-4.1.2.3/res/audio/startup.wav0000644000000000000000000063445414447111613014760 0ustar RIFF$9WAVEfmt data959 II&$KI)+[VCBKIln54./~RP p t a^vt'' INB=\Xlk/.[U^_fh]ac`A='#jlHH]WhnE@><^^MM =BqyA<24no{~[YRT-*__ 23WW$#!!EH11  moYY  ONml,.}`cdb--b_ N T D=munp'" 9:42FCdeMN 0-iiB@IKMMTWHH 86^^2/im|wKP?C_^KI :>vu7997qr yx~UV+* FHfc,/|}<?73mpVQim($tyojHFA@ =< o i - 3 '"TXfh&$zz,+!(+HE,/ IJ21?}UW   YXtt47rz84@@93#!%'VWkkij[Y**#" E I   ?>yzfb" xx $  ), WZ{z&)wu*+@@\\?@YWTW`cDGa_CC/-jj76:<}|76ab }8=& , ; 8 lk@@so 35JKHH&&5/27Y[ji^_ED  ef $ ( & kfxz_]ll 62US ]_46gjNKko&+nmlkJG`b>>'*ej62?^ _     YYllVVff|z11IG ,)vuY[@@&&}xyOM]_>=aa44??'&b[35_Z(,  l i r v 1.OOfe,*YW$"qsTR% PUQLc^ch@C ||; 9 yxJJ`aUUdaop[Xyy34!}mlWU<:} NK^b:7[_63>?12('vwZXQT.,9 ? HFWW`b"#ed47hc60ag_Y eacf76XW  gd8:WVQQ[`UU21VT!xzmlQP QV]Z77[X26E?@:7;9527}y~~VW)%e \ Z``a^[mm()IJHGuughfh_^%#nj~{:;ca pqyzOR-)HKHHPU??Dok20lo !mjTX58_^;: W X 53AC)-  47BCECLLRRYY@?,-bb<='"YZXV-/qrOQ0/NOeennww++OP wuLMpr  POPOIM.0~)'kmTQ! <<d_ 6 ; %,x))?=>;tp4/0332^]GGLP9:# YZZY$&fhLK13POrq WV+*v{ , / zxDEjk\`b]`eCE.*nqML@@c c    ec  ;<20^`| :<,0  hdNN" &'][SW'"c^HI32RS{23TT--  L L 33~<>edponowuXW72kqLGD A PP86 )0}yKLYXwx~}hf.,,-]\ST! \^GE22WYUUWY6 5 k l MM99]`xyll>;lnFDvxab  :8  33 #"posv9445SQ",1 ~y&%==""10^^QQVTCF40Z^22~~GFZ Z hj(+-2RV.-<=ss<:]c@<`\ ##|1/ bbeerq..z{,)@G47PN*+44\_TOIO}C@35a`OMC@@Apq | =<.,QS"AG,1GAmr:7FGtt66 }}  z{*)TVVS zwKOy~ }lqrm57[W44 NCXb9275abLJIH|{>?44hffc:<`_fe*+43 GH''II&)\ZFCJHnq3012{|MN m s a_sr++ KGAD]]qo)+ST_`gfa^`bB< +$flGH[]ihEE=?_^LL >Awt:?:3gmy|]ZVT)-_Z 42VW$#~#GB.2  qp]Y  MPom+,}`cec++`^ N O DDnlon%' 9<3/EAcfPO1/nj k m 0 / %$VXjj!! z|+(%(.GB,1 KJ 11==IHTR--IJvtE@|WZED]]IJ23no8898vw ":;UT    [[rr67sx<6@B14 ! ()XXjjjiYZ')%# H J   >?x|da!#wr#  )* Y\{}''vs*-A>`_<:[_TTdcHG]_GC+0hl:55;} 03ba }:=% ( = ; mn?@pq 41IFII))2342]Wgn\`FD  _d~ ) ) # iex|]^ kp 58WZ__45jiMKjo%*kijnGJ`^BB$&fd58<9KK 67fbJ I X W HFll,1PR\]==  DEAA^`gd PN22>@^ ^     W\njXUhiyy44JI ,'vtZ[@D&)}swHNc^:= "bc33@?(%`^15Z^+*  i k u s /0RPfh&(\V&'mnPP!SWOLc_bf>@  ~~7 : }xFLc]RSfdlnUUzz 44#}mmXU>;QO]_:8^^43?B05*%tw[YTV*)@ = GGU[``##fe57fi34ed[\  ddbb42  `[  ed9;WTPOZ[XV52RS {zlkTP VPY]:8[\10EE?=99:814~{~VX(#c ] ]a__XZol%*$CL zHDtvhhdf``$&oo74_Z qoz}PT,)HJHIRR;>cc .,~}jl  fgVUY[74{ XW12FFKKJKSTUT''PR wuigVT~zuu560/\\!Y[uugi][SUzx]_;9 } z OSb]@?@AJHFP$&ijrp>A|~ ^^NLxz+&zyUS[^/-sw US00JLWX\\opvuNNwx+) ooRPvt|@GC;ks17ln!okRV::YZ?> Y Z 31BE(- 26DAFE NMQRYW>?,-db=8(" [TW]-)npPK26KHcaopu|-'OS  xuJLpq  LQUO~II-,#&pmPS#>9ed 3 7 %(}{,,>A :>ur63+.55]`!JF PM:6$ Y[VW*)ihNM01PPqqXY))yx . , |zBFio^^`ac^CC--nmNO=>` b   cd=9 15\[ ;:2/igTR &-]UT[% cbJI01VU~~44RW.(  J J 55  @?cflprovrZT45nmJJ? ? KM77 /*x|IK][{y}xfd//-*[]WT X]FH20YZXY~{Y[4 7 l i MP89`^yzqn<9nqCBwt^^}!  99  34 #!mryr1864TU$!2/{}%'?< $25\XSWYRCD22]\1/|FGX [ ij,)51ZU03>Erj<B\^=>[_ "$}-1 befb qo02{{-)AD<7IN/*71\aROMNAA33ccKR?BA?rs }   88.(OK! B@.*DFpo76JKos65 ~|  wy., VSTV wzMOy| rsmj54SW02LKYZ:8;7]`OLII{|@?34ffaa<>`]gc+-7; JH%'JL-)YYFFKJnm24/1}PP u r \_xr%+  IEAF[_no+*TT^`he_\cd@;&!joHM!ZVjnD@?;]`MK AAuw?=24on}ZWTW,)][ 54TV'# EB40  mqV\ RNln-+|b_cd,-`` Q N BDpnnl$( ;=11CGe`NR4/rm9=PNPMTWGH87}~]\/.mmxyNM@?`_HK >6up9=66sp yy~PW/*   DGhe*.z>;=9%nm STmm""{|jgEBAE  =< j l 3 0 !#[Zfi&#{|**"!,,ED.1 LG"2/>;HKQS/.HHtwBGzZXDE_^HF46om8<84w|!:=VV   \Xrt56yu57A@53!()XXli kgY](,$  H H   >=yyd` #uu   )+ YZy{))vu++?@`^<=\[XWccGH_^CE/-mg4;<5}59bd ~9;& & < = kn>@lu 4/JJIF&%/384[Zik\aGB  cf ( ! ##ifxz\]! qq 44UV ]c65gkOJko**flmmHL`\AC%)dh65<:IL 23cbH F Z \ LHjo*+SQ^\<;  EF@@]`hd RM/3A>^ ^     WVnpY\fi|}32FH &)sv]Z?! bb44>>$&^_13\^*(  k j s u 0.ROgf'&\X#*rkSOUXNJa^egAB{8 : zxIKa^TQ`cllVVyw44!!ijXU=9OT]Z;<\]55?@14)%uyXWTR+/= 6 EGWZ__$%bc66ii26gbY^ dia]22  [[  gh77XWROZ[VT37SV""~|kiQPQN]a73ZX34BC>>996754{||}XW%'_ ` ^`_^]_li(- IM }FIvrekeg``%(no~8:^` ssxxQQ*,JGKGSQ<ICNJ#)lgor??{~ ``LKyy'%z{WTZ^/+ttWT-0NJYV]]pmtwLNx|)( omOQvx~CB?@po35no#lhWZ ;<[Z== Y Y 32BE*,  45FB EE OKOT YWA<,2a\;=%(Y[ZX*,mnPP01OMfbmqvu,-OP svLMqq  SNMPIL,0~'(mlQS <?cc 7 : )*{{))<>9ae  lmqpvrWT67klMKA A OL98 -+y{GFZWxv~jh0/).^ZUVZ\ED34WWWZTV5 7 m k LM89]]y|qo=9mqEBvu^c  89 56 #&nlwx2267UU!3- y|#%A>"24YZYTQVBE41\^23~yJG^ \ li**45TW//>Cpn?=\a=<]Z ##|}10 aff`$qu1/yy/'@C86KO/*73\_RPPPA@23cbNJB?@?qq~   5< ,1RT !BF+0HElp;7HCsq78 ~}  {x).UVTT xzLKyz {~smlp55WX43 GJ]Z7:9:]^QOEF|~>;38idcg<9_`ee+,8< !GJ'&KJ*'[[CDGLqm031/|}OO o s a\qo,, KH@B\]lo-+VW\`jea^ab@?%%klIL![WjlCC?aaHG <9up8=84qs wyz\T%,  IFaf1-z}@=69mpRQnn"#|yglBEED 8; h m 2 . #'XTge$%z|--(*HF,. KI31<>KHPS2-DIxvEC|~XYBBabDC76qm6<;4t|"<;TV    XXuv53vs9<C>62$%%$WUjljiYZ))"$ J G   @=}zbb"!su  )- ^Z~|''ss,.@=^^>>YZYZaaHI]]GE,.ki58<8} 71b` |8=& ) < ; ko}>Csu  24GEIF'%0375\\hh]_FD cd % & #&jiwy\^ qp 91XW]b25ghNMkl'%ilpoLL^\@C(&dg849>LL44cbH H X Y EFik,0QQ\^8<  FC@B[^jh  RP13>9Z Z    [WkmWV hiyz53LJ ,(st\Z@@&$~ywNK]`?= bc42>@'*a`23[\+*  j j u s -1NOgd),ZX"%rpQS!VSMPabdb@? 9 9 }yFIc`VPccmmWWwx54!ilVU:<QM\b<5_]26B<4-',wtUXQQ0.6 ; GCYX_b#!ae64hi65ac_\ ecbd46 \^  ed9:VUQNZZWT44TU }ujoNQ TO[a82ZZ23CB?<8;6:42}}~VV('b c ][_b]\kg*-IIFIxrdkfi^]#&mn67\] ssxwQM*.JGIHWQA;cb1-}hk   djNUb\-4z XX00HGJJJKSRVV'&PL tqegUX~}vv560.\] Y[vujgZ^TWwvba77 y y TR\`?C?AFGLJ)!eouk?9=ss042-25]] FHOP=:"]ZTW+*jlMH15QMro VU,+sw ) - yGDmkZ\ec]]@B-+opKM !@?f e    be ";; 43]` {} @9.0  gdNO" ('Y[YW #^aKH03UR~12SX.(  L K 54  @Acf  hkursvVY47olIK? = QL58 +,{yHEXZyy{{ge././ZXVY[[GD/2\ZZYUV 8 6 i k PM59\^y{jn57ttA?ru`\}  <8 /1 $qntw5476VW .-{}&&=?! 10\^TSRTEC12_^/3}HF^ W oe0& 4/VT..@Anm@@]^C:cX !!-.a_ghru+0y{()DB78MN-+55_]NRNN|FA.3fcIL>><=on} x   9:*-QQ$ DD0.EEpp76ILqp78 ~{  ty0- QUWT wxRM|z ~rokn32U[06 JI\\6788_`NMFHz|@>35hfgc8;cbhh**78  HF'&JL+(VZ@DJNmk452/{~NP o s a]ss*) KI@A\\oq+(XSZ]jh^^dd?>%#lmJH^\fiGC?>^^LLBAyv;=56njz|^[~YZ&&_\ 13WU$% CE60  mpYV NOmm,+{c^`e/,_b S M AFokml(':<2/BAffMO 0/kk?@MIONUTKI88`b04mjwyON@B_^II 9>qs;;85ps zxSU.* FAei-*{y>>9;opRYng#)ytkoFFBC  <9 k j 1 2 #"WXfi%#yz+)#'-ID+/} IK!!.,85NPSR-0KFssCAZZED_`FE44kl<;56zy!<=VV  ! YZts57tr9=BC21 "#'&WVklkkYY*("$ I H   ;@y}d`#tt  )& Y[z|)'ss.-=>_]<>[ZYYadDFc`@C-,gh::76 63ca ~{;?& , > 6 ni@@qp42GHGG%$2552[Zjh_[DF  dc + & ##kgwz]_or 54TW \`64fgOLkp'-llllJK_\@E*&gg45><  LG31abH I X X {~DEli .-ST^]<9  BFD?`^egMM44?=_ ^     ZXknX[jgyz53JJ +,rv^ZC@(%~wwKLa_<=ac42>A%&^[45^\(+  i j t u 0-PSfh%'Z^ % psPRUUNOaeebBC~~8 9 yyJI`bSVb_jlVUvw24~jmUU8<~~ NM^_;9_`32?A.4,&sxSWTS--> 7 BIZ[_b!#bc55gk27da]^  ecbd47 Y\  gf98UWMP][XV20TTy|nmTS LSb\38^[.2GB?<:<:824}{|~YW%&b a \_]`^[nm''! GJ {HGssjjji[\"#mm7:_b sowzOQ,*IKJMTT>?bc-.}fl chUT[]43|~ XX00GHKLKIUPQW$%RO rqjiWX|vx5400\\YYsuij[[TWyv^a;7 } { QQ^_<>=ADJHL&$ijppAA}~ ^^MLyy&% x{VV\[..tvSS11IKUX^[nlwyOO}|&& qmQOvt}FA<Aro45mm}%hnXT;;XZ@= W Y 54BA-( 60A>EE OLPRUX?@.,ac><$%YXYZ-+soMP30MOfflmzt'.LM tvIJoo  PMPTHI-/&%nnQR <>ae ; 5 )'{}-'@?9?qp131-15]aGBUS=:#!X[ZV&)ijHM41OQrqWV*+xu - * x~CGjk ^^ab^_BE11lkMP ">=a b   dd "<<35a` >;+-fiPR  )+YXXW#%bgIH11UW2/}UX+)  J G 59 C?gd hiutquVX82jpMI> < PM8< --zyIG\[z{}{fh,+.-\]TR "]^GD04[WZTTU 9 7 h j QO;9_]ywho<8lqFArv\]}  88  61 "#onww3255ST""/1z~$)?; #2/Z^VSSQBE41]_41}CEW U gc(&71WT-.@Cpl<@_a<?^\  "+/ ceda $tt0-z{-*CD76MN--68\[RSMOAA43abJL=>@=qp} ~  <80,SR!@B,.EFnm::FFso88 } xy-+ SUVT vwOLzz ~|ptnk55PT/1 HK\Y9;;<]\OOHH{z@?35hfhe89bcfj*( ( ) /.22  87a_}31AABETT  VXpnWX    yyss\a J G 31igadA@vvAA 5./)twyy10PM W\4300nm[_}jnfenkqwyx|mkGGQQCH`[Y\== 36h_=E2,@CrrIMV\y~<: & ( .,34 63ed||32ABCB}TU  STurPT zxvq^^ J H 41egfd<At{A;45/+sxvw32POYZ221.ko_`~oicgnlsu}|yzmiFL KL MHX]^Z;? 63cfA?/2B>qtLLY\z~=: ' + 1,15 66da00ACEG|XT  WXpqUT  |yuo_c K I 22fhgc@>|x:<33-,twwx20MJ Z`02+0lp^]mgejmisw~zx{ljIJOKGH\^\Y:> 22gh==33?@rqHLVWxy>= ) % /.15 94baz60>=A?~~VU  WWpoVW   yxprbb J G 31cdjh;?vx@> 45*.yuyw/2MK Y\102-oq`bljegmmtr}xwmnGFOMEH]]\[:;22dd@A1/AArrKI[Z|z;< ) % -,36 54bb|}33@BDEVP ZTnqWV   {xrrc_ H I 32geeg>>vvAA 44-/vtwz1/MLW[4414noZamjdimiuvz|}yimIGOKIF[a]W;? 27ge?>/1CBpoKFWWx{=9 ( * .,45 46``|40B@DA}UW  VZpmXY    yyqrca H H 42daej@?vy@> 24)0yru{3/NP \W/300np^a}hmhflksv{vznkGIMOHE\]\\;;70biA>0/ADrnKEXYzz=; # ( 2-04 74eaz~63>@@@|WT  TXsnTX  wwqo`^ G J 20cfgf>Ax|=;53+-xuxx01MO[Y10.1kq`d~{lpgakqvq{~yylkHINOGE^_ZY<>23fc>A20?AurLI\]~}9: ) * -.42  76b_}}23DBEE}TW  WXooXW   zrwa^ J G 50fgcdACxz>> 46/-svyw11NK X[512/qoa_~mkefmmts|}{zjjHJOLGI_\Y[>; 34gd=?21?@tsKKZX|{:; * & ,+5663]f|23<@BE|UW  VZplWY    xyrsb_ G K 35dggdB>{v<A 44-,uxxv13OOYY7801nn`]gilgfmyty||{iiKJMOFH^\Z\=<46ee?>02A?suMOZX||;; & %  -/42  75bb}}22B@AB~UV  UVqqVV    x}pu`` L J 26jdbf?>utAC 22-,uwzw/3LT[V11/2pm\\jkgflltu~|wxnoFCPSGF]][\=: 63eg?>22?@tqNIZZzy=> & * 1-11  47\c}y45C@FBTT  WYpnUW   wurn_d F J 05dghd>?vy@= 02)+{wuw11JN ]Z/83-nl__jlgelotq}xxmkGKOKGH^]ZZ=<55eb>B3/>AtrKK[X}{9; ( * -.42  87a]~30@<A@}WS XTnrXT  wynq_a G I 05geee><zt<A41.+vwww13MNY[943/mk\`ijhhjjwwyy~}giLJ MKEJ_\ZZ;> 43fd>A1/ABqpHHXZy{>< ( &  ./33  68a_}40A<A?TQ [XlmXY  vwop`_ I I 33eifb<@vw?> 35-.vwur36NOX[13,1pn\^hkihjhwyzy|{gkNH JOKGZ]\[=< 55gf>?10ABqpJGYZ|z<< $ ( 1//2  75`^~04ABABQRXZmlYZ    ~|ut`a G H 12eegg<<xu=B 16+2xquv34OQWX4511mo^^kjghjjxuw}yekNJ JIIJ\][Y=> 65db@A01B@qrKHW\|}:: ' & ./32  66`a}~22AADERT STsrTT wwmpfb H H 31hgde>Bv{A< 45,0wtvw22LNZY5421qq\_mldfmkuwzy}|hjJJOLHG\^\YDARQVXpmVX   t|ltcb K F 32fhec=?twA? 53-)wyuz3-NIYY3311kl^^}gnkehlwu{{z{kjIJMNHE]_YZ?; 62dg@=02AArpKGVXz{;; ) &  .130 46b]{50?@CC}~WU  XXooVV  yvqo`_ G M 26eceg@Cy|>; 72/,uwwt14KN Y\54-2lob\kmgckptq}~yylkIJOKDE``WX?> 43gg;=53>>tuLK^Y|8; ' ) *.72 55ab}|44@>@APT TVqpVW   xztr`b J G 43dcgh@=zv<@56/.tv{w.1LL X\624/pm^[~olbdpnqt~|zzikLI NODGb\U]C9}:3fd=?22B>ovHM[[}:7 & % .-23  97b`{41>C?E~WR \UkqZU  zus`f I H 32ehgd=?uwB? 53/.ttwz2.NJZZ5501ro_Zlighjkwvyz~|ghKM PKDEbaUVB@ 6/eh>=12A@srKJWZw~?7 & ' 0/11  69a^~}23@@CCSS  [ZkkZ[    |yur^` J I 25degd>AuwB@ 34*.ztvw32NM [^34/2om]Zlnfclnus{~{xjmJFKQJD\aZV>A 43hd>@00BAqrJIYX|y;> $ , 1,/4  96`ez}52@ABC{SYVTpsWT    zysra_ I I 33ggdd@?wx@@ 10,*wxux40MN ^X130.nj_[mhehmksu~}wxomDGPODHc]SZD? 56dcAA.0D@nsIIY[zz== % & 1/12  99bb|03??AA~RU VWpnVY {~rv_^ H H 41`fkd<Auy@= 420*tyxw01KM ZY530/nn\]}nlffikywxz|zkkHINPFE^_ZY<> 03gk>916B>prGJX[yy== & * 1./2 ;:c`{~42?ACASS  YYnlW[ {zprc` L J 70hlb`BAzx=? 83/,vwsx40MK ]\1310mk]]jmhdkntr~vwpnDGPLHE]`ZX=? 46eh@psHK\Y|y:> ) (  --35 96``{~64A=F?~UU  SZsmTX yzqtd_ I I 41hfbg@=ww?? 24*-wvzw11PKZW4504pma^~mifgjmxsx}~zgjLJMNHG\_[W>@ 43ig<=23A?psII[[{|;; ' '  .011  94]`02?@BA}~WV  YYmnYW y{qrc` H M 16iica>Bxw=@ 45+.wuwx10MI Z[3300kq_\~kofcmosr~}xyllIHNOFI_\XZ?= 3/hg<=42>@trLIZ[{x;A % ) /+26 62_a/3;C?FSP XXnnWWx|rt]a J H 13igbeA>yy=>41.*tyxw1/MH YY6702qm`_{~plcfolrt~}vzqkCHPPFE]_]Z9<51ecAA.1C?otGLXX|{:< & ( /)37 67^a}42@BCCSR VUqqUU   {ytrca E G 14dfge@@yz?= 35*.zuvt03JK [\330/mp_^kmgekluv|yz}kiIJMNJC[c\T & &  /110  85_az~74=@ABTS VWppVU   zwsr]a K E 00idciA>y|>: 4//(szxx21PPUX5810kk]^kjgglktw|zz{kjIIOOGG]^ZZ=> 57eb>A20@AsrMM\X}};9 ( & ,-53 77cdy}72EBEBVS  VWrnTZ  v{qpad H G 02fefe@@{y<;34.-tvzy0.NH \^02/1mq_`hlhelmtt||{{hiNL IJFF^_ZY 340-qwzv03OP[Z14/.nm[`~klfgljtw~{xxmnGFKMGI_\X[?= 67ee=?32?=sxHQZWyx?? ( * )-74 83ba}4->ABC~}VV  YVnpXW   z|ssc_ H I 42cfhe>?vwA@ 51-.wtty30MK [[223.mmab~iligiiwxzz{zkmHEPQFI_\X\?; 74ce@@1.?EumKGZ[~z9> & ( .130  88e]{}64B?BDTR  YYmnZW  uzrt\_ J J 53ffef>?x{>;440-rvxx11JM ^Y33-3nk\a|loddpmqt}|{zilKGPLDK`\YZ>> 77dh?<23@@qrHK\\}{:< * ) +.52  78acz|72AADERT UZrkT\  zzsqac G K 25eggd>>zy;<34,-wxwr05LM \]50.-op\_klfdlotr}}y{lhHM NIEI^^[W;A 34gf=>21@AsrLJYZyz>> ( $  //21  66aa}|14BCCF~~TU RVsqTV   xxtr]_ I J 42ffceB@yx<? 32),{wts36NOYY442/po`_ikihjivx{xz~khJKMOID[`]X:> 29cbA@/3A=svKO[X~z8< & * .,44 35d_z51@@BCQS TZrlTY   z}rt^c K J 16hfdd=>ww=>67./vvyv.2KM Z\334-mq][mkdfolru~{x|lhHKQLFI^]YY?> 62ee?@20?BsqJKXW{z;< ' * 1,14  47dd{z45@@CD{XS  VXppWU   z{ts^b J J 44fceh?Ax{>;22.*tzwu22OM\[3411lna\{~plcgmivzyv}~hiKINMII[[]]::16kc:B4-?EsnJKWW{y;= ' ) .+25 97cd{{54AEAHTT  YWlpZV   y~rta^ J L 43eiebBAyx?? 15*0xszv.4LO \\101/kk^]kkhgikxvzzz|liGJMLKKYZ^\:<63afB=04@>suLLZZ}z:< ' * -.42 39__{.5A=FB~UV  VXooYW   vxrr^c H H 06fafi>?xy==15)/zuyu,3HM X]440.im]_mleflkvwzy{}lhGL LLID^aXW@? 75bgA=12?AuqMJ[Z|z;> * ) .-14 95]f~y25A>F@~VT  WZplVY  xyrq]` K I 35egfb@C|v;B 33-+vxuy30LN \X2600jm]`}hmkegnysx}}yikKJJLGI`\V[@= 52bhB=/2BAqpJGXZzz<= ' " //33  69ba~}22>CAD~UV VXooXW    x|orf` D I 13feee>>xx>> 26,+vyvv43QPXY4314lk`a|niejlhux|zyzmlFGNNFJ][]\8<13eg@=03@?srJHV[{z;> ) & +/6067_^~/2@FCGUQ  XZolWZ    zxqoca J I 62fedg>=xw<?33--uvzx00OMYZ6040pm^]kjfilhvyzx{|jkIHNOHF]^ZZ<<12fd>?23@=ruHJZWzy== ( ) 1,13  58ab20AADB~UQ YWnoXW   zxto]` K H 43edgg<?uzB< 661-swwu22NNWY4601nt_^~kofclouq{|ximJGOQHG\\\\<; 66dc@A//CCpqKLZV~y8> & % 0.25 76d^|41@FCETP UVqpVV  x}rt_a J F 61egee?@xy>>30.+vwtv42LL [\331.nn^_lmddooqqxwlnIFLPGE]_\Z:;44ec?A1/ABppFEY[z}=; * $ .-44 38`b{14ABDDMRWXnnYX    xzpsb_ F G /4hdceA@zx<?32-+vwyx01OM W[3512mo^^ikigikxuy}|winKGJPIF]^YY?? 45ceA@0/ACrpJJWYwz?< % ) ,.63 67`a1.=B@E|XS WZqlTY zyqqb` G K 05fggd=?wy?=35//utvw31ML[Y1311oqa[~lkgfkkuv|zy|liHJRMEF__YX>@ 04fh??0/@CtpLJXX|t9D * (  +/53 44_a|z47A@@CSU  XVoqVU  yztr`` H I 22ehgd?<yv=@ 20+,wvvy40PM\[1/.0op`_jiihijvw{zz|miGJNNEF``XU>C 32fd>A1/@AtsLLVZx{=> * * ,/42  85c_|31@CBDRT  [XmnWX   xyss_^ H J 13eegf>?xw?@ 16*1xswx2/NI Y]811/pn[_jlhfjlvu|{y{kjJIKNGE^aZV<@ 42gg=?40=AtrJKX\{};: & ) --51 58f`y5/BCDC|TW   \WlpXU wwqm_b H K /4iebfC<|u;@36,/vtyz0/NMVZ4062rp]]ijhhjivx|yy|ljHILOFE_^YZ=> 57db?B2/?AtsLMZY{z<= ' ' ..33  66c^|30BBFERT U[qlUX  {wsp_c I K 27ddid@Bzz=<11),yvtw42OMYZ6503mm]^lkffklvu|{x|mhGLMNFH]\\[;= 32fg@>/2C?psJH]\|:< ) ) 1,05 56^c}|24@=AB{TZ [ZlmYX   yuto`b F K 32fgdfB={x;>55+.yuwx20OLXZ751.on]]~johcknut|{z|jiJJLLHG_^WY?> /6jf<=34>=tvKL\Z{{=< $ ( /-32  48c`|33BCCCQSXSnsWS  x{qta` L H 6/feei?=zy;=47.0vtvw30QMWW3231op]`kgfjljtu}}zwinLG INFGa]V\?: 1/eh@=03A?srMKVXwx@> & ( /011  95dbz{53@<BA|VT  W[nlXY   yyrmbe H J /3jhbd=@vx@? 27-/uwvr36PM W\07,2kk^]jkgflmut{|{zijKKPKGG]_[X<> 02gg@>.2D?otJLYZxz?< , '  +/6345c`~02@ADB}WU  WXooXW    wxno`c K I 25ffdd?Bwy?? 64/,uxwu23NO \X444-qn]]gkjfimvt||z{khHM MJHJ][Z\=< 42fi>;24?>tuMNX[y{>= ) $ 112/  47``|}32B>EATV  [YlmYY  y{or`c L E 42degf?<zu<@ 63/-swzu04NQ ]Y2510ln\_}omddlowsx{}|jiHKNPEE`]W\@; 44ciA=01ABroKIWXz{<< & ) 0010  6;ba~}33@BB@SS [Xjm\Z  v{ouc_ E F /0eggc@@{w;>32--vvwt25ON []04.4nq`X~njchojqwyw|lkJHKPGE^^Y[>; 22ge?A/.DDmpFL\X}|;: ' & 0121  45[\ }35C?DC|YT ZXmqXS  x|oua] K M 54hfdd>@ww?? 44//utwv24PRTZ33..ooa_{~qm`erlpu{x|lhILONEG_^XY@> 46eeA?.1C@qsJLXYyz== # ( //42 36a^~21ADDAUR XWnoXY    uznsba H J 34fhec@?wx@= 63//utyw01KK \Y28,1mmd]}mmfdjnxty{||jhILMMHE]`[Y<= 16ehB<,3E?psKLYW|x;? & ( 1100  79bb}}32CAECOT YYlnZW  {~vt\a N K 45feef@>zv<A 34)-zvww01NL Z]2--/nm]`~knfcmost|z|}hgLL LOHE^`YX>? 56fe>?22@>svMPYZ||:; ) ( 001/ 6;`b{}52>>AA~QV \YkmZY    zyrsac H E 32ffddBBy{?< 22+-xwuv31NM Z[262/qn_^lkfhlitx}yy|liHKMKFH_]XZ?= 45gc<@51;@ysNL\Y|w;AVU + . ig34ZXDB 0..+36DFol  ''};;a b DA!&hc yw#&NK}|13IG`]jkefmi9:`^;?ehuu89A?}z|wtRV . - hf25UZ?>0-0.32GFjk#!8:c a EA!%ie yy##NO~1,HN\_nkhfll8:_]?@kjww77BAy{xvPW 0 ( fj53~\Y=>-/1/35FCjn $&;;` a ?B'$ce {y!#JQ}~11IG_^ileikh9:^]?@jhvv87@BzzvwQS / + gi23RU@B ,1,/21FDln #'=8^ d >D&#ef  t{*!LO}z14HGb^hkhfkg<6^a==hjvy86?A~~}{uuSS * , jj10UT@=.,/+08GBln  &%68d e AC'"ai{t#&NOz/4KFb`hjdfnj:;^^?>khxx75?C|{rtSV * - lg/3VWB@0-/,34HDjn #%9<a ` ?B'"cg {x!$LM}/0JKY_qihb!km:9_]jiyx65@C}xzwvWR , - hh32WX>A+-+.32HDjn $%;6b e ED "jh tv(%MO~}00IK`akffdnj96`a=>imxw69B>z|wvPP + + ij31XX@<0+0,37GAkp %%89e c FB $if  xv$%MN}z13II[`mihcjm9?`Ychqu;:??~~{}urVW * , ih24WWAA 3.2/23FEmm  '$:8b d CD##ff  xx%%NN|3/GK``ijehmj<:]^>?fhst:;>=~~z{wtQV + - lg.4VZ;@)0+125FBmn  '&97c c B@$'fc vx&%RM}{.3NG\^nmjikm=8\`@=kjvx86?B~|}utST - + gj40ZTGB 3/..54DElm !(~;6a f BC$$ee  wv&'MO~.0KJc]fmdijj;;]^??iiut9:?>~}wtxVX + , ih22TTAA1//.55FHkh" >6^ e AD$"fh  yw"%KO|{34FF_\jleglk=>\[@@ihuw:6>B~|zuxTS + ' hm40XXAF /5.243DEnm  '(:;a a B@#&fd  wv%%MQ|2/IJ^^lkhjlh7=b\=1+2,24IGik#%<5^ g AC$%gc yy"%KK}}01KIZ\nmghii<8\`@=kgwu88?@~~||utUU , + hi42XXE= 2--.53FDln #)99c b BB#"gj xu$$NR~//KK\Zloffno8;_]??kizw46DB||suXS , , hi32XXAC./-*57DDlm !&66d d AA#%hf  xw!% OP}~00II`\jmgfik9:^^@>jiy{62BE}zrvWU ) , ki23WXAA/2/253EElm  %&8:c a CB#$ee{y!$RM~}/0LK[\mmhhlj;;__;;ddtu97?A}|yxxwSU ) * lj02YW<A-///12CHnh #96c e CE"!gh  yy"#OP}}11II^\kmehnk67b`;>fjvw67CA|ysxUS , , ih24VXA?/-.,17HDkm #&~7;e a EB##eh {w#%QQ}/.LKa\inghkl::_]=Agnwy67C?~~{usTW , . gf45~X[?D ,0,,44DCnn  %$:8c d CF# gi  wx%$QOz~30HJ]]mlhfkj;;^^>>ijxy65BCz}wsVX ( , lg04VW@@1..,56FFmj &"6;f a EB!#hg  wx$"PI}~11IH\Znnigik96^a?ilvy96>A|}~srWV , * gk50~ZV=B011015JEgm  %:7b d BB$#eg  wy&#KK|z24IF[^llehkh;8]`@@+-++76GAjp "%8<c _ A@%&dd  yx"$QN~}01JI]^lkgflh86a`;>hjwx77@A~{{vuSR - - hh23XYAA1-/*36BCon  %%<9` c AD%#ddy}# OQ}01II^^kkgfki85ad;9ghtx:7>?|z{|tsYV ) ) jj23YZ E@ 3.1+54BGok $$79d b BC$!ei  yw#$OL{4/FJa[inhikh;;^\>Aikvy85ACx|ztTU , - hh21VU!!>@+0,.12HGkk$$7:e b D@"'hb vz%"IN}.2LF^^kkgdil8<^^@=khvz84AC|}utUT - ) hl2/TTB= 1/.035ECmn  #&73d h AD&#ce wy&"LL|~30GJ]Zlmgemh<<]\?@hhut9:>>|}z|vuUS ) , ji32[W@E 011-28FEll $$8:d a DA##fh  ww$$JJ}01JIa\gnbh ll96_b>|z}usWU ( + lj01WW@<.+1-02FGkl "&7=c _ ?@'&cd  uw'&NL~}00IK^]knhjhl6:a_==ghuy:4>E{v{yvUU * * jj12TY>A-/--13FGnk  %%:9a c @D%"dg  wy%$LN~~10HJ_^jmcilj:7_a<=ghux85@C~||suUW - ) gj51YTC>/-,.24FDkm!#;8` d ?D'#cexz&"MM|2-HL[aojjfjh68b^;@hlyw57B@|ruUT + ( jl21VW<A,..-56DFmk  '%~75f g CE##fe  uy'$PN{{43EG^_kjeemj:9__>>ijwy75AC{yuwVS * ) il3/YTB?0.1,/4EGmj %":8a e AE$#gf  uw%&NN}|22IH_^jlfe lo;8]_@=lfyq5=C<|}}ssUX . ' gl41XW@B .3-/46G@jr$)79d b EA"%fe  vx(#LQ~}11HI]^mkgeko7%(fc uz(#OL~0-IL_^ildflm97`a<khyx55BC~}yswUT * + ji23XYC< 301233FGlk %$;6` f ?F'"cf {y!" JJy5-FM\_migeki97`b;:detx96@A}vy{xPS . - fh62}[U@@202/34CHmj#$;9` c BC"#hf  yx#&QO./LK^Zjoejlj89``=@/0.072CDoo  (&5:f b FC#kf vy%"JL}{04IE_`jjfgjk:8]`@=hisv;9?>||zuuRW - * gh55~~[[@A 03.223GEjm "&:9` d AD$"eh  wy&"LO,-NM]\lnhjij68a`<=ghvv88@A}vyzwQU , ) jl0/WSBA020014BDom $"=:^ a @@%%ef  wt&(JR~10HI_`lkhhji95`a<=ikxz55CA~{zvwUR , * hk41XY?C./.+27GFjj$$8;c _ C>!'jd vv#&LO~0/JL^]mmjgih7;`\>Ajjww77BA|}utSU + , jh24XX=@,-+-36GBko #%::c a DA"%gd  vx&%MP}0-KL_Zlojjjk87aa<=hjvx96?B{xvxPV , ) ik21VY??1.2053DDlm"#6;d ` AB&#cg yw%%LL~|00IK^^mkkfhm:6]b@|{yvwSV - ) hl2/VU@>002132ACop  "%;8` c @A%$ef  ww%$LO{z14JG]\lmggjh83`d>:lh{y45BB}{uvQV * , jh23XXAB 12.040CGnk"$7:d a ?B'$de y|# LN|3/GJ^bjhfffj7<`^>>ihvw97?A~ywrTT . + fi43XY"?C 02.163CDno  %':9b b BB##fg  |x $LJz2-IM]alggcjm98`a=giwx65BC{~vtVT , , gh52ZUAC /1-021GFll &"99c c BD$"eg  xw$'PN{.2JIa]jkhfgl67aa==jkxw68B?||uuUW * + kj//UTA@ 202/06FFmj '$66e d BB%$de xz%"NN|.2KIZ^qjlfjk;:^_>=gjwy65BBz}wtRT - + gj41ZW>B ,2-.44EEll#!<7` d @B%$de {x!%OM|z13JG]_lihchl:9^a>:fesw;6>B~~|stRW + * ji23YXAB/1+261FGkj%!;8` c @C%#ef  {y"#MK}}1.HN]\nmje lo==\Y?Ehpvy87@?|z{wuSS * / je26~YYA@0/-/44EDnl & :7b e AD$"fg  yz#"NMy~40HIa^gmckkl99_a>;hivy74BDz{vtSU * , ji22VXB@-2*242?Esk'"96d e DC$#cf {v#'KN}0.KL\\lmghhj87_a?=kjzw38F@yzwvVW + + ji12XW=B /1-/63EHlj#$9<d ` F@ &ic x}# LK{|21II^`khgemh48d_:>givw98??}|z|vuRR + , ji01VV<?+,+,54FHli %"6;d ` B?$&ge  yw"$NNy}5/FLb]hlfhjj;;\^A>kkyz65@A}~~}rsTT + - jf16}V\BA 1/0/25FDnm  ('76e e EA"&gd  {v"&ON|/1JH[\nlgdlj:;_\=Agjuy96?A~{yvwUR , / hf36}U\?=/,.-24FDkl##75e f CE$"dg {y"#MN},0MIa^ikggii6:b_<=jh{w38D?~|~usTU , * hj52YXA?0/--66BDoo  $'88d c CA$%dd wx&%NNy{43FH_bkhhdjl87_b?{}{{uuTU . , fi52YW=A,1+/64EDln ##<:a ` D@!%hf  wx&%NN|3/HL]]lkjdhl;8]a@9jbwr8:?@}xzxxQS 0 ) ek52YY?C 11/.45GEjl!$;6a e @C&#df  xy##LO}~1/IL]`kicf!mj66bb;;gitx:7=@}{~wtTW , * ih26|W]<@-.--57FBkn #$<<^ ` =A'$cf zv"%LN|0-KK\^llfgjj58c`:>hmxz65AB~}stUU ) + lj11YV=A-1/141DFnl  %&88c c ?B'%dd uy&$NN-/MJ\`niiejj7;a\<@kl{{33DDz|wsTV , , gg56}W[AB01//47ECno  ('<;a a BB#$ge  uy'$PO~/.LKaahieejo<;\_A@gkuz94@CyyxxTT - . hf34XTBA.//011DHmk  $&97b d ?A'$cg vz(!MP{.2KI^^ikcfjm:<_]<>gfys5;B<{y|vtVS , / ie25VW@C 121042FIlh# >7_ c BA"%gf  yw"$NN}}11JI]blhgc ij85_b>;hhvw86?C{{ztuUX * , jg25ZY<B,0.00/FFlm  &#}8:e a DE"!gg  vx&$QL|z25HD]_llhjkl8;`]=?ijvy85?C|y{vvVT , - hg54~[X"?E 032133EGlk #%;:a ` A@%%ef  zu!(MM{-2NIb_glegjm79__?>mlyy76?A{yyuwWV * - kg14WW@D 011.30FGkj"!<8_ b >B'#eg  zy"$MO|-2KHa_ikhhjj:9`_<>fgsq;=>=}{uuTT * + ji23XY@?0-./53GDjm #$79d c CA"&ibw}#!MN}/1II^\kmeekl78a_<>ijww87>Az}|suWS ( , li02WW !A>0./.04IIjh ' 9;c a DB!#hg  yx$#LM|z24HE_[jmfgli:5^c>;hiyx46DB{zxwQR , - hh33WW @C 122083CCko "%;=a _ BA##hh tw'#LL~//KJ[Zkoci nl::^_?=kiyy45DC}yswWX , + hh35~YZ?A111,/8GBko $%76f e FC!#gf  xy%#NK{20JI\`kjce"pm:;^\?Alkyv69A?~z{vvWT ) + ji32ZX?A/.//31FClp  $':7b f CE$"ef  wv%'MP|{03KG`aihecmk68d`8=ciux88@>}|{yuwWS , / gf45YZB> 2-2-35DBmp "&<8_ d @C%#ff  ux(&QM}~2/GL__jkeini8;b^:=ehwx64BFz{vuXS + / he46VW@>10-/32FGmk ($79d c AB&$df  ux($MN{.3IG^]kmeilj98``="&he  zx!# MM~}10IK\_ljefjg88^^A@ni{u48CA{}tsUU - + gh54~[YB@ 3/1-62B?os  &&8:c a @A&$df z{" IQ|~21HG__jjgd mp5;e^8?eiux98?>~}y}wtWS , / gf65|]YD= 2,.,54FDln #'~8;c a CA"$hf  wx%$ON}~//LK^]lkfflj<;[]B@oi{v49C?~|ztuWX ( ( lk11WWBA01./51GDjm  #;8a e DD!$jdtx&&PM||11JI[`mihdjk9;`^=>khzv58B@{zuuUY * ( kj04VYA@1./,46EEkl##;:b b CA#%fe  yv"&LK~}00IJ_\jldfkk86`b==ijvv9:?={xzxuUT , - hh43ZWAB 12/.54DGmi %!:6b e AC$#fg  xw"%MN|1/JK_Zinggjj;4^d>:hjx{53CD{{uuUS , . gg54ZY>D .2.321DFnl  %%76d c DA!%ie  xx"# LM~//LJ^^jjag#pj69ca::hdwv86>C}{wvzUS * ) jm2-YSCD /3/.24FHkk##:8c a D=#)ebww&&LL}~10II__jlfhjl;9^`>A~~{|xuQW - % fo6-}[VD@ 2/0044BFpm  ('78e b DA!&id  ty($GN||12JH]_mlfgml;=^[>Aiizu39E?~yzvwUU , ' im2/WX@B/0./43EFmk %"::` b AC##hf  yw!% PPy5,EMa[gncjkk79aa;:fduu98@@z|vvTS + ' km/0VW?@00..42DFol %#76e d DB#$ff  vz&#OP{|31HI\dkefbli:9^_?>khxw77AB~xzxwSR * , ii31ZXBC  210.52CFom  &%:;` ` @@&'dc zz##OM~{02JI`_hjddhk74`c>;jgyv58CA{yvvRU Z [ 5775}ytpVT>CSS$%mk_a km}|HH<A94 &&efYY{x/4}}UR+%LROJ69 11\] 0.eg<;kk}}ij.-"!WW\]>=FGOL36?<vvz{ ~{}NM X X 01<:{|os[XAD TP%&kk`_jj~FH>=79 '&bd]Zvx53||TT&(ROJM97 0.}^^--gh=:jm}zjm-*"!WW[\@?IIKO51?But|} }{~OM Z X 408;zypsYV?DQS')jfae im~}HH!";88< )'ggXXxv36~zVW+)KNQO33/2\\!,.hg=;ik}ik.,$#TW_[<@EFPO22?Avxzy }PS W U 208<{rpYYAB  PO**ggcc  lj|JF <>87 ,%igVVy|21}}WS+*MLMO75 2/YY$$14eb<:kl|}ki-/%%SU_]=?FFMQ5/>D wt{| {OQ Y V 11;9~{rqYVA> RO(&ijaa kl}|HJ">97< )(heVZxw43}}UV',QKJQ;2 21\\ !.0gg=:jl}}ji-.$%TS^`=:HJNP30@Bpu{ QQ Y [ 23:9}{qqXU>CQT'&jj`aki|JD <?86 ((gfXXwz42~xRW))LNQN24./[["#10ef<JFLO42>Awwyz RN \ X 5289~{rnXW>@ TP%+jgbb  ml||HI<>96 %&cd[Zyw05 {|TS)'MQPJ29 00Z_$3-ch:<JJQQ/1BAwry }NQ [ V 5279y{omT[C>SU+(gib`ik}CHA<49 ($cf[Wyz43y}TS(*MKPR3260^`,0hd<;km|zml),!$XUZ]A?EEPO01BBvr{ ~z~NO X X 13:8~{osVV@BSQ)%hkca  oky~LF<=98 ,'jgVWuy73 y{TX()NNMN76./^\!1/df=?GIRR10@Atv{{ |NP V [ 04<9{ppUYDAST,)diea  ll|DI>?86 *&jfVXwv46|xTW**KNQK4; 40\] 01ee<:km|{ll++!"WV\]?=GGOP23A>uuz{ PM V Z 337:y~qsXVCBTP'$jlb_ nm{{IJ>>87 '$dd[Zww24y}VW(,OLMO5443_^--ih8=nj{}lk*-!&WR\a?;EJNO41=Atw{y QQ V V 306<x~tqTWB? QS)&ika`kj|ID :?:6 *&eg[Wvy44|{ST(+NJOR43.2]a!1-fh;8jn{ik,-!$WU]^==FFRP02A@tp} ~~MR Y V 10::}}rnUZ?BSQ)#goc\ khFF?;6: &'ce]Zww34z{VW**MNOM57 02\_!.-hh:9~xpsXZ@BUR''jj`a hm|EH=A73 )%gaX^wu54v|VT((NOOM37 22a_./gf;:kl}|kk++"V[]X=AIGQP/1DAwvy| ~}OR V Y 01:;{~nr[W@BRR')jhac  nmz}KG==88 (*fkYS{{/2xwUX(+NKNQ63 11``.,hi;;kk~}hk/*&T\^X>@FIRQ00@Bvw{w |~ML W [ 13::{|rsVXBCTT,&eidb  jl~FF>>68 ''cd\Zvz61 y{ST&(QOKL79 11]\!0/df;QT&#jma^jgFB ;B94 ''ffYYyy22xSU))NLNP5512^].,fj::nly}nj*-"#VV]]>=FGOP23@>vs{~ |~UL U [ 03:9{{tsSTA@SR&+jgbc  lk}HE=?76 %*di\Vwz22{yST&&QOKO84 /1[_!0+dk>;jj|li+,"!UW_];=JEQT/.CDwty| QU Z Z 5775|znrVWA?RV&(iic` mi|~IH!;<98 )*fiZVvx54xQU))MNPN36 22`^/+fj>:hl|ij,/ &YSZ_@=DHPM45==uw{x QL W Z 2389x{rsXW?@TO,&djeb  jn{EI<>96 ('feWYxz41~xUU(&PRLK87 //`] 01ed<JHNO34@=ut}| ~}TP V Y 3279z{rpXYB< SO'%ilb_ kl~|GI =;7: %%deYY|u07 ~zQW()LOQL38 12]X $/0ff<;7 '*ggWVy}30xxTY$*RMKO85 00[` ,0id<B sq}} {NO X X 219:z|rnVZ?> NQ+(fida lj}~IH ;<97 )(ffZXvy53wwUU'(NMOQ52.1_[!/.fg=;hk|hm/)# UW^^=;FGRQ12??ur| |NQ W [ 05;6|zsvWSB@SR%(jhcb  on{{GI?=68 &+eiZUt|71 ~|SU&*PMMN65/.][ "/,gj:;lj}~jj-,%"TV^^=<HINO32@Apyy x}~OM X Y 129:x~stRWBB~VT%&ki`c  mk{JE>A64 ()ggYWr{:2 {TR*(LNPP520/`_//ef:;nlz}li+/!(XRZ`A;GHQU/,CEtw|x |NO X Y 328:{{uvUSCCUQ'&jj_a jk~~FG>?76 %&fcX[wx42{~SR(&ONMO65/2\]" 10de?>fj|hl.,"$VS^`<<HDPP12B?vxzy PL Y \ 229;{~sqUX@? VR*(fiec  om{|IH>=67 )'ffYXyw44 z}SS(&NROJ49 0/^_ 0.eg9;oky~mh+0#%UU^^=<IINP31@Avw{z |}QQ Y V 409;||lqXR=?RQ&)ki``ki}HH<=97 (+hhVWvy62 |XT*'MONM76 31_^./gf::lm}|jj--"#WV\]?=HFOS3/?Csv}y ~NQ \ W 6467xyrsTZ@ATR((ii``jiFD ;;:9 ($g`W_xx32|{VW)*NLMP74 .0_[".0gf=:inzil,,&ZRYaA:IHQM/5B=uw{z |NM Z [ 527:z~nsZY@@OU(%hkba jk~}HI  ;;:9 '*deZZzw06 zyWV+(KPPK49 02a^--hh86nq{vkq-'% SV`^;<HHPR1/ABrwz {~OP X Z 3694~wqpXXB@ PT'&jl`^ji~GF>@65 )'fbY^zv04|}UQ*(LNQM28 /1^^11de;=kj~ih-.!$XU\^==IEKQ70A TO&(jgbc  lm||JH":=96 ''edYZxw34yzWR,&LPOL5741\_ .-hg:9ln}zin/)%!TW]]@=GHPS0-CE su}| }~LO [ Y 5379y|opWX>A PT'%ikca  nlz~JF==89 ),glWRwz62 }}QW'+OMMN76 01_] -.ig8;ojzlh,-%"TV^^>=wsy} TP X T 2/:<{}ooWVEBSQ&(igcd  mn{zKK! ;;99 )"fbY\vw54zzXU,&KQQK370/]_-.hf<=ii~gj0-##WU[]@?GEOO33?@ur{ ~}~OO W V 208;x|pmXWEA RR)(hhcc  mn|{II;>:6 )*ecZ\ww34{zVV')QNJO94 .0^_ 2-ch>;jj|~mi).!%US__;=JGMM54=@xr{{{TR V W 12:8z{prTYCARS)%flf^pgzJD<=99 (&dd[Yyz23 }{UY+,LLOP63 0.]] //fh=9hm|hj/-%"TV_\<@GCSN.5D=tv|z ~}OR W Z 12:9}{qpXY<=QR(%gld`  onzzJK==78 '%edXYyz41 {|UW+(JOSM1633]^ 01fd9>mk||jl-+$#TT^`=;EGPR2.@E us{} ~OO [ W 3199|}prXZ?@RR,*fgbbjj~GH><69 %'ffXXyw25 {{SR((NOOL49 /5]]! 2/cg?<6 '(ehYW|t08 zwTT&'POMN56 10\\"!11ee;9kn|{lk+-!"WX\Z?@FHRO03A?ts{~ ~MN Z ^ 24:8||kr YZ;DRQ%*lg_d ll|}JH"9=;7 '(eeYXx{30{{TR''OONM5623^_,+ji9?EFLM64CQR&'jh`d iozFJ><89 &+dhZXvu66 {zUY),MKPP44/.\b"2.cf>9in{ij,/ &ZTX]B>GINN33@?wtz| {|MM \ U 4287zyrqVUA@ PV)(hjb^ kh~GEA;3:  ()fhXWww44z|WW+*MMMN85 /3]a 00ec:>nhzli,-! XX\\==IIOQ31?@xrw TS V V 2299|ytpXU>BQU(%ila^ij~FG>=78 $(be\Zux62 {|YS-)JMQO4521^] 0/eg?:gmzho,'! XW\^=Brs~~ |SM X ^ 3983yxnnYX@AQU%(ki`akk}}HH :<;8 (&gdWZzu27 {|VS)'MOPM37 /2`\ .-fh>FFPO13B@vs{} }}~NN Y Y 3289{|opZZ@B PR')iia`jgGD!:?:6 ')fgXVwy53 ~{RS(&NPNL67 2/^`.-hg<:jn~zjm-*#"UV^^=<ILPM21@Csu~{ PR Y [ 16;7~}qnWU@BSS''ji`b hm{CK#?95; *%hcV[xx52 }|WT/(HOSL29 22^`-,hh<=jj~}kk++!!WX][>?EIQP11@Bst~}{{~ON X X 219;~~qoYX>? SQ))hfbe  mp|yIJ=?74 %)ggWXwx53}wTT(&NQMK78 40`\,+ij>9gl}gi.."#VU\_?:FHQO04C>wuz} ||MP X W .2>8~zqrTZA@ QS&(jhac il}EH==77 %)bg[Wxu48 y}WT)'OPLL97 00\\# 2/cg>=ii~ki+-"#WV]]==JJQO/2DArvz z|~~PN W Y 328:y}pqXV@?RQ('ikb` mk||HJ>=87 )&f`Y^xw35}{SW(,OKNP541/^a.0ge9;mk|}jk-,#"WV[]?>HGPN14A>tqzx|PL Y Z 23:9}zrnVXA@VT)'gkc_ lk}|HJ ?<48 ')eeYYwx54|}VU,'KOPN452,`^ 10df;9ko~yim.+"#VW^Z=AFGOM34@@ tx|x }MO [ Y 724;y}ouYR>< RP(+ggdb  lk~}GJ?>45 %'deZYvx43zzRU$*RKJR92 /.^`0-eh>>iihh/.%#UV\]?=FJTQ,0GA~ qv| ~~QO W Y 3/7=yrrXW=? TQ(&ijb` jj~FG==87 *$fdZZxw24x{VV'*OLMQ620,`b/1fd=;jk~~hh/0#%WUZ]B>DFRQ/1CBvwzy PN V \ 1399yymr[XDBPS)$hlc`  mm|{IJ=?85 ''hfVX{y03|{TV&*QLMP5522\_!1-dh;~ RR&&jlb^ khFE>?76 ((ifVXzy23zyTT)+NKMP76 00]] !.0ge<;ik~ih-.!"XX[[?>JKKM52?Bss{} ~PN X Z 4369z|nqZVA? SQ')jgad  mo|zHK#=97; $(ceZYxx54 ~yRV(+NLNO65 .2b_./gg;:kl}|kl++!#WU]^==FGNN63;@us|} |RN Z Y 3497{xos\WBB~ST('jj`a ik~GG=;7: (&gdVY{y13||UT*(LNPN47 13^a/*fk:7ko~yin-*""VV^]<>HHNM25B=ts|} {z~|PN T V 109<|ppY[@@ QP+'fjda  kk~~FH!>:89 ($hgVV|w15~{UX**MNPL39 -0]] .-gi=:jk}}kj,,"V\]W>BHJOR3/?But|{ {QP U X 15:5zwppVY?FQT)&jk^`ik~~HG>?67 +&ifWWyy23{ySU*'KORN241.~`a--if:=mk{|ll*+ #WV\\??GJNL35@=xuy} }|OQ \ X 507=|qoYY?? MT'&ilb] ng{JE <>87 &(cd\Zx{41w}XT*'NOMM77 21[`"/0fc<;km}zjl--#'VQ\a?;DHTL.6D=tv}| ~MP W Y /3;9{zqn\VBB OQ''ijb_ mg{KE!;?95 )%idT[}t07 |WU()ONLN7530_a.1fd<;llz}oi(."YX[Z?AKGOP21AAtu~{ ~{PQ Z Y 3498}|rsSV?AWV',hfcb lj~~FH>?74 &%dbZ\wx43}}UT)$NSNJ6802^]!+2jd::lk}}jk-,$ VX\\?=GLMM53=?vvy| z~NL X Z 02=;~|mpYVABTT',je`e jo}yIK"9<:9 (&ieUYzw16 {|XU,*KMOO65/1[_ -.ig;9kl}}jj,-!#WU]_=;IJIQ8/JHIO72=@uwzz ~RN X X 328:|~opX[?AQR,-fedd  nl{}JG!:@:5 '%cf[Xzw14yzXS+&KPQN3424]\ 0/ee??fhei0-%!TY_Y;BGGOP41>Bwsz| OP [ Z 4487|znrZWAC~ QP%)ki`ajj~~GH=<88 ',ekYUyy22|zTU(+NLOO46 1/]` /+ej>7hpxjo+( ZXZ]@;HFPT10A@rvz ~MM [ Z 3488{zqpVYD@ QS&(jhac  lk}GF@;59 ()ffXYyv25{zVV)'MRPI3; 30_]!.2gc>=hiih-."#WU[^@<HHMP41>Bwvy{ ~~LM Z \ 3499~~rqUV<> SP)(hia`gjCFA=48 **ggYWz{/1|~VT+*LMNN77 1,[\"".1ie8=nh{kh--# VY\Z>@GGNP40>D vx{z PR X X 3289y{ppYXC@ NR)*gfce  ll~~FE>@75 (%fdXZxw44|TV))OOKL:7 //a`.+fh=;FGOQ20@Bsv}z QQ Y W 11::}zqoVTC@SU%+ifcd  ll}~HF>>77 *)fgYWxz32|}UX)+NLNO64 .0}[`!/0fc?=fj~di2-$"WVZ^A;HGNR30@Bsx}y ~PN Y Z 219;{~ppXYA>SR+(ehec  km|DJ <;99 $(bg\Yyw23}{SU&)QMKO76 1/^\ +/jf=SU''jiab  lk|~IG><59 )%fdV[|u07 yXR+&LPOL58 30_\!//gf:=mk{|lk+-#"UW^\=?HHNL35?>ytw| }ON [ V 4189{zoqXW@A TP)&gjcb  ln}zIK!!;99< %(ecX\yw43 {|US+&KPQL38 1.a^.0ge;=ki~ih-.##VU]^==IHMN33A?wsz~ ~y}NM X Y 209<|~soXWADRS')ihaajjEH ><69 &'be]Zvw44{~TU)+MMOM58 41`\!.3fbDuu{z ~PP W T 0/:;{~psVT=A PR$+mg^aigED=@83  *(be]Yyt18 |{SW)-NJNQ64 53`_*.kg8;oky}nk*," UX_\;>IJOP21@@ss|} PR Y Z 437:{qtUU>? NR*)hhab jl||KI!<>66 **fgZXwt37 ~~TT*&LQQK38 .2]_-1hd:;ll}|jk-," XYZZA?DIQM26@<tv}{ ~SP U X 139:z~qrYYC@ QR)+hfbd ikED>A85 '(fgYWy{3/z~SU'+PKKP94 /2^]-.hf:@mg{li+,"#VU^_<:IHOP22@@tt{} }}RO W X 12:9|{qsTU?=TT&$jma_ km}{HJ=<68 ''dcY\~t.7 |{US*'LOPN443-\\" 4/`g;=miz~mk++#"VV[]A=CIOQ3/?Ctt{| QQ Z V 22::}{qqWYB@ PQ+&fjcb in{EI?>57 '(ffXXyw25 ~yRR)(LNQO2442^_ 2-ch::ml||kl,*! YYZZ@@IFNP22B? tw{{ ~NR Y W 3399}}rsVT?A  OP((ihac jm}EG;=;9 '&cf\Ww|40}vUV**MMPO36 12__/3eb>?ih}lh*-!YW[\>>KFOQ01CAtu}}||QO X Y 24:8~}rsZWCATS)$hlb_ kj~~GG=;7: %(dgZXvv46 ~yQV&*PNMM57 10b],-ih8@GHPO22@Atu|{ |QR X Y 2498{zqqWW@BTS('hkb`  mm||II =;79 ()eiYUv}5/z~VV(*PNKM96 3/^` 2-bh>;il}|kk,,!%VS^`<:JKPO11BBuv}z }}~ON W X 2255wvmkPS7<yyDCRSJKSRgi0-**$$   !a_WZwt45}|^Y50]a`]JL*) _\)( UTIHac('ggNSEGx{^a(%rp w{b_ij-,AC{x<:l l j l 6 2   FG{{:9!#qsvt ZZFERS~EDxy~@Avw XXQQ~}vu23 hkJMvtprSQ45$"KN12x{(&dc icrtQQC>bd"#ee""vt)(Q R N L  WYedJI PSceD@IO}vkg*,BC11DD34osWP0+o t k g s t SSFEww12 "pu[^}~ccXW\^~yINjdzupu37""_a ?C~.,snOLKN21mk8 7 / / pphd%!47#%pr86NN;: @;a_SVehTUIDsyuxcbM O H G [ Z GDCEwutr03 !"ww,-??)'9hf    GI55QSIH"#~  =AzuOO 12:=LIGJ74) , ) ' @ @ {|tt>?<;tttr02 %'%"qq ojTUpuQQrswuUY*+7621CD'&67xwVWHK_b  XXPPts#$ijQRuqtx45VWheHJ|}gc^]     * % cgeh7438tmvp.1)%66LOSV51OTiojd##$%[ZA=)&Y[a`AB a]wyYWhj  {y/0'(XXZY  )+%"PMDD:7'#fb:@E=U]+,ki`dz|{y RQ\[,*.2njtq-/(+HE((+)$&0/MN}~ sv'! 38gbqmUUqn5820VT,.KM-,88hhNU Y Y ]\giPOgh  }dijh}y14    !IH}}a`,.OL25FI :>KQ$!**fgnm/1 *-TS<daXZ=;MNIHUXAFGB ;=abRQ|~```_CD~s u   }  GEaa``))  BB""69>86<wslo#LL>9TXa_q p 74_blm0/ 10uwFF{|QSx{fc_e ))QRwvMO qtxu>srS T V Y |hj}/134mkjmeborpt#$?=ilVS%%66K K m m y}-(X]kn-+/3da:= MN99]^3442EEkl12 :5=C% NJnqVVgc./77ccxxll6 6 / - RT;9WXKLQW <>ki7:.+47TSvtyy$#~ CA + % I P oj YVii.-67zwB?uuTP )/SXQM{x_\64ghkkRR{u%,BBRS34VScgSQ   #) ($aajmWSwx$$7957RPbdXV-.HI{z--}x][ . 0 qm]Y  SOkc+1 8: 1.)*JIrtPULKzyOO &%**fdzJFTW wo xv++HHRR78 /-:;"!HHwxVVaa]_  ),-)SSyx56!je   WWJMNNjf)- ;9FB-.QR~}RO@@*,DB-0JF^bb`MM>Bvu,-;< 42KH(*GG&%"&;9?@ ` a UX km~}GG--11]]--739<1-}1+`e <=6:IKgh**>: []RO}~,.#&JHEE{|^cTNW\on~LNlm\W mo;9/-egywTVnmBE//() B @ &(;9OU23ilNKNP[ZqsuvGFWW><>>45^ ] #()GHdg,) >; '(so85uxchik10/.fi=Az}! 88jkRRa_``!"   e d z | TQ_]UT kk!   SYnp44!1-?CC?,.;<10acmhro4 6 o n  }EBef)(?A 22&#YX NOv|~w3/!-/  MMEEKL2/di8:+-{ z = > P N #'+.heoqYY$#<: &&=;KGRVUU# 53 F I jl<?ac+( BD;:/2ut>>VU;>;:mlzwAC))(&04D?EIA>~GGqqxy^]-,EJdh)*DG] \   " & 42=@&%`]   y |  { or  ][ecIK YX # t p XQ>=gb$) FFAA?@ 1/)+mk88 XS,*rokmts~vuTT$&utWXyz34+./2 PL`_## = ? fb yw.. f g M M R R { | =@wq^dieiluthgOP  GF>?yx<:or  R N A<48`b(( LF&HPMEKL VUUR}UV_`$&zzEFSTDCgd04 %'_`\\1232rswv89  71LM k k 9 9 " " # % R O dc9:,+$#.0**%$YV+,nkz}PN=? 4 2 ++11__(' KK('VVVV+,dc1-|%%vv010/^``_"&uv qs'&dfPNY[YY_^LH!$ ko h h n l fg[^ @ ;  # ! k k vs.0py ptZ\##// FD  a `   -.[\+( NP0.]ad_<@VWZZU\ CBmlGJ<75::6/2?<"#,,VV %'_^-/SSD A v y w t < > 25mksu_\+. U Q   ? A DDkn'# QUIF  xy  {z 5 3 lk+(Z\*& PS24kjmmNMzx00MP1/FHhhwxwsjoTO$(mp*,POXY=<8:QU<=ru<:39 ! R N H I   :7@B-, o m # &     zzlnkg\_MMkh@=9=CI  m j SQ&'YZ)) US<;qr{z^_00a]EEvxfd)) VVKMVX  UV}~kl==ll++$#[WMKwy#  $ "  $ s v  @ = p o r r O R \[BB./'&|ff?:SU>>{ } F H :9x{"[Z$$WWBDzwml..RP**~+,yvqv LN! ;B;?jg+.\]/.&$TVEF!'|vXV#&eb  C D \ [ [ ] @ = G K k h   ]_&%B=0*Z_WTOUI K " !pkzWV&' WXHJ~{BDrqWU76^\ +)z~ UYjeJN><.-qpikY\`eKEU[ut31$(IEcc/.RQca   o m f j ( % Z Z , +     ? C }  )'us>@z{  OQvu  ytsw`_vuWV$% ZWMJTU joeeUSuyTY JE51{mjVV-0-, CA}^^MOli.(uo05>;EG V V = ; q q v w e e 3 3 j k - -   Z T L I x{a_NO*+,*wuYXyznl57lo ^ a TVffRSnlVV%$ Y\QUnp10$!22nlgi./ie)*]Z 4.39 ut--FGwtCC|}<;)+%(o o p v , $  < @ F C 2 3   : 9   + %   WU9;!  UV::hgac%# 35%$6: 4 6 78SSHGbcVR#& ^`[Z~73XTRSoqfiCDxx@@^_;9[]dcKL""^]#$wx``ABss J K ^ ] F H     O P   \ ^ MK_[  egjg  joGA6>]V SS## _d`aON{{__32/1_\MJ  97_bA?%'99#%fcyzOOQU+'OO-,wyHHff& ' 7 5   O T i a  % y y d a c i 5 . Z W |RU>?ttut+, V W g f UY41./QR  TU  bcgegi +*DEyxzxaa][ei_bC? ghQP}|CBZXGGRT}zYV 46QM\Wpk    " z w r k 2 9 v u L L 5 6 ; 9 \ ^   # # ][;=  inEJtrml36%*TQZ[22 ) % C A AB##"!EHMO$# cgkn/.XV|z"XY56YZ{uAG~~qt//u{ 76 SO#!UTMNVU p q F F s s } ~ i f < @   F I   . / r p S R om?B ~~! #wu  a \   jg-0?;NR# igtrLJ~~^` ?C<<(-^\//|w.3JN ^_$"69be>9@Hsj92a\<?;; B C   > B M G 4 :  Q S    C D # l m 33}|22PL'&xw+ ) c _ NQ 56PK!# lj{{ol BDb_GJVTVWQP}}SPqqGGhc{z=>C@*.RQfdggefIHbc2/!mp n o         c d & $   r u 4 5 hn62TSxwAC>@}yto=A 3 4 {{56,*KK"" in } 54wvB@ 7;Y[('02 HJhgqpVY74MM EF\agk&& MOusm o B A c a u u 4 0 @ D P S  X[('89+.)%/1EB03 h h   Z[%#w{KJ!" po &#Z\RT '$-.rr76be"d^96uv`_+,}SUDCLMvv@Brrqp.2QME I   3 /  y x A C   n k S X ] X z     KISUad:9 7 8 =<uqJH " qs 25+)}-'IL#"/2tq~zIMHDmp9:=@ V[ dfZX vu}ro)'tu  {{+.    M M z z ~ ~ p r E A   e d = > + ) - / N L Z Z I I  Z[ agQM\[ R R  bdonJJ rt,+ADB?VVa`_`xw00II387=MP-&>; BDy~~fe [ \   C H P L : >   l j 6 9   " Y \ & ) Y Y  \ZOJ 6;61 WRrvpnO O   A@jhHI yu<4OXZR39 88| acggQOkkjm#" {zFG YWge-/(,`]wzRN + -     u v = : , .  # # TUpoppPM  .-11  ` b ^cED  |yD?fkgcUW%$gk.( UYlqA=8=d_"!WX NL(((+JIMM<:vsCA <:VU< A B L O   y t z ~ # "   ` ^   >:jc!BC??  **zy s s F F   }~rr{{TSCG }}$&_\ff87qvjdnuliNPFGOR njJLvs=B qszwVW77ihRUxvxxWX    V U } r u Q P    ^ ` J H Q P g l b ] z } ' " IJba01`^i m f ` 9 @   |ieX\olOO@C ()!ejZ_-)7@]`55..VU /1LI6:('{op><DHca=:TXXU,/q u " % L K R R ? @ ! R R 2 2   & $ 8 < z u 1 / G E N O BH24~}oq- * # & aaJKHFZ[IJ|?E )-%%wyWU+,42 WYxx55po[Zjl76JHB@ TU[[!<9.0  E J       T V % #     E H x z   _ \  gf}.(MSMGAD _aDD/-36JGCBzyBB 1/0.]\99*+%#DFwxWZ:>&&eclp$" '(-,dg;: 67xvkh# _bVQ     Z V $ (   g c E G r u # { x //wvXU  _[=@" <9rt;<xz@? 55;9rnbgjd"$ST&&&%EFssRUGFTS6;XSV[KH'(glNJ8:EEge DB36olMLb^L K [ Z + + 5 3   < ; 8 8 jgFCxv*+ I I j i r t h c O U 4/-/ca00qtB? ;7DA lp|wrxA:)+ )(XY EC=8w~PTwvxrJF\X%*<<~_`\]rp;9hh}|@A^b  ! $   lkBA!#//^^  u x ' ' e g XY:9 0 0 { z >? !pn7;EF]^ <8VZa^`bUTOOJJPRnjQUonhi('&"[W&%wz [X.3 +0miHG~~xu/3`[w}{}]]51lh=@.+vy@ B S S !  ; :  GFff`a;:  { : 5 c h 22kn;7 LJhfRPoq~~|0331yupp75][KL5468** ddDB79?>^^sp *-PMhjnmbb35[`gf=?  DG    C H k n a a  + + * ) E F Z X \__\]aidy}&&hn95MJom*,fd)$w|77*,ji22FDus }JK_`gdSX>7wyijqn%*45&"?CXTRTDD_\0-eh~|aa::  noQ V k o   $ %   k m N Q W Y  #  -0309=GEbb eh76NRvy<:x{*.ok:7bb^^}~zEAIF IJuubfGBQS[] 53@D>8&5283QU\YJK11on_aebvz=<  / 0 R R X Z   U T q q m l F H h f  )(FEvv} ge36USKN '$=@qo a`JIb`~|{;6tzopHH*,23(&-.!"z{{{!*'\bC=3874KLxy  qoj k     y v       H J  ! f c ./^]wxcc33X[^\+.@?Z[{ySYkn*'ZZ.,;:gevtMN''&%\[ WR QSLOzYT,/ #EK<9. , ? @ K N ) * { } d ` { { # & \ W {MIola`03]^ nm<@YSpt<8ywVWSRpq__X[kmqpHH |}[Z>?44:9UXJFxx98  %'lmwtNQ&#YZ zu| w   } z / , _ a ~ ~ w v W X   1 ,   HKlj74de`a..c^ {{ @>_b0.jl CE""+,y{..=<opkkFD!%%uw?D: < D A 0 .   & ) + )   d d Q Q :;]\% otXYZ\10cf(%%']\,/sq43YZGHf`e`heLJ00ZYkmqpdeKJ++67"#vwDA!;>X] <9Z]\ZRR:;>?} z w r C ? t s    a `   32[\  deRQXY// gk75>@~{04ni zzhiKKHGad@='&%#~#%b`x{YU48 jiLN]]32 gg.3  ($(-"||__WUUXlijkCF8 < , , < A o l d c & ' V U ! ! kk 67lmXOKFYX+,ll=@YX24ieOQOO+.kk`_LI TXbb@A POsu xqEK)%IJgajmML44'),(;?c`45  s s M M   6 5 3 3    4.mrNKEG@BUR,0us!#KK$$ss/-be1. CD 66zz=9&"@?rrPN:<0.36QN{}"!-(\_33oq**_`45}|^`A>   43ghccAC- 0   [ X 1 1 < ; 9:yw--ww358:RP+-yu(*WT75VWtrXUZ\@?;JJQPDE0/ "{zww |SV# }x<@FI\YceTTCB"# JH_[:7  p m  * - B @ > @ !  - 0 |~\^C@'}MP(( }68ppbbef@>cc~34#&ec{ZV*(HIgdy~|wpu`[>B$! MK0,]^+,lk!cbUQ-',2'#wuvxcb  aa $ u o L I kh?>26{''~~JK)'  =>|~vx77%'xu54.0~OR2/24FFtr_^.,dd CCvunrQO34@%$,-NKvzQPtr65  9 9 M N J G . 3 WS\\)*75abil xrEJ%"HG#&tu,,GI24cg#LPJJrr!kn}vchb^`bzx(+')@@{{/.oqmr#\Xy|daAC'' IJrt34DBkh  VWpnOKb]tqBE$!PM13&+YV|y on=@*'%&::a`55QQ YU,+-/'%TT%)@BKJmmOOGG*&NSa]gh[[IJ20RQ97KS<8sva_WVQQ$%SR<;WTkoD@#XX BDEEPP::VXwxyx-,}}43:= *0LGX[ZYTT@@**64MM]\MN_b 83$#{z/.54')"`ZUX b`#JFWZUT>>zx\]24%%JGejA>!" [^WUa^DBy{KJ 33yxqo#tz83W[|y|}rpUXA>"% 01bconuu TTUTRNuwhflnyw',urplcb32[XPN10 98eg=< acgg{|jkLL98HJ\[11*,RP ^\ Z^21ccqoST@A/-')-,==`a+(]ZCBqmog(#gikjXYCCA?;>NLbe<=+/~SVtv62  zxsp-.d_5;% lh#'tu |wtn/1mpll}zQTHF--^_nrdaVZc^loRV'+25`c:7WTEF::ihmoWV<=** 85YYNM:<54TTcdb`KM$#?E`f`dTXW[}~ `_55 ! rq.- .2/.**9=y}1-]Y32`] ,*|}HHEHej,(?7)z <9TXhcgme^NTB>#&-*TWb^??WY*)5735A>qjW\72 wz7445RQXW_^||}~FF%% =>mj)0wr QT.(8:9:43%%VVie]Yqo!$Y[ $&52591-!#  &$XZ"#gh:4gmUQ VX{z  %$_ZUV44 }{?BHJqp !#]^ orgd\_sq,+qrCE!$CCZYeeefcaORDA*+#FI%#mnxw   xv/.yy'$]^&)po CEdbmonlY[97ntEB\^tx  NK~RN/3 MI[`"<=`bVV99tt=>%'YWlnpk[^IG46-* $,&29RLx~EB }{}Z\ OH~toch`[^bjh}}'(fd$)kg  {{+*vt  /0VW;;xyNJ.3 RRuuAGkm;=ec03  0,OR79~|0+Y_ywihZ]XTY]gdjj&&|}gj<9%TNx|zzkiSVFC8:1024?;KPnj*(hj!WRji2378po66|{++nsNG). ^[!2-nh98}~..dcWYTSecx};>}|//`cED?FvvWWoq& GK^\lllmhgZ[LK99&&  "$98`_)(ff  65VZrkwzrhnJH  VZ=:uwhhjmFC), fe+-IF.0mnrr22GN01de  -/nlW[!&skF@NK./77;<53),   -+RV#(\W((&'^^jj  QQOP  cjA>)( nm8:cd [VPRzzFF##;8ef75ik*-<9CFGC?C86() 04^Z#vq31ij02'%kl  "JH}~IDtxWT72-.:?a\<@$"wyFD }},-0/A?qpUVLKIJVUjj ?@rr#$B@X\iertpqpmbfZUFK=;,,%&! %0,@B`_>=?@^]puBBsr}~>Crm(*MJjm|xwz^[:<  GG\[  oq(%~ZU9;!" SSLLa^~DC %PS 54RUtrwyll^]WYSOTXa^nr]^NF]_ ZWJHjlzzom]a\WMRYTVZig{}13c_)*7601('QRz{42SSwvSS44!  ]\,-jm$"IHXV*+'$BElj@Fie @>|| ZZTT><==WVfhpoqolpd`X\LI=?54)'&+'",0:8LLddHKpmwwLK LN|}98noKJ23jm<9KJ{|?=zv\]IJ>=@@FFYZro/,QT{{ 31cehiOM#%cb&&56><<?>;/2+( 36NLnp')IGeez{spRW3.[\_\!gdDE./wxMKpl,/yyDCFEih"%&$!"55[[04usGG D>t|     9:VTz}/,57CA;=65"# `]!#xx9; }\W?C*& ^\.0Z[! ZV.1 '#AFd`#1*?HKBQXQLNQHHA?67..$$&(20GHa`ACA;}$#RRz{=>ZZ{z|wKR%SMrrQS<7"' plBFQUwz`^HJ;93434:7GKZVnq"98NMadojw}~y}{|wumphe]]VXQPOOPPWWcbtv()WX8?pk ,/RQol|}wuswtpxz95NRjfz~opVU33\Y+.hhEE78 z~\Y13 UU.-%#<>WUln?@mm34bc +%@FYUdfpossvvqqmnfc\aXRNSIGIGDINHOT_\jk}}"1-:=IHIGJNC?69#  XX21rsY[A=+0 ooKM+'ghED() 22HHbavx68XW.*UX~((68=:BEB?AC89:7)-,&% &',):=IEZ^mjppKJ*+}gbIN86'&fhHF&'mkVXBA86).+&%)/,34CEPMceuu"9?/.  fhML-.}|{yw{z !%*0+,140-.,.*'#%!!"(.*9=LG\avq =9VZsp '!-3@:DJPKSWWSTXRPIH=@2-#  ~nkQVHB.4)# oo\]BA22 &'43??FGSPQV^Z[[\`^XX^XTTUOQOLKMKJKKOQSQ]^fdps--CG[Uhn~xtu__RR@@33&% tvgcTXJG:;13+'#! $#*+00<78++""x{wtorqmkopmprqpzzzz &%-,26=7:@EACDEEHGEGDCGG@@CB=>=>=:;>;9;=<:?@@?BDGFJILOVQOU_ZWZb`^`b`bc``_^^`VTXZMJKNCA=?6500)(!$           x2goclient-4.1.2.3/res/changelog.qrc0000644000000000000000000000011614447111613014052 0ustar txt/changelog x2goclient-4.1.2.3/res/git.qrc0000644000000000000000000000011514447111613012705 0ustar txt/git-info x2goclient-4.1.2.3/res/i18n/qt_cs.qm0000644000000000000000000000026014447111613013643 0ustar 9eF_G,“OpJ' "n% %HD,00;S0y0|b0025&5 D>l DL+D,?K,H5LH5RH5}H5f f2f<7fJjf{f<fl=S$>LA``92ee>eM y*yR*yo*y*TM4*0'x*0g+Fx+F+fV+fC+z0++o+I+z1++9-+D +Mu+y@+4+į+įp+į+1=F0iG9Hw9SHw99I*I.IjJ+J+0J6J62.J6:AJ6?J6ywJ6{J6J68J6pJ6_J6J6KHLZHL/L2]Lb rO|1PFEkPFEzPFEOTV1V1Vl VϖVW+WWWTWTX >܊ gy t KE %'  < ) */y 7u \ =N B T^! ]k ] `_ ` ` ` c( d e  eI f1Q gn q k,p rD" x| x ~d $ 9 I' I- I8X ; v  ݔ Jҋ %p*L , ,Cy + ˔M P'B P2 RF Z 68u :0 f  f E4 4b< s  sG AAU : m,[ #-t) #-t 0N,X E9F L' L Mc\= SdY Vi@ ]$4N f)a f)E io> ) m` w H HC $F .@  i  p J ; JG t. k Ӈ  ̺M -DO k0 kQ U)[ < 0>  S  Z Ω xH^ ./ 7F  >Vb >WX >Xu >] >j >o5 > >/ >b >ڰ > DTK I+R I/C RVK RV RV S.g Sh Yh [ j7oB p0< Bg   T3s Tr T TL  ha 5 Sp )d )d  .3 .` .s .U a a6 y {  t :b\ ʜ.t +>1q 0E ;ɾ Ptz Pt fe fec g( iFC iIc i^ u* w w w w} w}` w} Q Yn ^| }n R X ~ D t5y t5 z  ) T)ugT)*'*/E)/E/EI_\XRue[ ca.;vɅy$~]BSjmB&ݖ[yrE  G "#"#$U%4>%4K-vq0i)̺0͆1c1c2wTvD HJd\L$.c5c5,iCyC!{~a`' G[NBkyAPTt2- px}siSobre o %1About %1MAC_APPLICATION_MENUOcultar %1Hide %1MAC_APPLICATION_MENUOcultar Outros Hide OthersMAC_APPLICATION_MENUPreferncias &Preferences...MAC_APPLICATION_MENUEncerrar %1Quit %1MAC_APPLICATION_MENUServiosServicesMAC_APPLICATION_MENUMostrar TudoShow AllMAC_APPLICATION_MENU Permisso negadaPermission denied Phonon::MMF"%1, %2 indefinido%1, %2 not definedQ3Accel,%1 ambguo no tratadoAmbiguous %1 not handledQ3AccelRemoverDelete Q3DataTable FalsoFalse Q3DataTableInserirInsert Q3DataTableVerdadeiroTrue Q3DataTableActualizarUpdate Q3DataTablez%1 Ficheiro no encontrado. Verifique a localizao e o nome.+%1 File not found. Check path and filename. Q3FileDialog&Apagar&Delete Q3FileDialog&No&No Q3FileDialog&OK&OK Q3FileDialog &Abrir&Open Q3FileDialog&Mudar Nome&Rename Q3FileDialog&Gravar&Save Q3FileDialogNo &Ordenado &Unsorted Q3FileDialog&Sim&Yes Q3FileDialogJ<qt>Deseja mesmo apagar %1 "%2"?</qt>1Are you sure you wish to delete %1 "%2"? Q3FileDialog,Todos os Ficheiros (*) All Files (*) Q3FileDialog0Todos os Ficheiros (*.*)All Files (*.*) Q3FileDialogAtributos Attributes Q3FileDialog RecuarBack Q3FileDialogCancelarCancel Q3FileDialog6Copiar ou Mover um FicheiroCopy or Move a File Q3FileDialog Criar Nova PastaCreate New Folder Q3FileDialogDataDate Q3FileDialogApagar %1 Delete %1 Q3FileDialogVista Detalhada Detail View Q3FileDialog PastaDir Q3FileDialog Pastas Directories Q3FileDialog Pasta: Directory: Q3FileDialogErroError Q3FileDialogFicheiroFile Q3FileDialog$&Nome do Ficheiro: File &name: Q3FileDialog$&Tipo de Ficheiro: File &type: Q3FileDialogProcurar PastaFind Directory Q3FileDialogInacessvel Inaccessible Q3FileDialogVista Abreviada List View Q3FileDialogVer &em: Look &in: Q3FileDialogNomeName Q3FileDialogNova Pasta New Folder Q3FileDialogNova Pasta %1 New Folder %1 Q3FileDialogNova Pasta 1 New Folder 1 Q3FileDialogPasta MeOne directory up Q3FileDialog AbrirOpen Q3FileDialog Abrir Open  Q3FileDialog8Antever Contedo do FicheiroPreview File Contents Q3FileDialog<Antever Informao do FicheiroPreview File Info Q3FileDialog&RecarregarR&eload Q3FileDialogApenas Leitura Read-only Q3FileDialog"Leitura e escrita Read-write Q3FileDialogLer: %1Read: %1 Q3FileDialogGuardar ComoSave As Q3FileDialog(Seleccione uma PastaSelect a Directory Q3FileDialog:Mostrar ficheiros &escondidosShow &hidden files Q3FileDialogTamanhoSize Q3FileDialogOrdenarSort Q3FileDialog$Ordenar pela &Data Sort by &Date Q3FileDialog$Ordenar pelo &Nome Sort by &Name Q3FileDialog*Ordenar pelo &Tamanho Sort by &Size Q3FileDialogEspecialSpecial Q3FileDialog$Ligao para PastaSymlink to Directory Q3FileDialog*Ligao para FicheiroSymlink to File Q3FileDialog*Ligao para EspecialSymlink to Special Q3FileDialogTipoType Q3FileDialogApenas Escrita Write-only Q3FileDialogEscrever: %1 Write: %1 Q3FileDialoga pasta the directory Q3FileDialogo ficheirothe file Q3FileDialoga ligao the symlink Q3FileDialogBNo foi possvel criar a pasta %1Could not create directory %1 Q3LocalFs2No foi possvel abrir %1Could not open %1 Q3LocalFs>No foi possvel ler a pasta %1Could not read directory %1 Q3LocalFs`No foi possvel apagar o ficheiro ou a pasta %1%Could not remove file or directory %1 Q3LocalFsRNo foi possvel mudar o nome %1 para %2Could not rename %1 to %2 Q3LocalFs8Nao foi possvel escrever %1Could not write %1 Q3LocalFsConfigurar... Customize... Q3MainWindowAlinharLine up Q3MainWindowJOperao interrompida pelo utilizadorOperation stopped by the userQ3NetworkProtocolCancelarCancelQ3ProgressDialogAplicarApply Q3TabDialogCancelarCancel Q3TabDialogPredefiniesDefaults Q3TabDialog AjudaHelp Q3TabDialogOKOK Q3TabDialog&Copiar&Copy Q3TextEdit Co&lar&Paste Q3TextEdit&Refazer&Redo Q3TextEdit&Desfazer&Undo Q3TextEdit LimparClear Q3TextEditCor&tarCu&t Q3TextEdit Seleccionar Tudo Select All Q3TextEdit FecharClose Q3TitleBarFecha a janelaCloses the window Q3TitleBarNContm comandos para manipular a janela*Contains commands to manipulate the window Q3TitleBarvMostra o nome da janela e contm controlos para a manipularFDisplays the name of the window and contains controls to manipulate it Q3TitleBar@Coloca a janela em ecr completoMakes the window full screen Q3TitleBarMaximizarMaximize Q3TitleBarMinimizarMinimize Q3TitleBar.Tira a janela da frenteMoves the window out of the way Q3TitleBarZColoca uma janela maximizada no estado normal&Puts a maximized window back to normal Q3TitleBar Restaurar abaixo Restore down Q3TitleBarRestaurar acima Restore up Q3TitleBarSistemaSystem Q3TitleBarMais...More... Q3ToolBar(desconhecido) (unknown) Q3UrlOperatorO protocolo '%1' no suporta copiar ou mover ficheiros ou pastasIThe protocol `%1' does not support copying or moving files or directories Q3UrlOperatorhO protocolo '%1' no suporta criao de novas pastas;The protocol `%1' does not support creating new directories Q3UrlOperatordO protocolo '%1' no suporta obteno de ficheiros0The protocol `%1' does not support getting files Q3UrlOperator^O protocolo '%1' no suporta listagem de pastas6The protocol `%1' does not support listing directories Q3UrlOperatorfO protocolo '%1' no suporta colocao de ficheiros0The protocol `%1' does not support putting files Q3UrlOperator|O protocolo '%1' no suporta eliminao de ficheiros ou pastas@The protocol `%1' does not support removing files or directories Q3UrlOperatorO protocolo '%1' no suporta mudana de nome de ficheiros ou pastas@The protocol `%1' does not support renaming files or directories Q3UrlOperator@O protocolo '%1' no suportado"The protocol `%1' is not supported Q3UrlOperator&Cancelar&CancelQ3Wizard&Terminar&FinishQ3Wizard &Ajuda&HelpQ3Wizard&Avanar >&Next >Q3Wizard< &Recuar< &BackQ3Wizard Ligao recusadaConnection refusedQAbstractSocket Ligao expiradaConnection timed outQAbstractSocket(Mquina desconhecidaHost not foundQAbstractSocket"Rede inalcanvelNetwork unreachableQAbstractSocket$'Socket' desligadoSocket is not connectedQAbstractSocket:Operao de 'socket' expiradaSocket operation timed outQAbstractSocket&Passo acima&Step upQAbstractSpinBoxPasso &abaixo Step &downQAbstractSpinBoxActivarCheckQAccessibleButtonPressionarPressQAccessibleButtonDesactivarUncheckQAccessibleButtonActivarActivate QApplicationJActiva a janela principal do programa#Activates the program's main window QApplicationdO executvel '%1' requere Qt %2, Qt %3 encontrado.,Executable '%1' requires Qt %2, found Qt %3. QApplicationTErro de Incompatibilidade da Biblioteca QtIncompatible Qt Library Error QApplicationLTRQT_LAYOUT_DIRECTION QApplication&Cancelar&Cancel QAxSelect&Objecto COM: COM &Object: QAxSelectOKOK QAxSelect8Seleccionar Controlo ActiveXSelect ActiveX Control QAxSelectActivarCheck QCheckBoxComutarToggle QCheckBoxDesactivarUncheck QCheckBox@&Adicionar s Cores Customizadas&Add to Custom Colors QColorDialogCores &bsicas &Basic colors QColorDialog&Cores c&ustomizadas&Custom colors QColorDialogV&erde:&Green: QColorDialog&Vermelho:&Red: QColorDialog&Saturao:&Sat: QColorDialog&Valor:&Val: QColorDialog*Canal &transparncia:A&lpha channel: QColorDialog &Azul:Bl&ue: QColorDialog C&or:Hu&e: QColorDialog FecharClose QComboBox FalsoFalse QComboBox AbrirOpen QComboBoxVerdadeiroTrue QComboBoxLFinalizao de transaco no possvelUnable to commit transaction QDB2Driver(Ligao no possvelUnable to connect QDB2DriverFAnulao de transaco no possvelUnable to rollback transaction QDB2DriverFFinalizao automtica no possvelUnable to set autocommit QDB2Driver@Ligao de varivel no possvelUnable to bind variable QDB2Result*Execuo no possvelUnable to execute statement QDB2ResultBObteno do primeiro no possvelUnable to fetch first QDB2ResultBObteno do seguinte no possvelUnable to fetch next QDB2ResultFObteno do registo %1 no possvelUnable to fetch record %1 QDB2Result.Preparao no possvelUnable to prepare statement QDB2ResultAMAM QDateTimeEditPMPM QDateTimeEditamam QDateTimeEditpmpm QDateTimeEditO Que Isto? What's This?QDialog&Cancelar&CancelQDialogButtonBox&Fechar&CloseQDialogButtonBox&No&NoQDialogButtonBox&OK&OKQDialogButtonBox&Gravar&SaveQDialogButtonBox&Sim&YesQDialogButtonBoxAbortarAbortQDialogButtonBoxAplicarApplyQDialogButtonBoxCancelarCancelQDialogButtonBox FecharCloseQDialogButtonBox"Fechar sem GravarClose without SavingQDialogButtonBoxDescartarDiscardQDialogButtonBoxNo Gravar Don't SaveQDialogButtonBox AjudaHelpQDialogButtonBoxIgnorarIgnoreQDialogButtonBoxN&o para Todos N&o to AllQDialogButtonBoxOKOKQDialogButtonBox AbrirOpenQDialogButtonBoxRestaurarResetQDialogButtonBox.Restaurar PredefiniesRestore DefaultsQDialogButtonBox Tentar NovamenteRetryQDialogButtonBox GravarSaveQDialogButtonBoxGravar TodosSave AllQDialogButtonBoxSim para &Todos Yes to &AllQDialogButtonBox&Data de Modificao Date Modified QDirModelTipoKind QDirModelNomeName QDirModelTamanhoSize QDirModelTipoType QDirModel FecharClose QDockWidget MenosLessQDoubleSpinBoxMaisMoreQDoubleSpinBox&OK&OK QErrorMessage@&Mostrar esta mensagem novamente&Show this message again QErrorMessage&Mensagem Depurao:Debug Message: QErrorMessageErro Fatal: Fatal Error: QErrorMessage Aviso:Warning: QErrorMessagez%1 Pasta no encontrada. Por favor verifique o nome da pasta.K%1 Directory not found. Please verify the correct directory name was given. QFileDialog%1 Ficheiro no encontrado. Por favor verifique o nome do ficheiro.A%1 File not found. Please verify the correct file name was given. QFileDialog@%1 j existe. Deseja substituir?-%1 already exists. Do you want to replace it? QFileDialog&Apagar&Delete QFileDialog &Abrir&Open QFileDialog&Mudar o Nome&Rename QFileDialog&Gravar&Save QFileDialog'%1' est protegido contra escrita. Deseja apagar de qualquer forma?9'%1' is write protected. Do you want to delete it anyway? QFileDialog,Todos os Ficheiros (*) All Files (*) QFileDialog0Todos os Ficheiros (*.*)All Files (*.*) QFileDialog2Deseja mesmo apagar '%1'?!Are sure you want to delete '%1'? QFileDialog RecuarBack QFileDialog@No foi possvel apagar a pasta.Could not delete directory. QFileDialog Criar Nova PastaCreate New Folder QFileDialogVista Detalhada Detail View QFileDialog Pastas Directories QFileDialog Pasta: Directory: QFileDialogUnidadeDrive QFileDialogFicheiroFile QFileDialog$&Nome do Ficheiro: File &name: QFileDialog$FIcheiros do tipo:Files of type: QFileDialogProcurar PastaFind Directory QFileDialogSeguinteForward QFileDialogVista Abreviada List View QFileDialog O Meu Computador My Computer QFileDialogNova Pasta New Folder QFileDialog AbrirOpen QFileDialogPasta MeParent Directory QFileDialogGravar ComoSave As QFileDialog:Mostrar ficheiros &escondidosShow &hidden files QFileDialogDesconhecidoUnknown QFileDialog&Data de Modificao Date ModifiedQFileSystemModelTipoKindQFileSystemModel O Meu Computador My ComputerQFileSystemModelNomeNameQFileSystemModelTamanhoSizeQFileSystemModelTipoTypeQFileSystemModel&Tipo de Letra&Font QFontDialog&Tamanho&Size QFontDialog&Sublinhar &Underline QFontDialogEfeitosEffects QFontDialog*&Estilo Tipo de Letra Font st&yle QFontDialogAmostraSample QFontDialog0Seleccione Tipo de Letra Select Font QFontDialog&Riscar Stri&keout QFontDialog&&Sistema de EscritaWr&iting System QFontDialog:A mudana de pasta falhou: %1Changing directory failed: %1QFtp$Ligado ao servidorConnected to hostQFtp*Ligado ao servidor %1Connected to host %1QFtp@A ligao ao servidor falhou: %1Connecting to host failed: %1QFtpLigao fechadaConnection closedQFtp2Ligao de dados recusada&Connection refused for data connectionQFtp>Ligao ao servidor %1 recusadaConnection refused to host %1QFtp(Ligao a %1 fechadaConnection to %1 closedQFtp:A criao da pasta falhou: %1Creating directory failed: %1QFtpBA descarga do ficheiro falhou: %1Downloading file failed: %1QFtp,Servidor %1 encontrado Host %1 foundQFtp4Servidor %1 no encontradoHost %1 not foundQFtp&Servidor encontrado Host foundQFtp<A listagem da pasta falhou: %1Listing directory failed: %1QFtp2A autenticao falhou: %1Login failed: %1QFtpDesligado Not connectedQFtp:A remoo da pasta falhou: %1Removing directory failed: %1QFtp@A remoo do ficheiro falhou: %1Removing file failed: %1QFtp"Erro desconhecido Unknown errorQFtpJO carregamento do ficheiro falhou: %1Uploading file failed: %1QFtpComutarToggle QGroupBox"Erro desconhecido Unknown error QHostInfo.Servidor No encontradoHost not foundQHostInfoAgent:Tipo de endereo desconhecidoUnknown address typeQHostInfoAgent"Erro desconhecido Unknown errorQHostInfoAgent$Ligado ao servidorConnected to hostQHttp*Ligado ao servidor %1Connected to host %1QHttpLigao fechadaConnection closedQHttp Ligao recusadaConnection refusedQHttp(Ligao a %1 fechadaConnection to %1 closedQHttp(O pedido HTTP falhouHTTP request failedQHttp,Servidor %1 encontrado Host %1 foundQHttp4Servidor %1 no encontradoHost %1 not foundQHttp&Servidor encontrado Host foundQHttp6Corpo parcial HTTP invlidoInvalid HTTP chunked bodyQHttpFCabealho de resposta HTTP invlidoInvalid HTTP response headerQHttp4Nenhum servidor para ligarNo server set to connect toQHttpPedido abortadoRequest abortedQHttpVO servidor fechou a ligao inesperadamente%Server closed connection unexpectedlyQHttp"Erro desconhecido Unknown errorQHttp4Tamanho de contedo erradoWrong content lengthQHttpJNo foi possvel iniciar a transacoCould not start transaction QIBaseDriver:Erro ao abrir a base de dadosError opening database QIBaseDriverNNo foi possvel finalizar a transacoUnable to commit transaction QIBaseDriverHNo foi possvel anular a transacoUnable to rollback transaction QIBaseDriverFNo foi possvel alocar a expressoCould not allocate statement QIBaseResultbNo foi possvel descrever a expresso de entrada"Could not describe input statement QIBaseResultLNo foi possvel descrever a expressoCould not describe statement QIBaseResultTNo foi possvel obter o elemento seguinteCould not fetch next item QIBaseResultDNo foi possvel encontrar o arrayCould not find array QIBaseResultPNo foi possvel obter os dados do arrayCould not get array data QIBaseResultTNo foi possvel obter informao da queryCould not get query info QIBaseResult\No foi possvel obter informao da expressoCould not get statement info QIBaseResultJNo foi possvel preparar a expressoCould not prepare statement QIBaseResultJNo foi possvel iniciar a transacoCould not start transaction QIBaseResultFNo foi possvel fechar a expressoUnable to close statement QIBaseResultNNo foi possvel finalizar a transacoUnable to commit transaction QIBaseResult:No foi possvel criar o BLOBUnable to create BLOB QIBaseResultBNo foi possvel executar a queryUnable to execute query QIBaseResult:No foi possvel abrir o BLOBUnable to open BLOB QIBaseResult6No foi possvel ler o BLOBUnable to read BLOB QIBaseResult@No foi possvel escrever o BLOBUnable to write BLOB QIBaseResult8Dispositivo sem espao livreNo space left on device QIODevice:Ficheiro ou pasta inexistenteNo such file or directory QIODevice Permisso negadaPermission denied QIODevice8Demasiados ficheiros abertosToo many open files QIODevice"Erro desconhecido Unknown error QIODevice4Mtodo de entrada Max OS XMac OS X input method QInputContext2Mtodo de entrada WindowsWindows input method QInputContextXIMXIM QInputContext*Mtodo de entrada XIMXIM input method QInputContextdDados de verificao do plugin incorrectos em '%1')Plugin verification data mismatch in '%1'QLibraryO plugin '%1' usa uma biblioteca Qt incompatvel. (%2.%3.%4) [%5]=The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5]QLibraryO plugin '%1' usa uma biblioteca Qt incompatvel. A chave de compilao esperada "%2", ficou "%3"OThe plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3"QLibrary"Erro desconhecido Unknown errorQLibrary&Copiar&Copy QLineEdit Co&lar&Paste QLineEdit&Refazer&Redo QLineEdit&Desfazer&Undo QLineEditCor&tarCu&t QLineEdit ApagarDelete QLineEdit Seleccionar Tudo Select All QLineEditJNo foi possvel iniciar a transacoUnable to begin transaction QMYSQLDriverNNo foi possvel finalizar a transacoUnable to commit transaction QMYSQLDriverLNo foi possvel estabelecer a ligaoUnable to connect QMYSQLDriverPNo foi possvel abrir a base de dados 'Unable to open database ' QMYSQLDriverHNo foi possvel anular a transacoUnable to rollback transaction QMYSQLDriverjNo foi possvel fazer a ligao dos valores externosUnable to bind outvalues QMYSQLResultRNo foi possvel fazer a ligao do valorUnable to bind value QMYSQLResultBNo foi possvel executar a queryUnable to execute query QMYSQLResultJNo foi possvel executar a expressoUnable to execute statement QMYSQLResult8No foi possvel obter dadosUnable to fetch data QMYSQLResultJNo foi possvel preparar a expressoUnable to prepare statement QMYSQLResultLNo foi possvel restaurar a expressoUnable to reset statement QMYSQLResultHNo foi possvel guardar o resultadoUnable to store result QMYSQLResultfNo foi possvel guardar os resultados da expresso!Unable to store statement results QMYSQLResult%1 - [%2] %1 - [%2] QMdiSubWindow&Fechar&Close QMdiSubWindow &Mover&Move QMdiSubWindow&Restaurar&Restore QMdiSubWindow&Tamanho&Size QMdiSubWindow FecharClose QMdiSubWindow AjudaHelp QMdiSubWindowMa&ximizar Ma&ximize QMdiSubWindowMaximizarMaximize QMdiSubWindowMenuMenu QMdiSubWindowMi&nimizar Mi&nimize QMdiSubWindowMinimizarMinimize QMdiSubWindowRestaurar Baixo Restore Down QMdiSubWindow&Permanecer no &Topo Stay on &Top QMdiSubWindow FecharCloseQMenuExecutarExecuteQMenu AbrirOpenQMenuAcerca do QtAbout Qt QMessageBox AjudaHelp QMessageBox.No Mostrar Detalhes...Hide Details... QMessageBoxOKOK QMessageBox&Mostrar Detalhes...Show Details... QMessageBox8Seleccione Mtodo de Entrada Select IMQMultiInputContextDSeleccionador de mtodo de entradaMultiple input method switcherQMultiInputContextPluginSeleccionador de mtodo de entrada que utiliza o menu de contexto dos elementos de textoMMultiple input method switcher that uses the context menu of the text widgetsQMultiInputContextPlugin\Outro 'socket' j est escuta no mesmo porto4Another socket is already listening on the same portQNativeSocketEngineTentativa de utilizao de 'socket' IPv6 numa plataforma sem suporte IPv6=Attempt to use IPv6 socket on a platform with no IPv6 supportQNativeSocketEngine Ligao recusadaConnection refusedQNativeSocketEngine Ligao expiradaConnection timed outQNativeSocketEngineLDatagrama demasiado grande para enviarDatagram was too large to sendQNativeSocketEngine(Mquina inalcanvelHost unreachableQNativeSocketEngine<Descritor de 'socket' invlidoInvalid socket descriptorQNativeSocketEngineErro de rede Network errorQNativeSocketEngine2Operao de rede expiradaNetwork operation timed outQNativeSocketEngine"Rede inalcanvelNetwork unreachableQNativeSocketEngine0Operao em no 'socket'Operation on non-socketQNativeSocketEngineSem recursosOut of resourcesQNativeSocketEngine Permisso negadaPermission deniedQNativeSocketEngine>Tipo de protocolo no suportadoProtocol type not supportedQNativeSocketEngine<O endereo no est disponvelThe address is not availableQNativeSocketEngine2O endereo est protegidoThe address is protectedQNativeSocketEngineHO endereo de ligao j est em uso#The bound address is already in useQNativeSocketEngineBA mquina remota fechou a ligao%The remote host closed the connectionQNativeSocketEnginehNo foi possvel inicializar 'socket' de transmisso%Unable to initialize broadcast socketQNativeSocketEnginehNo foi possvel inicializar 'socket' no bloqueante(Unable to initialize non-blocking socketQNativeSocketEngineJNo foi possvel receber uma mensagemUnable to receive a messageQNativeSocketEngineHNo foi possvel enviar uma mensagemUnable to send a messageQNativeSocketEngine2No foi possvel escreverUnable to writeQNativeSocketEngine"Erro desconhecido Unknown errorQNativeSocketEngineDOperao de 'socket' no suportadaUnsupported socket operationQNativeSocketEngineJNo foi possvel iniciar a transacoUnable to begin transaction QOCIDriver8No foi possvel inicializarUnable to initialize QOCIDriver6No foi possvel autenticarUnable to logon QOCIDriverFNo foi possvel alocar a expressoUnable to alloc statement QOCIResultNo foi possvel fazer a licao da coluna para execuo 'batch''Unable to bind column for batch execute QOCIResultVNo foi possvel fazer o ligamento do valorUnable to bind value QOCIResult`No foi possvel executar a expresso de 'batch'!Unable to execute batch statement QOCIResultJNo foi possvel executar a expressoUnable to execute statement QOCIResultFNo foi possvel passar ao seguinteUnable to goto next QOCIResultJNo foi possvel preparar a expressoUnable to prepare statement QOCIResultNNo foi possvel finalizar a transacoUnable to commit transaction QODBCDriver,No foi possvel ligarUnable to connect QODBCDriverfNo foi possvel desactivar finalizao automticaUnable to disable autocommit QODBCDriver^No foi possvel activar finalizao automticaUnable to enable autocommit QODBCDriverHNo foi possvel anular a transacoUnable to rollback transaction QODBCDriver(QODBCResult::reset: No foi possvel definir 'SQL_CURSOR_STATIC' como atributo da expresso. Por favor verifique a configurao do seu 'driver' ODBCyQODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration QODBCResult\No foi possvel fazer o ligamento da varivelUnable to bind variable QODBCResultJNo foi possvel executar a expressoUnable to execute statement QODBCResultBObteno do primeiro no possvelUnable to fetch first QODBCResultBNo foi possvel obter o seguinteUnable to fetch next QODBCResultJNo foi possvel preparar a expressoUnable to prepare statement QODBCResult IncioHomeQObjectNomeNameQPPDOptionsModel ValorValueQPPDOptionsModelJNo foi possvel iniciar a transacoCould not begin transaction QPSQLDriverNNo foi possvel finalizar a transacoCould not commit transaction QPSQLDriverHNo foi possvel anular a transacoCould not rollback transaction QPSQLDriver,No foi possvel ligarUnable to connect QPSQLDriver@No foi possvel criar a 'query'Unable to create query QPSQLResultPaisagem LandscapeQPageSetupWidgetTamanho pgina: Page size:QPageSetupWidgetFonte papel: Paper source:QPageSetupWidgetRetratoPortraitQPageSetupWidget"Erro desconhecido Unknown error QPluginLoader@%1 j existe. Deseja substituir?/%1 already exists. Do you want to overwrite it? QPrintDialog@<qt>Deseja gravar por cima?</qt>%Do you want to overwrite it? QPrintDialog$A0 (841 x 1189 mm)A0 (841 x 1189 mm) QPrintDialog"A1 (594 x 841 mm)A1 (594 x 841 mm) QPrintDialog"A2 (420 x 594 mm)A2 (420 x 594 mm) QPrintDialog"A3 (297 x 420 mm)A3 (297 x 420 mm) QPrintDialogPA4 (210 x 297 mm, 8.26 x 11.7 polegadas)%A4 (210 x 297 mm, 8.26 x 11.7 inches) QPrintDialog"A5 (148 x 210 mm)A5 (148 x 210 mm) QPrintDialog"A6 (105 x 148 mm)A6 (105 x 148 mm) QPrintDialog A7 (74 x 105 mm)A7 (74 x 105 mm) QPrintDialogA8 (52 x 74 mm)A8 (52 x 74 mm) QPrintDialogA9 (37 x 52 mm)A9 (37 x 52 mm) QPrintDialog,Nomes Alternativos: %1 Aliases: %1 QPrintDialog&B0 (1000 x 1414 mm)B0 (1000 x 1414 mm) QPrintDialog$B1 (707 x 1000 mm)B1 (707 x 1000 mm) QPrintDialog B10 (31 x 44 mm)B10 (31 x 44 mm) QPrintDialog"B2 (500 x 707 mm)B2 (500 x 707 mm) QPrintDialog"B3 (353 x 500 mm)B3 (353 x 500 mm) QPrintDialog"B4 (250 x 353 mm)B4 (250 x 353 mm) QPrintDialogPB5 (176 x 250 mm, 6.93 x 9.84 polegadas)%B5 (176 x 250 mm, 6.93 x 9.84 inches) QPrintDialog"B6 (125 x 176 mm)B6 (125 x 176 mm) QPrintDialog B7 (88 x 125 mm)B7 (88 x 125 mm) QPrintDialogB8 (62 x 88 mm)B8 (62 x 88 mm) QPrintDialogB9 (44 x 62 mm)B9 (44 x 62 mm) QPrintDialog$C5E (163 x 229 mm)C5E (163 x 229 mm) QPrintDialog$DLE (110 x 220 mm)DLE (110 x 220 mm) QPrintDialogXExecutivo (7.5 x 10 polegadas, 191 x 254 mm))Executive (7.5 x 10 inches, 191 x 254 mm) QPrintDialogNo possvel escrever no ficheiro %1. Por favor escolha um nome diferente.=File %1 is not writable. Please choose a different file name. QPrintDialog"O ficheiro existe File exists QPrintDialog(Folio (210 x 330 mm)Folio (210 x 330 mm) QPrintDialog*Ledger (432 x 279 mm)Ledger (432 x 279 mm) QPrintDialogPLegal (8.5 x 14 polegadas, 216 x 356 mm)%Legal (8.5 x 14 inches, 216 x 356 mm) QPrintDialogPCarta (8.5 x 11 polegadas, 216 x 279 mm)&Letter (8.5 x 11 inches, 216 x 279 mm) QPrintDialogOKOK QPrintDialogImprimirPrint QPrintDialog4Imprimir Para Ficheiro ...Print To File ... QPrintDialogImprimir todas Print all QPrintDialog&Seleco de pginas Print range QPrintDialog*Seleco de ImpressoPrint selection QPrintDialog.Tablide (279 x 432 mm)Tabloid (279 x 432 mm) QPrintDialogJEnvelope #10 Comum EUA (105 x 241 mm)%US Common #10 Envelope (105 x 241 mm) QPrintDialog"ligado localmentelocally connected QPrintDialogdesconhecidounknown QPrintDialog FecharCloseQPrintPreviewDialogPaisagem LandscapeQPrintPreviewDialogRetratoPortraitQPrintPreviewDialog JuntarCollateQPrintSettingsOutput CpiasCopiesQPrintSettingsOutput OpesOptionsQPrintSettingsOutputPginas de Pages fromQPrintSettingsOutputImprimir todas Print allQPrintSettingsOutput&Seleco de pginas Print rangeQPrintSettingsOutputSeleco SelectionQPrintSettingsOutputatoQPrintSettingsOutputImpressoraPrinter QPrintWidgetCancelarCancelQProgressDialog AbrirOpen QPushButtonActivarCheck QRadioButtonDm sintaxe de classe de caracteresbad char class syntaxQRegExp2m sintaxe de antecipaobad lookahead syntaxQRegExp.m sintaxe de repetiobad repetition syntaxQRegExp^funcionalidade desactivada est a ser utilizadadisabled feature usedQRegExp(valor octal invlidoinvalid octal valueQRegExp0limite interno alcanadomet internal limitQRegExp:delimitador esquerdo em faltamissing left delimQRegExpsem errosno error occurredQRegExpfim inesperadounexpected endQRegExp:Erro ao abrir a base de dadosError opening databaseQSQLite2DriverJNo foi possvel iniciar a transacoUnable to begin transactionQSQLite2DriverNNo foi possvel finalizar a transacoUnable to commit transactionQSQLite2DriverJNo foi possvel executar a expressoUnable to execute statementQSQLite2ResultHNo foi possvel obter os resultadosUnable to fetch resultsQSQLite2Result<Erro ao fechar a base de dadosError closing database QSQLiteDriver:Erro ao abrir a base de dadosError opening database QSQLiteDriverJNo foi possvel iniciar a transacoUnable to begin transaction QSQLiteDriverNNo foi possvel finalizar a transacoUnable to commit transaction QSQLiteDriverVIncorrespondncia de contagem de parmetrosParameter count mismatch QSQLiteResult^No foi possvel fazer a ligao dos parametrosUnable to bind parameters QSQLiteResultJNo foi possvel executar a expressoUnable to execute statement QSQLiteResult<No foi possvel obter a linhaUnable to fetch row QSQLiteResultLNo foi possvel restaurar a expressoUnable to reset statement QSQLiteResult FecharCloseQScriptDebuggerCodeFinderWidgetNomeNameQScriptDebuggerLocalsModel ValorValueQScriptDebuggerLocalsModelNomeNameQScriptDebuggerStackModelProcurarSearchQScriptEngineDebugger FecharCloseQScriptNewBreakpointWidget FundoBottom QScrollBarBorda esquerda Left edge QScrollBarLinha abaixo Line down QScrollBarLinha acimaLine up QScrollBar"Pgina para baixo Page down QScrollBar(Pgina para esquerda Page left QScrollBar&Pgina para direita Page right QScrollBar Pgina para cimaPage up QScrollBarPosioPosition QScrollBarBorda direita Right edge QScrollBar&Deslizar para baixo Scroll down QScrollBarDeslizar aqui Scroll here QScrollBar,Deslizar para esquerda Scroll left QScrollBar.Deslizar para a direita Scroll right QScrollBar$Deslizar para cima Scroll up QScrollBarTopoTop QScrollBar++ QShortcutAltAlt QShortcutAnteriorBack QShortcutBackspace Backspace QShortcutBacktabBacktab QShortcutBass Boost Bass Boost QShortcutBass Baixo Bass Down QShortcutBass CimaBass Up QShortcut ChamarCall QShortcutCaps Lock Caps Lock QShortcutCapsLockCapsLock QShortcut LimparClear QShortcut FecharClose QShortcutContexto1Context1 QShortcutContexto2Context2 QShortcutContexto3Context3 QShortcutContexto4Context4 QShortcutCtrlCtrl QShortcut DeleteDel QShortcut DeleteDelete QShortcut BaixoDown QShortcutEndEnd QShortcut EnterEnter QShortcutEscEsc QShortcut EscapeEscape QShortcutF%1F%1 QShortcutFavoritos Favorites QShortcutInverterFlip QShortcutSeguinteForward QShortcutDesligarHangup QShortcut AjudaHelp QShortcutHomeHome QShortcut Pgina Principal Home Page QShortcut InsertIns QShortcut InsertInsert QShortcutExecutar (0) Launch (0) QShortcutExecutar (1) Launch (1) QShortcutExecutar (2) Launch (2) QShortcutExecutar (3) Launch (3) QShortcutExecutar (4) Launch (4) QShortcutExecutar (5) Launch (5) QShortcutExecutar (6) Launch (6) QShortcutExecutar (7) Launch (7) QShortcutExecutar (8) Launch (8) QShortcutExecutar (9) Launch (9) QShortcutExecutar (A) Launch (A) QShortcutExecutar (B) Launch (B) QShortcutExecutar (C) Launch (C) QShortcutExecutar (D) Launch (D) QShortcutExecutar (E) Launch (E) QShortcutExecutar (F) Launch (F) QShortcut&Correio Electrnico Launch Mail QShortcut Mdia Launch Media QShortcutEsquerdaLeft QShortcutMdia Seguinte Media Next QShortcutTocar Mdia Media Play QShortcutMdia AnteriorMedia Previous QShortcutGravao Mdia Media Record QShortcutParar Mdia Media Stop QShortcutMenuMenu QShortcutMetaMeta QShortcutNoNo QShortcutNum LockNum Lock QShortcutNum LockNumLock QShortcutNumber Lock Number Lock QShortcutAbrir EndereoOpen URL QShortcutPage Down Page Down QShortcutPage UpPage Up QShortcut PausePause QShortcut PgDownPgDown QShortcutPgUpPgUp QShortcut PrintPrint QShortcutPrint Screen Print Screen QShortcutRefrescarRefresh QShortcut ReturnReturn QShortcutDireitaRight QShortcut GravarSave QShortcutScroll Lock Scroll Lock QShortcutScrollLock ScrollLock QShortcutProcurarSearch QShortcut SelectSelect QShortcut ShiftShift QShortcut SpaceSpace QShortcutHibernaoStandby QShortcut PararStop QShortcut SysReqSysReq QShortcutSystem RequestSystem Request QShortcutTabTab QShortcutTreble Baixo Treble Down QShortcutTreble Cima Treble Up QShortcutCimaUp QShortcutVolume Cima Volume Down QShortcutVolume Mute Volume Mute QShortcutVolume Baixo Volume Up QShortcutSimYes QShortcut"Pgina para baixo Page downQSlider(Pgina para esquerda Page leftQSlider&Pgina para direita Page rightQSlider Pgina para cimaPage upQSliderPosioPositionQSlider2Operao de rede expiradaNetwork operation timed outQSocks5SocketEngineCancelarCancelQSoftKeyManagerSairExitQSoftKeyManagerOKOKQSoftKeyManager OpesOptionsQSoftKeyManager SelectSelectQSoftKeyManager MenosLessQSpinBoxMaisMoreQSpinBoxCancelarCancelQSql.Cancelar as alteraes?Cancel your edits?QSqlConfirmarConfirmQSql ApagarDeleteQSql(Apagar este registo?Delete this record?QSqlInserirInsertQSqlNoNoQSql*Gravar as alteraes? Save edits?QSqlActualizarUpdateQSqlSimYesQSql"Erro desconhecido Unknown error QSslSocket"Erro desconhecido Unknown error QStateMachine:Erro ao abrir a base de dadosError opening database QSymSQLDriverJNo foi possvel iniciar a transacoUnable to begin transaction QSymSQLDriverVIncorrespondncia de contagem de parmetrosParameter count mismatch QSymSQLResult^No foi possvel fazer a ligao dos parametrosUnable to bind parameters QSymSQLResult<No foi possvel obter a linhaUnable to fetch row QSymSQLResultLNo foi possvel restaurar a expressoUnable to reset statement QSymSQLResult\Outro 'socket' j est escuta no mesmo porto4Another socket is already listening on the same portQSymbianSocketEngineTentativa de utilizao de 'socket' IPv6 numa plataforma sem suporte IPv6=Attempt to use IPv6 socket on a platform with no IPv6 supportQSymbianSocketEngine Ligao recusadaConnection refusedQSymbianSocketEngine Ligao expiradaConnection timed outQSymbianSocketEngineLDatagrama demasiado grande para enviarDatagram was too large to sendQSymbianSocketEngine(Mquina inalcanvelHost unreachableQSymbianSocketEngine<Descritor de 'socket' invlidoInvalid socket descriptorQSymbianSocketEngineErro de rede Network errorQSymbianSocketEngine2Operao de rede expiradaNetwork operation timed outQSymbianSocketEngine"Rede inalcanvelNetwork unreachableQSymbianSocketEngine0Operao em no 'socket'Operation on non-socketQSymbianSocketEngineSem recursosOut of resourcesQSymbianSocketEngine Permisso negadaPermission deniedQSymbianSocketEngine>Tipo de protocolo no suportadoProtocol type not supportedQSymbianSocketEngine<O endereo no est disponvelThe address is not availableQSymbianSocketEngine2O endereo est protegidoThe address is protectedQSymbianSocketEngineHO endereo de ligao j est em uso#The bound address is already in useQSymbianSocketEngineBA mquina remota fechou a ligao%The remote host closed the connectionQSymbianSocketEnginehNo foi possvel inicializar 'socket' de transmisso%Unable to initialize broadcast socketQSymbianSocketEnginehNo foi possvel inicializar 'socket' no bloqueante(Unable to initialize non-blocking socketQSymbianSocketEngineJNo foi possvel receber uma mensagemUnable to receive a messageQSymbianSocketEngineHNo foi possvel enviar uma mensagemUnable to send a messageQSymbianSocketEngine2No foi possvel escreverUnable to writeQSymbianSocketEngine"Erro desconhecido Unknown errorQSymbianSocketEngineDOperao de 'socket' no suportadaUnsupported socket operationQSymbianSocketEngineLNo foi possvel estabelecer a ligaoUnable to open connection QTDSDriverRNo foi possvel utilizar a base de dadosUnable to use database QTDSDriverActivarActivateQTabBar FecharCloseQTabBarPressionarPressQTabBar,Deslizar para Esquerda Scroll LeftQTabBar*Deslizar para Direita Scroll RightQTabBar&Copiar&Copy QTextControl Co&lar&Paste QTextControl&Refazer&Redo QTextControl&Desfazer&Undo QTextControl<Copiar &Localizao da LigaoCopy &Link Location QTextControlCor&tarCu&t QTextControl ApagarDelete QTextControl Seleccionar Tudo Select All QTextControl AbrirOpen QToolButtonPressionarPress QToolButton@Esta plataforma no suporta IPv6#This platform does not support IPv6 QUdpSocketRefazerDefault text for redo actionRedo QUndoGroupDesfazerDefault text for undo actionUndo QUndoGroup<vazio> QUndoModelRefazerDefault text for redo actionRedo QUndoStackDesfazerDefault text for undo actionUndo QUndoStackHInserir carcter de controlo Unicode Insert Unicode control characterQUnicodeControlCharacterMenuVLRE Incio de encaixe esquerda-para-direita$LRE Start of left-to-right embeddingQUnicodeControlCharacterMenu>LRM Marca esquerda-para-direitaLRM Left-to-right markQUnicodeControlCharacterMenu`LRO Incio de sobreposio esquerda-para-direita#LRO Start of left-to-right overrideQUnicodeControlCharacterMenu<PDF Formatao pop direccionalPDF Pop directional formattingQUnicodeControlCharacterMenuVRLE Incio de encaixe direita-para-esquerda$RLE Start of right-to-left embeddingQUnicodeControlCharacterMenu>RLM Marca direita-para-esquerdaRLM Right-to-left markQUnicodeControlCharacterMenu`RLO Incio de sobreposio direita-para-esquerda#RLO Start of right-to-left overrideQUnicodeControlCharacterMenu>ZWJ Ligador de comprimento zeroZWJ Zero width joinerQUnicodeControlCharacterMenuHZWNJ No-ligador de comprimento zeroZWNJ Zero width non-joinerQUnicodeControlCharacterMenu>ZWSP Espao de comprimento zeroZWSP Zero width spaceQUnicodeControlCharacterMenu FundoBottomQWebPageIgnorarIgnoreQWebPageIgnorar Ignore Grammar context menu itemIgnoreQWebPageBorda esquerda Left edgeQWebPage"Pgina para baixo Page downQWebPage(Pgina para esquerda Page leftQWebPage&Pgina para direita Page rightQWebPage Pgina para cimaPage upQWebPage PausePauseQWebPageRestaurarResetQWebPageBorda direita Right edgeQWebPage&Deslizar para baixo Scroll downQWebPageDeslizar aqui Scroll hereQWebPage,Deslizar para esquerda Scroll leftQWebPage.Deslizar para a direita Scroll rightQWebPage$Deslizar para cima Scroll upQWebPage Seleccionar Tudo Select AllQWebPage PararStopQWebPageTopoTopQWebPageDesconhecidoUnknownQWebPageO Que Isto? What's This?QWhatsThisAction**QWidget&Terminar&FinishQWizard &Ajuda&HelpQWizard&Avanar >&Next >QWizard< &Recuar< &BackQWizardCancelarCancelQWizard AjudaHelpQWizard%1 - [%2] %1 - [%2] QWorkspace&Fechar&Close QWorkspace &Mover&Move QWorkspace&Restaurar&Restore QWorkspace&Tamanho&Size QWorkspace&Sair Sombra&Unshade QWorkspace FecharClose QWorkspaceMa&ximizar Ma&ximize QWorkspaceMi&nimizar Mi&nimize QWorkspaceMinimizarMinimize QWorkspaceRestaurar Baixo Restore Down QWorkspaceSombr&aSh&ade QWorkspace&Permanecer no &Topo Stay on &Top QWorkspacedeclarao de codificao ou declarao nica esperada ao ler a declarao XMLYencoding declaration or standalone declaration expected while reading the XML declarationQXmlTerro na declarao de uma entidade externa3error in the text declaration of an external entityQXml6erro ao analisar comentrio$error occurred while parsing commentQXml6erro ao analisar o contedo$error occurred while parsing contentQXmlberro ao analisar a definio de tipo de documento5error occurred while parsing document type definitionQXml2erro ao analisar elemento$error occurred while parsing elementQXml6erro ao analisar referncia&error occurred while parsing referenceQXml<erro disparado pelo consumidorerror triggered by consumerQXmlreferncia de entidade geral analisada externa no permitida na DTD;external parsed general entity reference not allowed in DTDQXmlreferncia de entidade geral analisada externa no permitida no valor do atributoGexternal parsed general entity reference not allowed in attribute valueQXmlrreferncia de entidade geral interna no permitida na DTD4internal general entity reference not allowed in DTDQXmlVnome invlido de instruo de processamento'invalid name for processing instructionQXml(uma letra esperadaletter is expectedQXmlTmais de uma definio de tipo de documento&more than one document type definitionQXml.no ocorreu nenhum errono error occurredQXml(entidades recursivasrecursive entitiesQXmlbdeclarao nica esperada ao ler a declarao XMLAstandalone declaration expected while reading the XML declarationQXml2m combinao de etiqueta tag mismatchQXml&carcter inesperadounexpected characterQXml4fim de ficheiro inesperadounexpected end of fileQXmlnreferncia de entidade no analisada em contexto errado*unparsed entity reference in wrong contextQXmlNverso esperada ao ler a declarao XML2version expected while reading the XML declarationQXmlDvalor errado para declarao nica&wrong value for standalone declarationQXml SelectSelectQmlJSDebugger::QmlToolBarx2goclient-4.1.2.3/res/i18n/qt_ru.qm0000644000000000000000000106323414447111613013677 0ustar fdfffi ffgl5r 8D:`:cBQB4`<%`Ƚy5> 4deDceeįDį~ @] ym W~R'^QWwAQ%PHt03!nrvS8$$&S.1(2Q(4Q(4(4'5(5(5*yJ*yT*y*T*0X|*0Ђ+Fd+F+Lг+f6a+f+zb+K +Tp+%+zc+6++#++eG+W+įKV+įT+įq+c334r77:9C;=;M@BjHC:C:{F0ikFn47Fn4G+H/!Hw9IHw9eHI'I\I`IJ+KJ+J6LHJ6dUJ6J6J6eJ6hJ6J6J6 J6 /J6J6JcbtJKQK TL "L*N1LZ"L4NLdLb;L M5MbMeM4M~dM?FNNB O|cPFENPFEgPFEԎPCbQ RR|;R̼eRS7S8^T^T2Tʴ1HTF+U?^U|U}0V1ӿV1 Vl>VV5$VV5WV$VmVE5W]WgWWT9WTWT6X~X97XX-X˙X81YWYYgY:6Y}Z+:Zg:ZkZZ P[;^[=w[f3?+[f3\\]4\]4H\]4wX\\!\\@atdgc<lG&t>w|^T|^|n|ANcZyvvS f'V)CBMdW^A4L52.%6CZdIAF=[UDgt+BI/É?y4XtD\D%2WRnɵnhɵn>JɵnDɵn\ɵnɵnɵnɵn:ɵnnuY*y B& BvB *T'7nUM1uslN)a.q'pTx۔ ƻ><H_sbBq8,,ɤW>L<߽p`55v7#Q̜%UT%UTy](Ŏ*4-cte`-ct.+2385vPg CjRllr_l2Ol2UoR]orpEpN0Ou&Sv̲{v̲|;w^~Ux2|{yihc6GNFI24I&`uW32h2W{'.RAi7Pt0\==NX dyȔ,T Utɷ~ʯ_e;Wy#^6J$urEt.`@H0QTV߮~SIR|QH  ~^ Yda $W!g)"l&Xd )\-(./=N?/Xt|01$<1$u5~#:su< J<3 =C>?2`?Nզ@V iB!IFR M<Nky UijW~]E`i`jtlglyzK+l}2oiavtyf vty3.$1!l%"u<,; 9Y4<)GSe |6%6d6ҥSA^'JT:RSTx=~~.9'vEE1{=w8A:^τ CnA&!F^[yLQtPmUnԠUtjX`0qme|MdOMkE"/E-dnwHw 6e.^0 IP 9ڎh-IX 45B!eF&)Al*/eA+ ,/,NW,1E6;;s; i:?4XByEc 'FIQbtK~NjOZf3\cI1`c`b8cփ/cT<f#g&4 jC^mn0qRqtuH:u(%{>}kaL}|R>A~q$_Ycyk:CVK&*$}$u 07+(A,.,ʁr^K2L֊duSXހ.? n_,@nhfqBQ&;yω#aeO-wGI+AS- nR7^0@'DH=&H?&mK,n.J/?@4r8wv?,CIxSalJKL MgO*R.|R>XXE%YM"YM-^trdKh^QiVnQnѾnY"r?csscs\w p#xB/^2,"%Nrۊcat;TN_] ]&I9@IIcIIIIlILINYIF( ZQI*\Y*i*y+")T))*()I,++,*,l+duD&uD26DtoS,4,U4,",!,O,X]k>`nrNttLVdJ.O_>Eq.ɘe#.˓E5$@  468GfR=fRG>* {<U;_B9N$-6cTpS^Pq)V1VLfRh|T,4y&O3 h 2 Q MQKU%MQF <bb? l("o$7$ق%CQ&~F&I)2N)!]+Ш,53 X5-8.X;_h?"^?>u9?%_FuKNtK-MN>RU5V|]=i]CeLg^4hk5y^N({yw?ʶJik5t75tF8:ΞG% n)nnصPǥ 9+9+M+DU`Cǩnt7{yTfՒ2;#/xAWr}9\r=sQEϾO6N!%`%*cp:{=,?0C-d53UüNELC^2ƨ4ƨP0˾D?hpҝz=0ҰoلR)]iTէ?O<؊=v؊=Z>ti}Bwzqܓ7jܳZߺサ'f<f~tU롥\`2Nv}mߏ^!5-dDDy   T T$ba~bv~b6o?)iMLt `!BA%??d'(]6)ўv+u04+3s,87/ /T/X14~6 9f8<dj? 2ϖAB>N!DERFg&G!GbLAUOrEPѧQ1 RC&$SnT U3UHUUyUT<^YĻZ`[[Ѭ]k*:]d^n#_PC_P_p`u>d`*d`Ҕe=i'i2kQm?$oNxy;]{?{M}u4}w}wD}wJ}ڊhs11p~ z~ ~Ě~ltIiru'{7p~ z~ %~ ~EByvttfYd&..E3"P iU>uk#5DؠYW^otYt.tftt9)-nl _ 4,Ga+/Usz:ȄFaC ʢkDʢʬƴhdl1daqd>dd0359AgэiDf+8L{NS`㵾 uOz|kCyJU5UdTVeLBhwO 2,%6 #- A y!+4,D/52j3g42J5@h6(7D9!:m:%T?;CU]CU>DE[zGmIN(J0JK@KQ~U|V7gW<(\ۺ\Doare nlg*.MLld `n8_^p&At@Ew>/y' |(^||}wZy}$}$D}$~9<4Dϗ:ӹZr~]hVND7L>{9KNqiLiZSnj0-nieK<pf+:E.·e··3ýj׳:Nj:nήT~d Lnc/0fCutnk-njee It;U N7E x~$ȥ-NvONUu9s%5T;M}* e~ri~7WԆ&b Ai9%dwb !D# #%%5%d"r'-..5kE=g== ?V?[@TCtI Efe\NP1PhV%*IV%+XU  7Z`awbD=7bGNfdfpgAFhIi$=knx1 z*2||QR*d~Jو5+UMcX(.)zc.54C5P^Bg))r)Xm!p^@enH]7[b†5giC+q~U%ʴ5eʴ5ʶg=5ϡ$aы#*D}^ :Ԅו۔#D$'NdpAF5NF5fZYp9R+>4NtIց Wus WMN `B bR bb b` b` d gUYy i3U kkw la}j lf ln ok+ qv qvڲ qzA& tN u xq( |o |# |{; ͧ Jn tA t Y ., #  _ )a F>    le̢ Yv  u/ Jo  w B ҉ 4. h, (5 > >qq < Uc kG M c5 E `"  nZx N  V) % u"  Y+ Y>( 0 KL  팤 E" l~.D %' MN 5 , t / C' K| =T q3  D' x }1 9! oE Ą  e #R )k */d + .>Z 5* 74 7u ;P jxm $N+_ # IX I_ I ;E~ 0 a  r f jV~ I( ! 'W  J; $e $ %p\D ,5 ,1 = ]w a | N4, t `5 Sd& nax " pm zn B} v< ȯ' tO $ l< poy zp6 ʀs ˔ }p PXD PK %Q / ~tI .~ 68 >> h v"; :b f 8@ f X 4@ U .  )& s; s ~ AA( 9P 1u u 9d 05 r! r m,D 5 !t #-t #-t} ' < 0N^> 5r :  AQ* CUY E9AQ IN L5 L~ LX L Mc\r OO O! P..q/ R SB VG+ WW X\ Z2 \Ot ]$iS `V c f)8 f) f=9 io>n j l#8` m`Q n|n w@ xR yrL {n3 >~K L  H6 H G [  n7 $ .@@ y G i; <P <[  L Uf   zdL %3 J;P J    t.% k ӇLz  MY J N>OA / ̺ C & w -D!. .S/ x ۷ܤ rf9 k{ kJ M U)3# } <Os f^  > 03j O  b $r8 * z+  &  1  I * 9NV % `N N 3 L s xH7 [ Iu  !pz $ %6br )Ε .a 2 7Fܧ <y =ю >)_ >* >,R >78 >H >S > >K >h >kd >L ?t| A^ DT3@ Fn1 G(a I]8 Ia- J> K K L² Mb: P@ QTV RV RV͍ RVؑ Rn S.N SG S T~- YӉ Yhe [ hۮI j7o_ m( pb4 sL! vB ] BE, ` Th~ T]H T2 Tl  F` j  =  o ,' ,0 S )d )d~J TY z .h .> .^ . . .| . .n )  K >  a az P yO % q e.3k x0 C '[ N   hN ɾd%2 ɾd't e ̈́^s > ҂Z Ӵ ء{ ߢ.I  >] % u t h 'D |  b#. H Xt n< 9 )}} t L aT+ / .} # :b3 Uqا  [; ʜ`\ f f f $т 3q <  @ $ o  z #$ #= %ni '.w (I$ED (N{ +>cc +k 0Eڔ 64 ;ɾ Cn Fg? K9 Ptf PtT R"y S,= T>, ci dB. fe * fe> g  g. hQ$. iFC# i i$ jN jy jӮX kGnD l"n m9 m9 Y nM s'~ u4 u3 uS v  v& v{ 6 w wD wq w}@ w}DJ w} yn |[  uB< #~ .; <? hj J9 b " | ^} %O  n ] }R R %7i P  xN "6K UX? ɰe F ri  X>e Mj bi Y &M xX D?  + t5f t5 5 * ?H >2 g~  )3 - P$RwwZ>Y< @ao |T[o,~ (6^<]n"gT[vI !a&-M*X*+%/EZ2/Es/Ew4Qt$7SjIEI_4"K GNOOY S5XRuqXRZo[ [ ֐a.a.La%!gcG i$"nyGBsW"v6` v<_QvɅEMy$y?."H~6>%+9>;3,=Q4x}N aNa'2/4d=~SHdN1^<58Ǘ:Z5DBWez{5ʖL3Ӯ`obӮ`Ӯ`A~3  rUݖ mU$ߍ[yɇ4^orFjsj  %; .|z 9  GlD~Js"#"#p$UC%4%4X'w7,-b-vG0i)/?0031c51cx2wT.>kDRF74UGMHCiJd5JmKJL$.Rl}W][{*Lb4rc5Xc5=cg3eiC[iTKlp(qiikv)ǛyCS{`fh{~a-#~516$|V&&DDD,E`l%{``nY[>)Onͣ6: t>bN|  Eß"~gdTLrZr%-1gkyE֠4U ڔ."H'T/344Ln'݋>BP˯j}t2^\YemdوUi 0:@KBL 2:;04:C Close Tab CloseButton<=5>?@545;5=>> Debugger::JSAgentWatchData([0AA82 @07<5@>< %1][Array of length %1]Debugger::JSAgentWatchData"$8:B82=0O >H81:0! Fake error! FakeReply,5:>@@5:B=K9 04@5A URL Invalid URL FakeReply ?@>3@0<<5 %1About %1MAC_APPLICATION_MENU!:@KBL %1Hide %1MAC_APPLICATION_MENU !:@KBL >AB0;L=K5 Hide OthersMAC_APPLICATION_MENU0AB@>9:8 &Preferences...MAC_APPLICATION_MENU025@H8BL %1Quit %1MAC_APPLICATION_MENU !;C61KServicesMAC_APPLICATION_MENU>:070BL 2A5Show AllMAC_APPLICATION_MENU.!?5F80;L=K5 2>7<>6=>AB8 AccessibilityPhonon::1I5=85 CommunicationPhonon::3@KGamesPhonon:: C7K:0MusicPhonon::#254><;5=8O NotificationsPhonon:: 845>VideoPhonon::<html>5@5:;NG5=85 =0 CAB@>9AB2> 2K2>40 72C:0 <b>%1</b><br/>, :>B>@>5 8<55B 2KAH89 ?@8>@8B5B 8;8 =0AB@>5=> 4;O >1@01>B:8 40==>3> ?>B>:0.</html>Switching to the audio playback device %1
which has higher preference or is specifically configured for this stream.Phonon::AudioOutput<html>5@5:;NG5=85 =0 72C:>2>5 CAB@>9AB2> <b>%1</b><br/>, :>B>@>5 AB0;> 4>ABC?=> 8 8<55B 2KAH89 ?@8>@8B5B.</html>xSwitching to the audio playback device %1
which just became available and has higher preference.Phonon::AudioOutput<html>2C:>2>5 CAB@>9AB2> <b>%1</b> =5 @01>B05B.<br/>C45B 8A?>;L7>20BLAO <b>%2</b>.</html>^The audio playback device %1 does not work.
Falling back to %2.Phonon::AudioOutput:>72@0I5=85 : CAB@>9AB2C %1Revert back to device '%1'Phonon::AudioOutput=8<0=85: >E>65, >A=>2=>9 <>4C;L GStreamer =5 CAB0=>2;5=. >445@6:0 2845> 8 0C48> >B:;NG5=0~Warning: You do not seem to have the base GStreamer plugins installed. All audio and video support has been disabledPhonon::Gstreamer::Backend=8<0=85: >E>65, ?0:5B gstreamer0.10-plugins-good =5 CAB0=>2;5=. 5:>B>@K5 2>7<>6=>AB8 2>A?@>872545=8O 2845> =54>ABC?=K.Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. Some video features have been disabled.Phonon::Gstreamer::BackendBACBAB2C5B =5>1E>48<K9 :>45:. 0< =C6=> CAB0=>28BL A;54CNI85 :>45:8 4;O 2>A?@>872545=8O 40==>3> A>45@68<>3>: %0`A required codec is missing. You need to install the following codec(s) to play this content: %0Phonon::Gstreamer::MediaObject52>7<>6=> =0G0BL 2>A?@>872545=85. @>25@LB5 ?@028;L=>ABL CAB0=>2:8 GStreamer 8 C1548B5AL, GB> ?0:5B libgstreamer-plugins-base CAB0=>2;5=.wCannot start playback. Check your GStreamer installation and make sure you have libgstreamer-plugins-base installed.Phonon::Gstreamer::MediaObject\5 C40;>AL 45:>48@>20BL 8AB>G=8: <5480-40==KE.Could not decode media source.Phonon::Gstreamer::MediaObjectN5 C40;>AL =09B8 8AB>G=8: <5480-40==KE.Could not locate media source.Phonon::Gstreamer::MediaObject5 C40;>AL >B:@KBL 72C:>2>5 CAB@>9AB2>. #AB@>9AB2> C65 8A?>;L7C5BAO.:Could not open audio device. The device is already in use.Phonon::Gstreamer::MediaObjectR5 C40;>AL >B:@KBL 8AB>G=8: <5480-40==KE.Could not open media source.Phonon::Gstreamer::MediaObjectP5:>@@5:B=K9 B8? 8AB>G=8:0 <5480-40==KE.Invalid source type.Phonon::Gstreamer::MediaObjectLBACBAB2C5B AF5=0@89 CAB0=>2:8 :>45:0.&Missing codec helper script assistant.Phonon::Gstreamer::MediaObjectN5 C40;>AL CAB0=>28BL <>4C;L :>45:0: %0.Plugin codec installation failed for codec: %0Phonon::Gstreamer::MediaObject>ABC? 70?@5IQ= Access denied Phonon::MMF#65 ACI5AB2C5BAlready exists Phonon::MMF*>A?@>872545=85 72C:0 Audio Output Phonon::MMFtC48>- 8;8 2845>-A>AB>2;ONI0O =5 <>65B 1KBL 2>A?@>872545=0-Audio or video components could not be played Phonon::MMF8H81:0 2>A?@>872545=8O 72C:0Audio output error Phonon::MMF@5 C40;>AL CAB0=>28BL A>548=5=85Could not connect Phonon::MMFH81:0 DRM DRM error Phonon::MMF(H81:0 45:>48@>20=8O Decoder error Phonon::MMF(!>548=5=85 @07>@20=> Disconnected Phonon::MMFA?>;L7C5BAOIn use Phonon::MMFL54>AB0B>G=0O A:>@>ABL ?5@540G8 40==KEInsufficient bandwidth Phonon::MMF,5:>@@5:B=K9 04@5A URL Invalid URL Phonon::MMF*5:>@@5:B=K9 ?@>B>:>;Invalid protocol Phonon::MMFBH81:0 H8@>:>25I0B5;L=>9 ?5@540G8Multicast error Phonon::MMF<H81:0 A5B52>3> >1<5=0 40==K<8Network communication error Phonon::MMF!5BL =54>ABC?=0Network unavailable Phonon::MMF5B >H81:8No error Phonon::MMF5 =0945=> Not found Phonon::MMF5 3>B>2> Not ready Phonon::MMF"5 ?>445@68205BAO Not supported Phonon::MMF*54>AB0B>G=> @5AC@A>2 Out of memory Phonon::MMF5@5?>;=5=85Overflow Phonon::MMFCBL =5 =0945=Path not found Phonon::MMF>ABC? 70?@5IQ=Permission denied Phonon::MMF*H81:0 ?@>:A8-A5@25@0Proxy server error Phonon::MMF>@>:A8-A5@25@ =5 ?>445@68205BAOProxy server not supported Phonon::MMF!83=0; A5@25@0 Server alert Phonon::MMFV>B>:>2>5 2>A?@>872545=85 =5 ?>445@68205BAOStreaming not supported Phonon::MMF@#AB@>9AB2> 2>A?@>872545=8O 72C:0The audio output device Phonon::MMF865 3@0=8FK Underflow Phonon::MMF.58725AB=0O >H81:0 (%1)Unknown error (%1) Phonon::MMF8H81:0 2>A?@>872545=8O 2845>Video output error Phonon::MMFH81:0 703@C7:8Download error Phonon::MMF::AbstractMediaPlayer4H81:0 >B:@KB8O 04@5A0 URLError opening URL Phonon::MMF::AbstractMediaPlayer*H81:0 >B:@KB8O D09;0Error opening file Phonon::MMF::AbstractMediaPlayer.H81:0 >B:@KB8O @5AC@A0Error opening resource Phonon::MMF::AbstractMediaPlayer^H81:0 >B:@KB8O 8AB>G=8:0: @5AC@A =5 1K; >B:@KB)Error opening source: resource not opened Phonon::MMF::AbstractMediaPlayer25 C40;>AL 703@C78BL :;8?Loading clip failed Phonon::MMF::AbstractMediaPlayer45 3>B>2 : 2>A?@>872545=8NNot ready to play Phonon::MMF::AbstractMediaPlayer2>A?@>872545=85 7025@H5=>Playback complete Phonon::MMF::AbstractMediaPlayerN5 C40;>AL CAB0=>28BL C@>25=L 3@><:>AB8Setting volume failed Phonon::MMF::AbstractMediaPlayer65 C40;>AL ?>;CG8BL ?>78F8NGetting position failed Phonon::MMF::AbstractVideoPlayer.5 C40;>AL >B:@KBL :;8?Opening clip failed Phonon::MMF::AbstractVideoPlayerP5 C40;>AL ?@8>AB0=>28BL 2>A?@>872545=85 Pause failed Phonon::MMF::AbstractVideoPlayer:5 C40;>AL CAB0=>28BL ?>78F8N Seek failed Phonon::MMF::AbstractVideoPlayer %1 F%1 HzPhonon::MMF::AudioEqualizer65 C40;>AL ?>;CG8BL ?>78F8NGetting position failedPhonon::MMF::AudioPlayer0H81:0 >B>1@065=8O 2845>Video display errorPhonon::MMF::DsaVideoPlayer:;NG5=>EnabledPhonon::MMF::EffectFactory8>MDD8F85=B 70BCE0=8O ' (%)Decay HF ratio (%) Phonon::MMF::EnvironmentalReverb(@5<O 70BCE0=8O (<A)Decay time (ms) Phonon::MMF::EnvironmentalReverb;>B=>ABL (%) Density (%) Phonon::MMF::EnvironmentalReverb 0AA5820=85 (%) Diffusion (%) Phonon::MMF::EnvironmentalReverb00BCE0=85 >B@065=89 (<A)Reflections delay (ms) Phonon::MMF::EnvironmentalReverb0#@>25=L >B@065=89 (<0@)Reflections level (mB) Phonon::MMF::EnvironmentalReverb"045@6:0 ME0 (<A)Reverb delay (ms) Phonon::MMF::EnvironmentalReverb$#@>25=L ME0 (<0@)Reverb level (mB) Phonon::MMF::EnvironmentalReverb(#@>25=L ' >B@065=89 Room HF level Phonon::MMF::EnvironmentalReverb0#@>25=L >B@065=89 (<0@)Room level (mB) Phonon::MMF::EnvironmentalReverbH81:0 >B:@KB8O 8AB>G=8:0: =5 C40;>AL >?@545;8BL B8? <5480-40==KE8Error opening source: media type could not be determinedPhonon::MMF::MediaObjectPH81:0 >B:@KB8O 8AB>G=8:0: A60BK9 @5AC@A,Error opening source: resource is compressedPhonon::MMF::MediaObject\H81:0 >B:@KB8O 8AB>G=8:0: =5:>@@5:B=K9 @5AC@A(Error opening source: resource not validPhonon::MMF::MediaObject`H81:0 >B:@KB8O 8AB>G=8:0: B8? =5 ?>445@68205BAO(Error opening source: type not supportedPhonon::MMF::MediaObjectR5 C40;>AL 7040BL C:070==CN B>G:C 4>ABC?0Failed to set requested IAPPhonon::MMF::MediaObject#@>25=L (%) Level (%)Phonon::MMF::StereoWidening0H81:0 >B>1@065=8O 2845>Video display errorPhonon::MMF::SurfaceVideoPlayer57 72C:0MutedPhonon::VolumeSliderA?>;L7C9B5 40==K9 @53C;OB>@ 4;O =0AB@>9:8 3@><:>AB8. @09=55 ;52>5 ?>;>65=85 A>>B25BAB2C5B 0%, :@09=55 ?@02>5 - %1%WUse this slider to adjust the volume. The leftmost position is 0%. The rightmost is %1%Phonon::VolumeSlider@><:>ABL: %1% Volume: %1%Phonon::VolumeSlider&%1, %2 =5 >?@545;Q=%1, %2 not definedQ3AccelR5>4=>7=0G=0O :><18=0F8O %1 =5 >1@01>B0=0Ambiguous %1 not handledQ3Accel#40;8BLDelete Q3DataTable5BFalse Q3DataTableAB028BLInsert Q3DataTable0True Q3DataTable1=>28BLUpdate Q3DataTablez%1 $09; =5 =0945=. @>25@LB5 ?@028;L=>ABL ?CB8 8 8<5=8 D09;0.+%1 File not found. Check path and filename. Q3FileDialog&#40;8BL&Delete Q3FileDialog&5B&No Q3FileDialog&&OK Q3FileDialog&B:@KBL&Open Q3FileDialog&5@58<5=>20BL&Rename Q3FileDialog&!>E@0=8BL&Save Q3FileDialog"&5 C?>@O4>G820BL &Unsorted Q3FileDialog&0&Yes Q3FileDialogb<qt>K 459AB28B5;L=> E>B8B5 C40;8BL %1 %2?</qt>1Are you sure you wish to delete %1 "%2"? Q3FileDialogA5 D09;K (*) All Files (*) Q3FileDialogA5 D09;K (*.*)All Files (*.*) Q3FileDialogB@81CBK Attributes Q3FileDialog 0704Back Q3FileDialog B<5=0Cancel Q3FileDialog>>?8@>20BL 8;8 ?5@5<5AB8BL D09;Copy or Move a File Q3FileDialog!>740BL ?0?:CCreate New Folder Q3FileDialog0B0Date Q3FileDialog#40;8BL %1 Delete %1 Q3FileDialog>4@>1=K9 284 Detail View Q3FileDialog0B0;>3Dir Q3FileDialog0B0;>38 Directories Q3FileDialog0B0;>3: Directory: Q3FileDialog H81:0Error Q3FileDialog$09;File Q3FileDialog&<O D09;0: File &name: Q3FileDialog&"8? D09;0: File &type: Q3FileDialog09B8 :0B0;>3Find Directory Q3FileDialog5B 4>ABC?0 Inaccessible Q3FileDialog !?8A>: List View Q3FileDialog&0?:0: Look &in: Q3FileDialog<OName Q3FileDialog>20O ?0?:0 New Folder Q3FileDialog>20O ?0?:0 %1 New Folder %1 Q3FileDialog>20O ?0?:0 1 New Folder 1 Q3FileDialog*25@E =0 >48= C@>25=LOne directory up Q3FileDialogB:@KBLOpen Q3FileDialogB:@KBL Open  Q3FileDialog<@54?@>A<>B@ A>45@68<>3> D09;0Preview File Contents Q3FileDialog>@54?@>A<>B@ 8=D>@<0F88 > D09;5Preview File Info Q3FileDialog&1=>28BLR&eload Q3FileDialog">;L:> GB5=85 Read-only Q3FileDialog'B5=85 8 70?8AL Read-write Q3FileDialog'B5=85: %1Read: %1 Q3FileDialog!>E@0=8BL :0:Save As Q3FileDialogK1@0BL :0B0;>3Select a Directory Q3FileDialog.>:070BL A:&@KBK5 D09;KShow &hidden files Q3FileDialog  07<5@Size Q3FileDialog#?>@O4>G8BLSort Q3FileDialog> &40B5 Sort by &Date Q3FileDialog> &8<5=8 Sort by &Name Q3FileDialog> &@07<5@C Sort by &Size Q3FileDialog!?5FD09;Special Q3FileDialog"!AK;:0 =0 :0B0;>3Symlink to Directory Q3FileDialog!AK;:0 =0 D09;Symlink to File Q3FileDialog$!AK;:0 =0 A?5FD09;Symlink to Special Q3FileDialog"8?Type Q3FileDialog">;L:> 70?8AL Write-only Q3FileDialog0?8AL: %1 Write: %1 Q3FileDialog:0B0;>3 the directory Q3FileDialogD09;the file Q3FileDialog AAK;:C the symlink Q3FileDialog:5 C40;>AL A>740BL :0B0;>3 %1Could not create directory %1 Q3LocalFs*5 C40;>AL >B:@KBL %1Could not open %1 Q3LocalFs>5 C40;>AL ?@>G8B0BL :0B0;>3 %1Could not read directory %1 Q3LocalFsL5 C40;>AL C40;8BL D09; 8;8 :0B0;>3 %1%Could not remove file or directory %1 Q3LocalFs@5 C40;>AL ?5@58<5=>20BL %1 2 %2Could not rename %1 to %2 Q3LocalFs,5 C40;>AL 70?8A0BL %1Could not write %1 Q3LocalFs0AB@>8BL... Customize... Q3MainWindowK@>2=OBLLine up Q3MainWindowD?5@0F8O >AB0=>2;5=0 ?>;L7>20B5;5<Operation stopped by the userQ3NetworkProtocol B<5=0CancelQ3ProgressDialog@8<5=8BLApply Q3TabDialog B<5=0Cancel Q3TabDialog> C<>;G0=8NDefaults Q3TabDialog!?@02:0Help Q3TabDialogOK Q3TabDialog&>?8@>20BL&Copy Q3TextEdit&AB028BL&Paste Q3TextEdit&&>2B>@8BL 459AB285&Redo Q3TextEdit$&B<5=8BL 459AB285&Undo Q3TextEditG8AB8BLClear Q3TextEdit&K@570BLCu&t Q3TextEditK45;8BL 2AQ Select All Q3TextEdit0:@KBLClose Q3TitleBarK:@K205B >:=>Closes the window Q3TitleBarB!>45@68B :><0=4K C?@02;5=8O >:=><*Contains commands to manipulate the window Q3TitleBarrB>1@0605B =0720=85 >:=0 8 A>45@68B :><0=4K C?@02;5=8O 8<FDisplays the name of the window and contains controls to manipulate it Q3TitleBar@ 072>@0G8205B >:=> =0 25AL M:@0=Makes the window full screen Q3TitleBar 0A?0E=CBLMaximize Q3TitleBar!25@=CBLMinimize Q3TitleBar !2>@0G8205B >:=>Moves the window out of the way Q3TitleBard>72@0I05B @0A?0E=CB>5 >:=> 2 =>@<0;L=>5 A>AB>O=85&Puts a maximized window back to normal Q3TitleBar`>72@0I05B A2Q@=CB>5 >:=> 2 =>@<0;L=>5 A>AB>O=85&Puts a minimized window back to normal Q3TitleBar>AAB0=>28BL Restore down Q3TitleBar>AAB0=>28BL Restore up Q3TitleBar!8AB5<=>5 <5=NSystem Q3TitleBar>;LH5...More... Q3ToolBar(=58725AB=>) (unknown) Q3UrlOperator@>B>:>; %1 =5 ?>445@68205B :>?8@>20=85 8;8 ?5@5<5I5=85 D09;>2 8;8 :0B0;>3>2IThe protocol `%1' does not support copying or moving files or directories Q3UrlOperator`@>B>:>; %1 =5 ?>445@68205B A>740=85 :0B0;>3>2;The protocol `%1' does not support creating new directories Q3UrlOperatorZ@>B>:>; %1 =5 ?>445@68205B ?5@540GC D09;>20The protocol `%1' does not support getting files Q3UrlOperator`@>B>:>; %1 =5 ?>445@68205B ?@>A<>B@ :0B0;>3>26The protocol `%1' does not support listing directories Q3UrlOperatorZ@>B>:>; %1 =5 ?>445@68205B >B?@02:C D09;>20The protocol `%1' does not support putting files Q3UrlOperatorv@>B>:>; %1 =5 ?>445@68205B C40;5=85 D09;>2 8;8 :0B0;>3>2@The protocol `%1' does not support removing files or directories Q3UrlOperator@>B>:>; %1 =5 ?>445@68205B ?5@58<5=>20=85 D09;>2 8;8 :0B0;>3>2@The protocol `%1' does not support renaming files or directories Q3UrlOperator>@>B>:>; %1 =5 ?>445@68205BAO"The protocol `%1' is not supported Q3UrlOperatorB&<5=0&CancelQ3Wizard&025@H8BL&FinishQ3Wizard&!?@02:0&HelpQ3Wizard&0;55 >&Next >Q3Wizard< &0704< &BackQ3Wizard*B:070=> 2 A>548=5=88Connection refusedQAbstractSocket6@5<O =0 A>548=5=85 8AB5:;>Connection timed outQAbstractSocket#75; =5 =0945=Host not foundQAbstractSocket!5BL =54>ABC?=0Network unreachableQAbstractSocketH?5@0F8O A A>:5B>< =5 ?>445@68205BAO$Operation on socket is not supportedQAbstractSocket$!>:5B =5 ?>4:;NGQ=Socket is not connectedQAbstractSocketF@5<O =0 >?5@0F8N A A>:5B>< 8AB5:;>Socket operation timed outQAbstractSocket&K45;8BL 2AQ &Select AllQAbstractSpinBox(03 22&5@E&Step upQAbstractSpinBox(03 2=&87 Step &downQAbstractSpinBox:;NG8BLCheckQAccessibleButton 060BLPressQAccessibleButtonK:;NG8BLUncheckQAccessibleButton:B828@>20BLActivate QApplicationB:B828@C5B 3;02=>5 >:=> ?@>3@0<<K#Activates the program's main window QApplicationr@>3@0<<=K9 <>4C;L %1 B@51C5B Qt %2, =0945=0 25@A8O %3.,Executable '%1' requires Qt %2, found Qt %3. QApplicationDH81:0 A>2<5AB8<>AB8 181;8>B5:8 QtIncompatible Qt Library Error QApplicationLTRQT_LAYOUT_DIRECTION QApplicationB&<5=0&Cancel QAxSelect&1J5:B COM: COM &Object: QAxSelectK1@0BLOK QAxSelect0K1>@ :><?>=5=BK ActiveXSelect ActiveX Control QAxSelectB<5B8BLCheck QCheckBox5@5:;NG8BLToggle QCheckBox!=OBL >B<5B:CUncheck QCheckBoxF&>1028BL : ?>;L7>20B5;LA:8< F25B0<&Add to Custom Colors QColorDialog&A=>2=K5 F25B0 &Basic colors QColorDialog.&>;L7>20B5;LA:85 F25B0&Custom colors QColorDialog&5;Q=K9:&Green: QColorDialog&@0A=K9:&Red: QColorDialog &0A:&Sat: QColorDialog &/@::&Val: QColorDialog&;LD0-:0=0;:A&lpha channel: QColorDialog!&8=89:Bl&ue: QColorDialog &">=:Hu&e: QColorDialogK1>@ F25B0 Select Color QColorDialog0:@KBLClose QComboBox5BFalse QComboBoxB:@KBLOpen QComboBox0True QComboBox$%1: C65 ACI5AB2C5B%1: already existsQCoreApplication"%1: =5 ACI5AB2C5B%1: does not existQCoreApplication%1: >H81:0 ftok%1: ftok failedQCoreApplication%1: ?CAB>9 :;NG%1: key is emptyQCoreApplication2%1: =54>AB0B>G=> @5AC@A>2%1: out of resourcesQCoreApplication&%1: 4>ABC? 70?@5IQ=%1: permission deniedQCoreApplication6%1: =52>7<>6=> A>740BL :;NG%1: unable to make keyQCoreApplication2%1: =58725AB=0O >H81:0 %2%1: unknown error %2QCoreApplication>52>7<>6=> 7025@H8BL B@0=70:F8NUnable to commit transaction QDB2Driver,52>7<>6=> A>548=8BLAOUnable to connect QDB2Driver<52>7<>6=> >B:0B8BL B@0=70:F8NUnable to rollback transaction QDB2Driver^52>7<>6=> CAB0=>28BL 02B>7025@H5=85 B@0=70:F89Unable to set autocommit QDB2Driver:52>7<>6=> ?@82O70BL 7=0G5=85Unable to bind variable QDB2Result<52>7<>6=> 2K?>;=8BL 2K@065=85Unable to execute statement QDB2ResultB52>7<>6=> ?>;CG8BL ?5@2CN AB@>:CUnable to fetch first QDB2ResultH52>7<>6=> ?>;CG8BL A;54CNICN AB@>:CUnable to fetch next QDB2Result:52>7<>6=> ?>;CG8BL 70?8AL %1Unable to fetch record %1 QDB2Result@52>7<>6=> ?>43>B>28BL 2K@065=85Unable to prepare statement QDB2ResultAMAM QDateTimeEditPMPM QDateTimeEditamam QDateTimeEditpmpm QDateTimeEditBAnimation - MB> 01AB@0:B=K9 :;0AAAnimation is an abstract classQDeclarativeAbstractAnimationf52>7<>6=> 0=8<8@>20BL =5ACI5AB2C5I55 A2>9AB2> %1)Cannot animate non-existent property "%1"QDeclarativeAbstractAnimationl52>7<>6=> 0=8<8@>20BL A2>9AB2> B>;L:> 4;O GB5=8O %1&Cannot animate read-only property "%1"QDeclarativeAbstractAnimationL52>7<>6=> CAB0=>28BL 4;8B5;L=>ABL < 0Cannot set a duration of < 0QDeclarativeAnchorAnimation52>7<>6=> 8A?>;L7>20BL 107>2CN ?@82O7:C 2<5AB5 A 25@E=59, =86=59 8 F5=B@0;L=>9 ?> 25@B8:0;8.SBaseline anchor cannot be used in conjunction with top, bottom, or vcenter anchors.QDeclarativeAnchorsr52>7<>6=> ?@82O70BL 3>@87>=B0;L=K9 :@09 : 25@B8:0;L=><C.3Cannot anchor a horizontal edge to a vertical edge.QDeclarativeAnchorsr52>7<>6=> ?@82O70BL 25@B8:0;L=K9 :@09 : 3>@87>=B0;L=><C.3Cannot anchor a vertical edge to a horizontal edge.QDeclarativeAnchorsV52>7<>6=> ?@82O70BL M;5<5=B : A0<><C A515.Cannot anchor item to self.QDeclarativeAnchorsV52>7<>6=> ?@82O70BLAO : =C;52><C M;5<5=BC.Cannot anchor to a null item.QDeclarativeAnchors52>7<>6=> CAB0=>28BL ?@82O7:C : M;5<5=BC, =5 O2;ONI5<CAO @>48B5;5< 8;8 A>A54><.8Cannot anchor to an item that isn't a parent or sibling.QDeclarativeAnchorsf52>7<>6=> 7040BL ;52CN, ?@02CN 8 A@54=NN ?@82O7:8.0Cannot specify left, right, and hcenter anchors.QDeclarativeAnchorsj52>7<>6=> 7040BL 25@E=NN, =86=NN 8 A@54=NN ?@82O7:8.0Cannot specify top, bottom, and vcenter anchors.QDeclarativeAnchorsh1=0@C65=0 2>7<>6=0O F8:;8G=0O ?@82O7:0 =0 centerIn.*Possible anchor loop detected on centerIn.QDeclarativeAnchors`1=0@C65=0 2>7<>6=0O F8:;8G=0O ?@82O7:0 =0 fill.&Possible anchor loop detected on fill.QDeclarativeAnchors1=0@C65=0 2>7<>6=0O F8:;8G=0O ?@82O7:0 : 3>@87>=B0;L=>9 ?@82O7:5.3Possible anchor loop detected on horizontal anchor.QDeclarativeAnchors1=0@C65=0 2>7<>6=0O F8:;8G=0O ?@82O7:0 : 25@B8:0;L=>9 ?@82O7:5.1Possible anchor loop detected on vertical anchor.QDeclarativeAnchorsHQt 1K;> A>1@0=> 157 ?>445@6:8 QMovie'Qt was built without support for QMovieQDeclarativeAnimatedImage>;0AA Application - 01AB@0:B=K9 Application is an abstract classQDeclarativeApplicationh52>7<>6=> 87<5=8BL 0=8<0F8N, =07=0G5==CN ?>2545=8N.3Cannot change the animation assigned to a Behavior.QDeclarativeBehaviord1=0@C65=> 70F8:;820=85 ?@82O7:8 4;O A2>9AB20 %1'Binding loop detected for property "%1"QDeclarativeBinding^1=0@C65=0 F8:;8G=0O ?@82O7:0 4;O A2>9AB20 %1'Binding loop detected for property "%1"QDeclarativeCompiledBindingsH%1 =5 <>65B 2>7459AB2>20BL =0 %2"%1" cannot operate on "%2"QDeclarativeCompilerX%1.%2 =5 4>ABC?=> 87-70 25@A88 :><?>=5=BK.5"%1.%2" is not available due to component versioning.QDeclarativeCompiler>%1.%2 =5 4>ABC?=> 2 %3 %4.%5.%"%1.%2" is not available in %3 %4.%5.QDeclarativeCompilerL!2>9AB2> ?A524>=8<0 2KE>48B 70 3@0=8FK#Alias property exceeds alias boundsQDeclarativeCompilern@8:@5?;Q==K5 A2>9AB20 =5 <>3CB 1KBL 8A?>;L7>20=K 745AL'Attached properties cannot be used hereQDeclarativeCompilerX>6=> =07=0G8BL B>;L:> >4=C A2O7L 4;O A?8A:0$Can only assign one binding to listsQDeclarativeCompiler52>7<>6=> ?@8A2>8BL 7=0G5=85 =5?>A@54AB25==> A3@C??8@>20==><C A2>9AB2C4Cannot assign a value directly to a grouped propertyQDeclarativeCompiler52>7<>6=> =07=0G8BL 7=0G5=85 A83=0;C (AF5=0@89 4>;65= 1KBL 70?CI5=)@Cannot assign a value to a signal (expecting a script to be run)QDeclarativeCompilerz52>7<>6=> =07=0G8BL <=>65AB25==>5 7=0G5=85 A2>9AB2C AF5=0@8O2Cannot assign multiple values to a script propertyQDeclarativeCompiler52>7<>6=> ?@8A2>8BL <=>65AB2> 7=0G5=89 A2>9AB2C, ?@8=8<0NI5<C B>;L:> >4=>4Cannot assign multiple values to a singular propertyQDeclarativeCompilerD52>7<>6=> =07=0G8BL >1J5:B A?8A:CCannot assign object to listQDeclarativeCompilerF52>7<>6=> =07=0G8BL >1J5:BA2>9AB2C Cannot assign object to propertyQDeclarativeCompilerJ52>7<>6=> =07=0G8BL ?@8<8B82K A?8A:C!Cannot assign primitives to listsQDeclarativeCompilert52>7<>6=> =07=0G8BL =5ACI5AB2CNI5<C A2>9AB2C ?> C<>;G0=8N.Cannot assign to non-existent default propertyQDeclarativeCompilerd52>7<>6=> =07=0G8BL =5ACI5AB2CNI5<C A2>9AB2C %1+Cannot assign to non-existent property "%1"QDeclarativeCompiler`52>7<>6=> A>740BL ?CABCN A?5F8D8:0FN :><?>=5=B0+Cannot create empty component specificationQDeclarativeCompilerP52>7<>6=> ?5@5>?@545;8BL A2>9AB2> FINALCannot override FINAL propertyQDeclarativeCompilerl-;5<5=BK Component =5 <>3CB A>45@60BL A2>9AB2 :@><5 id;Component elements may not contain properties other than idQDeclarativeCompilerf1J5:BK Component =5 <>3CB >1JO2;OBL =>2K5 DC=:F88./Component objects cannot declare new functions.QDeclarativeCompilerh1J5:BK Component =5 <>3CB >1JO2;OBL =>2K5 A2>9AB20.0Component objects cannot declare new properties.QDeclarativeCompilerf1J5:BK Component =5 <>3CB >1JO2;OBL =>2K5 A83=0;K.-Component objects cannot declare new signals.QDeclarativeCompilerDC1;8@>20=85 A2>9AB20 ?> C<>;G0=8NDuplicate default propertyQDeclarativeCompiler8C1;8@>20=85 =0720=85 <5B>40Duplicate method nameQDeclarativeCompiler<C1;8@>20=85 =0720=8O A2>9AB20Duplicate property nameQDeclarativeCompiler:C1;8@>20=85 =0720=8O A83=0;0Duplicate signal nameQDeclarativeCompiler@-;5<5=B =5 O2;O5BAO A>740205<K<.Element is not creatable.QDeclarativeCompiler4CAB>5 =07=0G5=85 A2>9AB20Empty property assignmentQDeclarativeCompiler2CAB>5 =07=0G5=85 A83=0;0Empty signal assignmentQDeclarativeCompiler|45=B8D8:0B>@ =525@=> <0A:8@C5B 3;>10;L=>5 A2>9AB2> JavaScript-ID illegally masks global JavaScript propertyQDeclarativeCompilerh45=B8D8:0B>@K =5 <>3CB =0G8=0BLAO A 703;02=>9 1C:2K)IDs cannot start with an uppercase letterQDeclarativeCompiler45=B8D8:0B>@K 4>;6=K A>45@60BL B>;L:> 1C:2K, F8D@K 8 ?>4GQ@:820=8O7IDs must contain only letters, numbers, and underscoresQDeclarativeCompilert45=B8D8:0B>@K 4>;6=K =0G8=0BLAO A 1C:2K 8;8 ?>4GQ@:820=8O*IDs must start with a letter or underscoreQDeclarativeCompiler854>?CAB8<>5 =0720=85 <5B>40Illegal method nameQDeclarativeCompiler<54>?CAB8<>5 =0720=85 A2>9AB20Illegal property nameQDeclarativeCompiler:54>?CAB8<>5 =0720=85 A83=0;0Illegal signal nameQDeclarativeCompilerD525@=> C:070=> =07=0G5=85 A83=0;0'Incorrectly specified signal assignmentQDeclarativeCompilerD5:>@@5:B=>5 @07<5I5=85 ?A524>=8<0Invalid alias locationQDeclarativeCompiler5:>@@5:B=0O AAK;:0 =0 ?A524>=8<. !AK;:0 =0 ?A524>=8< 4>;6=0 1KBL C:070=0, :0: <id>, <id>.<A2>9AB2>> 8;8 <id>.<A2>9AB2> 7=0G5=8O>.<A2>9AB2>>zInvalid alias reference. An alias reference must be specified as , . or ..QDeclarativeCompilert5:>@@5:B=0O AAK;:0 =0 ?A524>=8<. 5 C40;>AL =09B8 id %1/Invalid alias reference. Unable to find id "%1"QDeclarativeCompiler\5:>@@5:B=>5 =07=0G5=85 ?@8:@5?;Q==>3> >1J5:B0"Invalid attached object assignmentQDeclarativeCompilerR5:>@@5:B=0O A?5F8D8:0F8O B5;0 :><?>=5=B0$Invalid component body specificationQDeclarativeCompilerN5:>@@5:B=0O A?5F8D8:0F8O id :><?>=5=B0"Invalid component id specificationQDeclarativeCompilerB5:>@@5:B=K9 ?CAB>9 845=B8D8:0B>@Invalid empty IDQDeclarativeCompiler^5:>@@5:B=K9 4>ABC? : A3@C??8@>20==><C A2>9AB2CInvalid grouped property accessQDeclarativeCompiler5:>@@5:B=>5 ?@8A20820=85 A2>9AB20: %1 A2>9AB2> B>;L:> 4;O GB5=8O9Invalid property assignment: "%1" is a read-only propertyQDeclarativeCompiler5:>@@5:B=>5 ?@8A20820=85 A2>9AB20: >68405BAO 7=0G5=85 B8?0 B@QE<5@=K9 25:B>@/Invalid property assignment: 3D vector expectedQDeclarativeCompiler5:>@@5:B=>5 ?@8A20820=85 A2>9AB20: >68405BAO 7=0G5=85 1C;52>3> B8?0-Invalid property assignment: boolean expectedQDeclarativeCompiler5:>@@5:B=>5 ?@8A20820=85 A2>9AB20: >68405BAO 7=0G5=85 B8?0 color+Invalid property assignment: color expectedQDeclarativeCompiler5:>@@5:B=>5 ?@8A20820=85 A2>9AB20: >68405BAO 7=0G5=85 B8?0 date*Invalid property assignment: date expectedQDeclarativeCompiler5:>@@5:B=>5 ?@8A20820=85 A2>9AB20: >68405BAO 7=0G5=85 B8?0 datetime.Invalid property assignment: datetime expectedQDeclarativeCompiler5:>@@5:B=>5 ?@8A20820=85 A2>9AB20: >68405BAO 7=0G5=85 B8?0 int)Invalid property assignment: int expectedQDeclarativeCompilerf5:>@@5:B=>5 ?@8A20820=85 A2>9AB20: >68405BAO G8A;>,Invalid property assignment: number expectedQDeclarativeCompiler5:>@@5:B=>5 ?@8A20820=85 A2>9AB20: >68405BAO 7=0G5=85 B8?0 point+Invalid property assignment: point expectedQDeclarativeCompiler5:>@@5:B=>5 ?@8A20820=85 A2>9AB20: >68405BAO 7=0G5=85 B8?0 rect*Invalid property assignment: rect expectedQDeclarativeCompilerl5:>@@5:B=>5 ?@8A20820=85 A2>9AB20: >68405BAO AF5=0@89,Invalid property assignment: script expectedQDeclarativeCompiler5:>@@5:B=>5 ?@8A20820=85 A2>9AB20: >68405BAO 7=0G5=85 B8?0 size*Invalid property assignment: size expectedQDeclarativeCompiler5:>@@5:B=>5 ?@8A20820=85 A2>9AB20: >68405BAO 7=0G5=85 B8?0 string,Invalid property assignment: string expectedQDeclarativeCompiler5:>@@5:B=>5 ?@8A20820=85 A2>9AB20: >68405BAO 7=0G5=85 B8?0 time*Invalid property assignment: time expectedQDeclarativeCompilerx5:>@@5:B=>5 ?@8A20820=85 A2>9AB20: =58725AB=>5 ?5@5G8A;5=850Invalid property assignment: unknown enumerationQDeclarativeCompiler5:>@@5:B=>5 ?@8A20820=85 A2>9AB20: >68405BAO 7=0G5=85 B8?0 unsigned int2Invalid property assignment: unsigned int expectedQDeclarativeCompilerz5:>@@5:B=>5 ?@8A20820=85 A2>9AB20: =5?>445@68205<K9 B8? %12Invalid property assignment: unsupported type "%1"QDeclarativeCompiler5:>@@5:B=>5 ?@8A20820=85 A2>9AB20: >68405BAO 7=0G5=85 B8?0 url)Invalid property assignment: url expectedQDeclarativeCompiler@5:>@@5:B=>5 2;>65==>ABL A2>9AB2Invalid property nestingQDeclarativeCompiler25:>@@5:B=K9 B8? A2>9AB20Invalid property typeQDeclarativeCompilerF5:>@@5:B=>5 8A?>;L7>20=85 A2>9AB20Invalid property useQDeclarativeCompilerL5:>@@5:B=>5 8A?>;L7>20=85 A2>9AB20 idInvalid use of id propertyQDeclarativeCompilerX5:>@@5:B=>5 8A?>;L7>20=85 ?@>AB@0=AB20 8<Q=Invalid use of namespaceQDeclarativeCompilerl0720=8O <5B>4>2 =5 <>3CB =0G8=0BLAO A 703;02=>9 1C:2K3Method names cannot begin with an upper case letterQDeclarativeCompilerTBACBAB2C5B @07<5I5=85 ?A524>=8<0 A2>9AB20No property alias locationQDeclarativeCompilerF5ACI5AB2CNI89 ?@8:@5?;Q==K9 >1J5:BNon-existent attached objectQDeclarativeCompilerP5 O2;O5BAO 8<5=5< ?@82O70==>3> A2>9AB20Not an attached property nameQDeclarativeCompiler:68405BAO =07=0G5=85 A2>9AB20Property assignment expectedQDeclarativeCompiler>!2>9AB2C C65 =07=0G5=> 7=0G5=85*Property has already been assigned a valueQDeclarativeCompilerl0720=8O A2>9AB2 =5 <>3CB =0G8=0BLAO A 703;02=>9 1C:2K5Property names cannot begin with an upper case letterQDeclarativeCompilerL=0G5=85 A2>9AB20 7040=> =5A:>;L:> @07!Property value set multiple timesQDeclarativeCompilern0720=8O A83=0;>2 =5 <>3CB =0G8=0BLAO A 703;02=>9 1C:2K3Signal names cannot begin with an upper case letterQDeclarativeCompilerN68405BAO >48=>G=>5 =07=0G5=85 A2>9AB20#Single property assignment expectedQDeclarativeCompiler<5>6840==>5 =07=0G5=85 >1J5:B0Unexpected object assignmentQDeclarativeCompilerid =5 C=8:0;5=id is not uniqueQDeclarativeCompiler CAB>9 04@5A URLInvalid empty URLQDeclarativeComponentVcreateObject: 7=0G5=85 =5 O2;O5BAO >1J5:B><$createObject: value is not an objectQDeclarativeComponentd52>7<>6=> =07=0G8BL =5ACI5AB2CNI5<C A2>9AB2C %1+Cannot assign to non-existent property "%1"QDeclarativeConnectionsT>4:;NG5=8O: 2;>65==K5 >1J5:BK =54>?CAB8<K'Connections: nested objects not allowedQDeclarativeConnections>>4:;NG5=8O: >68405BAO AF5=0@89Connections: script expectedQDeclarativeConnectionsD>4:;NG5=8O: A8=B0:A8G5A:0O >H81:0Connections: syntax errorQDeclarativeConnections8"@0=70:F8O B>;L:> 4;O GB5=8ORead-only TransactionQDeclarativeEngineF5 C40;>AL 2K?>;=8BL B@0=70:F8N SQLSQL transaction failedQDeclarativeEngineF5 A>2?0405B 25@A8O 107K 40==KE SQLSQL: database version mismatchQDeclarativeEngineZ5A>2?045=85 25@A89: >6840;0AL %1, =0945=0 %2'Version mismatch: expected %1, found %2QDeclarativeEngineJexecuteSql() 2K720= 2=5 transaction()'executeSql called outside transaction()QDeclarativeEngineLB@0=70:F8O: >BACBAB2C5B >1@0B=K9 2K7>2transaction: missing callbackQDeclarativeEngineLback - A2>9AB2> 4;O >4=>:@0B=>9 70?8A8back is a write-once propertyQDeclarativeFlipableNfront - A2>9AB2> 4;O >4=>:@0B=>9 70?8A8front is a write-once propertyQDeclarativeFlipable6%1: :0B0;>3 =5 ACI5AB2C5B"%1": no such directoryQDeclarativeImportDatabaseJ- %1 - =5:>@@5:B=>5 ?@>AB@0=AB2> 8<Q=- %1 is not a namespaceQDeclarativeImportDatabaseR- 2;>65==K5 ?@>AB@0=AB20 8<Q= =54>?CAB8<K- nested namespaces not allowedQDeclarativeImportDatabaseR 538AB@ 8<5=8 D09;0 =5 A>>B25BAB2C5B %1 File name case mismatch for "%1"QDeclarativeImportDatabase`:0B0;>3 %1 =5 A>45@68B =8 qmldir, =8 namespace*import "%1" has no qmldir and no namespaceQDeclarativeImportDatabase>=5>4=>7=0G=>. 0945=> 2 %1 8 %2#is ambiguous. Found in %1 and in %2QDeclarativeImportDatabase^=5>4=>7=0G=>. 0945=> 2 %1 25@A89 %2.%3 8 %4.%54is ambiguous. Found in %1 in version %2.%3 and %4.%5QDeclarativeImportDatabase2>1@010BK205BAO @5:C@A82=>is instantiated recursivelyQDeclarativeImportDatabase"=5 O2;O5BAO B8?>< is not a typeQDeclarativeImportDatabase";>:0;L=K9 :0B0;>3local directoryQDeclarativeImportDatabase2<>4C;L %1 =5 CAB0=>2;5=module "%1" is not installedQDeclarativeImportDatabaseD<>4C;L %1 ?;038=0 %2 =5 =0945=!module "%1" plugin "%2" not foundQDeclarativeImportDatabaseL<>4C;L %1 25@A88 %2.%3 =5 CAB0=>2;5=*module "%1" version %2.%3 is not installedQDeclarativeImportDatabase^=5 C40;>AL 703@C78BL ?;038= 4;O <>4C;O %1: %2+plugin cannot be loaded for module "%1": %2QDeclarativeImportDatabasetKeyNavigation 4>ABC?=0 B>;L:> G5@57 ?@8:@5?;Q==K5 A2>9AB207KeyNavigation is only available via attached properties!QDeclarativeKeyNavigationAttachedbKeys 4>ABC?=K B>;L:> G5@57 ?@8:@5?;Q==K5 A2>9AB20.Keys is only available via attached propertiesQDeclarativeKeysAttached>4:;NGQ==>5 A2>9AB2> LayoutDirection @01>B05B B>;L:> A M;5<5=B0<87LayoutDirection attached property only works with Items#QDeclarativeLayoutMirroringAttachedvLayoutMirroring 4>ABC?=> B>;L:> G5@57 ?>4:;NG05<K5 A2>9AB209LayoutMirroring is only available via attached properties#QDeclarativeLayoutMirroringAttacheddListElement: =5 <>65B A>45@60BL 2;>65==K5 M;5<5=BK+ListElement: cannot contain nested elementsQDeclarativeListModelListElement: =52>7<>6=> 8A?>;L7>20BL 70@575@28@>20==>5 A2>9AB2> id.ListElement: cannot use reserved "id" propertyQDeclarativeListModelListElement: =52>7<>6=> 8A?>;L7>20BL AF5=0@89 2 :0G5AB25 7=0G5=8O A2>9AB201ListElement: cannot use script for property valueQDeclarativeListModelNListModel: =5>?@545;Q==>5 A2>9AB2> %1"ListModel: undefined property '%1'QDeclarativeListModelJappend: 7=0G5=85 =5 O2;O5BAO >1J5:B><append: value is not an objectQDeclarativeListModel>insert: 8=45:A %1 2=5 480?07>=0insert: index %1 out of rangeQDeclarativeListModelJinsert: 7=0G5=85 =5 O2;O5BAO >1J5:B><insert: value is not an objectQDeclarativeListModel4move: 8=45:A 2=5 480?07>=0move: out of rangeQDeclarativeListModel>remove: 8=45:A %1 2=5 480?07>=0remove: index %1 out of rangeQDeclarativeListModel8set: 8=45:A %1 2=5 480?07>=0set: index %1 out of rangeQDeclarativeListModelDset: 7=0G5=85 =5 O2;O5BAO >1J5:B><set: value is not an objectQDeclarativeListModelt03@C7G8: =5 ?>445@68205B 703@C7:C =5287C0;L=KE M;5<5=B>2.4Loader does not support loading non-visual elements.QDeclarativeLoaderv52>7<>6=> A>E@0=8BL 2=5H=89 284 ?@8 A;>6=>< ?@5>1@07>20=885Unable to preserve appearance under complex transformQDeclarativeParentAnimationt52>7<>6=> A>E@0=8BL 2=5H=89 284 ?@8 =5>4=>@>4=>< <0AHB0155Unable to preserve appearance under non-uniform scaleQDeclarativeParentAnimation^52>7<>6=> A>E@0=8BL 2=5H=89 284 ?@8 <0AHB015 0.Unable to preserve appearance under scale of 0QDeclarativeParentAnimationv52>7<>6=> A>E@0=8BL 2=5H=89 284 ?@8 A;>6=>< ?@5>1@07>20=885Unable to preserve appearance under complex transformQDeclarativeParentChanget52>7<>6=> A>E@0=8BL 2=5H=89 284 ?@8 =5>4=>@>4=>< <0AHB0155Unable to preserve appearance under non-uniform scaleQDeclarativeParentChange^52>7<>6=> A>E@0=8BL 2=5H=89 284 ?@8 <0AHB015 0.Unable to preserve appearance under scale of 0QDeclarativeParentChange.68405BAO B8? ?0@0<5B@0Expected parameter typeQDeclarativeParser,68405BAO B8? A2>9AB20Expected property typeQDeclarativeParser*68405BAO A8<2>; %1Expected token `%1'QDeclarativeParser.68405BAO =0720=85 B8?0Expected type nameQDeclarativeParserR45=B8D8:0B>@ =5 <>65B =0G8=0BLAO A F8D@K,Identifier cannot start with numeric literalQDeclarativeParser&54>?CAB8<K9 A8<2>;Illegal characterQDeclarativeParserF54>?CAB8<0O esc-?>A;54>20B5;L=>ABLIllegal escape sequenceQDeclarativeParserd54>?CAB8<K9 A8=B0:A8A 4;O M:A?>=5=F80;L=>3> G8A;0%Illegal syntax for exponential numberQDeclarativeParserV54>?CAB8<0O unicode esc-?>A;54>20B5;L=>ABLIllegal unicode escape sequenceQDeclarativeParserJ5:>@@5:B=K9 ID A?5F8D8:0B>@0 8<?>@B0Invalid import qualifier IDQDeclarativeParserL5:>@@5:B=K9 <>48D8:0B>@ B8?0 A2>9AB20Invalid property type modifierQDeclarativeParserZ5:>@@5:B=K9 D;03 %0 2 @53C;O@=>< 2K@065=88$Invalid regular expression flag '%0'QDeclarativeParserT?@545;5=85 JavaScript 2=5 M;5<5=B0 Script-JavaScript declaration outside Script elementQDeclarativeParser@<?>@B 181;8>B5:8 B@51C5B 25@A8N!Library import requires a versionQDeclarativeParserV=0G5=85 A2>9AB20 CAB0=>2;5=> =5A:>;L:> @07!Property value set multiple timesQDeclarativeParser<Readonly 5IQ =5 ?>445@68205BAOReadonly not yet supportedQDeclarativeParser0@575@28@>20==>5 8<O Qt =5 <>65B 1KBL 8A?>;L7>20=> 2 :0G5AB25 A?5F8D8:0B>@01Reserved name "Qt" cannot be used as an qualifierQDeclarativeParsern!?5F8D8:0B>@K 8<?>@B0 AF5=0@8O 4>;6=K 1KBL C=8:0;L=K<8.(Script import qualifiers must be unique.QDeclarativeParserV;O 8<?>@B0 AF5=0@8O B@51C5BAO A?5F8D8:0B>@"Script import requires a qualifierQDeclarativeParser*!8=B0:A8G5A:0O >H81:0 Syntax errorQDeclarativeParserJ570:@KBK9 :><<5=B0@89 2 :>=F5 AB@>:8Unclosed comment at end of fileQDeclarativeParser>570:@KBK9 B5:AB 2 :>=F5 AB@>:8Unclosed string at end of lineQDeclarativeParserJ5>6840==K9 <>48D8:0B>@ B8?0 A2>9AB20!Unexpected property type modifierQDeclarativeParser.5>6840==K9 A8<2>; %1Unexpected token `%1'QDeclarativeParser 53C;O@=>5 2K@065=85 A>45@68B =57025@HQ==CN M:@0=8@>20==CN ?>A;54>20B5;L=>ABL2Unterminated regular expression backslash sequenceQDeclarativeParserb 53C;O@=>5 2K@065=85 A>45@68B =57025@HQ==K9 :;0AA%Unterminated regular expression classQDeclarativeParserV570:>=G5==K9 ;8B5@0; @53C;O@=>3> 2K@065=8O'Unterminated regular expression literalQDeclarativeParserL52>7<>6=> CAB0=>28BL 4;8B5;L=>ABL < 0Cannot set a duration of < 0QDeclarativePauseAnimation,5 C40;>AL >B:@KBL: %1Cannot open: %1QDeclarativePixmap8H81:0 45:>48@>20=8O: %1: %2Error decoding: %1: %2QDeclarativePixmapx5 C40;>AL ?>;CG8BL 87>1@065=85 >B ?>AB0I8:0 87>1@065=89: %1%Failed to get image from provider: %1QDeclarativePixmapL52>7<>6=> CAB0=>28BL 4;8B5;L=>ABL < 0Cannot set a duration of < 0QDeclarativePropertyAnimationd52>7<>6=> =07=0G8BL =5ACI5AB2CNI5<C A2>9AB2C %1+Cannot assign to non-existent property "%1"QDeclarativePropertyChangesh52>7<>6=> =07=0G8BL A2>9AB2C B>;L:> 4;O GB5=8O %1(Cannot assign to read-only property "%1"QDeclarativePropertyChangesPropertyChanges =5 ?>445@6820NB A>740=85 >1J5:B>2, 7028A8<KE >B A>AB>O=8O.APropertyChanges does not support creating state-specific objects.QDeclarativePropertyChangesT5 C40;>AL 8=AB0=F88@>20BL 45;530B :C@A>@0%Could not instantiate cursor delegateQDeclarativeTextInputH5 C40;>AL 703@C78BL 45;530B :C@A>@0Could not load cursor delegateQDeclarativeTextInput %1 %2%1 %2QDeclarativeTypeLoader@>AB@0=AB2> 8<Q= %1 =5 <>65B 1KBL 8A?>;L7>20=> 2 :0G5AB25 B8?0%Namespace %1 cannot be used as a typeQDeclarativeTypeLoader,!F5=0@89 %1 =54>ABC?5=Script %1 unavailableQDeclarativeTypeLoader&"8? %1 =54>ABC?5=Type %1 unavailableQDeclarativeTypeLoaderb52>7<>6=> =07=0G8BL >1J5:B : A2>9AB2C A83=0;0 %1-Cannot assign an object to signal property %1QDeclarativeVME^52>7<>6=> =07=0G8BL >1J5:B A2>9AB2C 8=B5@D59A0*Cannot assign object to interface propertyQDeclarativeVMED52>7<>6=> =07=0G8BL >1J5:B A?8A:CCannot assign object to listQDeclarativeVMEz52>7<>6=> ?@8A2>8BL >1J5:B B8?0 %1 157 <5B>40 ?> C<>;G0=8N3Cannot assign object type %1 with no default methodQDeclarativeVME`52>7<>6=> ?@8A2>8BL 7=0G5=85 %1 A2>9AB2C %2%Cannot assign value %1 to property %2QDeclarativeVMEn52>7<>6=> ?>4:;NG8BL >BACBAB2CNI89 A83=0;/A;>B %1 : %20Cannot connect mismatched signal/slot %1 %vs. %2QDeclarativeVMEr52>7<>6=> CAB0=>28BL A2>9AB20 4;O %1, B0: :0: >= =C;52>9)Cannot set properties on %1 as it is nullQDeclarativeVMEF5 C40;>AL A>740BL 2;>65==K9 >1J5:B Unable to create attached objectQDeclarativeVMEF52>7<>6=> A>740BL >1J5:B B8?0 %1"Unable to create object of type %1QDeclarativeVMET><?>=5=B0 45;530B0 4>;65= 1KBL B8?0 Item.%Delegate component must be Item type.QDeclarativeVisualDataModelRQt 1K;> A>1@0=> 157 ?>445@6:8 xmlpatterns,Qt was built without support for xmlpatternsQDeclarativeXmlListModelR0?@>A XmlRole =5 4>;65= =0G8=0BLAO A /(An XmlRole query must not start with '/'QDeclarativeXmlListModelRoleh0?@>A XmlListModel 4>;65= =0G8=0BLAO A / 8;8 //1An XmlListModel query must start with '/' or "//"QDeclarativeXmlRoleList QDialQDialQDialSliderHandle SliderHandleQDialSpeedoMeter SpeedoMeterQDial >B>2>DoneQDialog'B> MB>? What's This?QDialogB&<5=0&CancelQDialogButtonBox&0:@KBL&CloseQDialogButtonBox&5B&NoQDialogButtonBox&&OKQDialogButtonBox&!>E@0=8BL&SaveQDialogButtonBox&0&YesQDialogButtonBox@5@20BLAbortQDialogButtonBox@8<5=8BLApplyQDialogButtonBox B<5=0CancelQDialogButtonBox0:@KBLCloseQDialogButtonBox,0:@KBL 157 A>E@0=5=8OClose without SavingQDialogButtonBoxB:;>=8BLDiscardQDialogButtonBox5 A>E@0=OBL Don't SaveQDialogButtonBox!?@02:0HelpQDialogButtonBox@>?CAB8BLIgnoreQDialogButtonBox&5B 4;O 2A5E N&o to AllQDialogButtonBoxOKQDialogButtonBoxB:@KBLOpenQDialogButtonBox!1@>A8BLResetQDialogButtonBox*>AAB0=>28BL 7=0G5=8ORestore DefaultsQDialogButtonBox>2B>@8BLRetryQDialogButtonBox!>E@0=8BLSaveQDialogButtonBox!>E@0=8BL 2A5Save AllQDialogButtonBox0 4;O &2A5E Yes to &AllQDialogButtonBox0B0 87<5=5=8O Date Modified QDirModel84Kind QDirModel<OName QDirModel  07<5@Size QDirModel"8?Type QDirModel0:@KBLClose QDockWidget@8:@5?8BLDock QDockWidgetB:@5?8BLFloat QDockWidget 5=LH5LessQDoubleSpinBox >;LH5MoreQDoubleSpinBox&0:@KBL&OK QErrorMessageL&>:07K20BL MB> A>>1I5=85 2 40;L=59H5<&Show this message again QErrorMessage*B;04>G=>5 A>>1I5=85:Debug Message: QErrorMessage&@8B8G5A:0O >H81:0: Fatal Error: QErrorMessage@54C?@5645=85:Warning: QErrorMessage@52>7<>6=> A>740BL %1 4;O 2K2>40Cannot create %1 for outputQFile>52>7<>6=> >B:@KBL %1 4;O 22>40Cannot open %1 for inputQFile:52>7<>6=> >B:@KBL 4;O 2K2>40Cannot open for outputQFile@52>7<>6=> C40;8BL 8AE>4=K9 D09;Cannot remove source fileQFile$09; ACI5AB2C5BDestination file existsQFile"!1>9 70?8A8 1;>:0Failure to write blockQFilet5B D09;>2>3> 4286:0 8;8 >= =5 ?>445@68205B UnMapExtensionBNo file engine available or engine does not support UnMapExtensionQFile>A;54>20B5;L=K9 D09; =5 1C45B ?5@58<5=>20= A 8A?>;L7>20=85< ?>1;>G=>3> :>?8@>20=8O0Will not rename sequential file using block copyQFile%1 0B0;>3 =5 =0945=. @>25@LB5 ?@028;L=>ABL C:070==>3> 8<5=8 :0B0;>30.K%1 Directory not found. Please verify the correct directory name was given. QFileDialog%1 $09; =5 =0945=. @>25@LB5 ?@028;L=>ABL C:070==>3> 8<5=8 D09;0.A%1 File not found. Please verify the correct file name was given. QFileDialogN%1 C65 ACI5AB2C5B. %>B8B5 70<5=8BL 53>?-%1 already exists. Do you want to replace it? QFileDialog&K1@0BL&Choose QFileDialog&#40;8BL&Delete QFileDialog&>20O ?0?:0 &New Folder QFileDialog&B:@KBL&Open QFileDialog&5@58<5=>20BL&Rename QFileDialog&!>E@0=8BL&Save QFileDialogl%1 70I8IQ= >B 70?8A8. 59AB28B5;L=> 65;05B5 C40;8BL?9'%1' is write protected. Do you want to delete it anyway? QFileDialogA524>=8<Alias QFileDialogA5 D09;K (*) All Files (*) QFileDialogA5 D09;K (*.*)All Files (*.*) QFileDialogJK 459AB28B5;L=> E>B8B5 C40;8BL %1?!Are sure you want to delete '%1'? QFileDialog 0704Back QFileDialog:5@5:;NG8BL 2 ?>4@>1=K9 @568<Change to detail view mode QFileDialog45@5:;NG8BL 2 @568< A?8A:0Change to list view mode QFileDialog65 C40;>AL C40;8BL :0B0;>3.Could not delete directory. QFileDialog!>740BL ?0?:CCreate New Folder QFileDialog&!>740BL =>2CN ?0?:CCreate a New Folder QFileDialog>4@>1=K9 284 Detail View QFileDialog0B0;>38 Directories QFileDialog0B0;>3: Directory: QFileDialog8A:Drive QFileDialog$09;File QFileDialog&<O D09;0: File &name: QFileDialog0?:0 A D09;0<8 File Folder QFileDialog"8?K D09;>2:Files of type: QFileDialog09B8 :0B0;>3Find Directory QFileDialog 0?:0Folder QFileDialog ?5@Q4Forward QFileDialog 0704Go back QFileDialog ?5@Q4 Go forward QFileDialog<5@59B8 2 @>48B5;LA:89 :0B0;>3Go to the parent directory QFileDialog !?8A>: List View QFileDialog5@59B8 ::Look in: QFileDialog>9 :><?LNB5@ My Computer QFileDialog>20O ?0?:0 New Folder QFileDialogB:@KBLOpen QFileDialog( >48B5;LA:89 :0B0;>3Parent Directory QFileDialog$5402=85 4>:C<5=BK Recent Places QFileDialog#40;8BLRemove QFileDialog!>E@0=8BL :0:Save As QFileDialog /@;K:Shortcut QFileDialog>:070BL Show  QFileDialog.>:070BL A:&@KBK5 D09;KShow &hidden files QFileDialog58725AB=K9Unknown QFileDialog %1 1%1 GBQFileSystemModel %1 1%1 KBQFileSystemModel %1 1%1 MBQFileSystemModel %1 "1%1 TBQFileSystemModel%1 109B %1 byte(s)QFileSystemModel%1 109B%1 bytesQFileSystemModel<b><O %1 =5 <>65B 1KBL 8A?>;L7>20=>.</b><p>>?@>1C9B5 8A?>;L7>20BL 8<O <5=LH59 4;8=K 8/8;8 157 A8<2>;>2 ?C=:BC0F88.oThe name "%1" can not be used.

Try using another name, with fewer characters or no punctuations marks.QFileSystemModel><?LNB5@ComputerQFileSystemModel0B0 87<5=5=8O Date ModifiedQFileSystemModel,5:>@@5:B=>5 8<O D09;0Invalid filenameQFileSystemModel84KindQFileSystemModel>9 :><?LNB5@ My ComputerQFileSystemModel<ONameQFileSystemModel  07<5@SizeQFileSystemModel"8?TypeQFileSystemModel N10OAny QFontDatabase@01A:0OArabic QFontDatabase@<O=A:0OArmenian QFontDatabase5=30;LA:0OBengali QFontDatabase 'Q@=K9Black QFontDatabase 8@=K9Bold QFontDatabase8@8;;8F0Cyrillic QFontDatabase!@54=89Demi QFontDatabase>;C68@=K9 Demi Bold QFontDatabase520=038@8 Devanagari QFontDatabase@C78=A:0OGeorgian QFontDatabase@5G5A:0OGreek QFontDatabaseC460@0B8Gujarati QFontDatabaseC@<C:E8Gurmukhi QFontDatabase 2@8BHebrew QFontDatabase C@A82Italic QFontDatabase/?>=A:0OJapanese QFontDatabase0==040Kannada QFontDatabaseE<5@A:0OKhmer QFontDatabase>@59A:0OKorean QFontDatabase0>AA:0OLao QFontDatabase0B8=8F0Latin QFontDatabase!25B;K9Light QFontDatabase0;09O;0< Malayalam QFontDatabase LO=<0Myanmar QFontDatabase:>N'Ko QFontDatabase1KG=K9Normal QFontDatabase0:;>==K9Oblique QFontDatabase30<8G5A:0OOgham QFontDatabase@8OOriya QFontDatabase C=8G5A:0ORunic QFontDatabase(8B09A:0O C?@>IQ==0OSimplified Chinese QFontDatabase!8=30;LA:0OSinhala QFontDatabase!8<2>;L=0OSymbol QFontDatabase!8@89A:0OSyriac QFontDatabase"0<8;LA:0OTamil QFontDatabase "5;C3CTelugu QFontDatabase "00=0Thaana QFontDatabase"09A:0OThai QFontDatabase"815BA:0OTibetan QFontDatabase,8B09A:0O B@048F8>==0OTraditional Chinese QFontDatabaseL5B=0<A:0O Vietnamese QFontDatabase &(@8DB&Font QFontDialog& 07<5@&Size QFontDialog&>4GQ@:=CBK9 &Underline QFontDialog-DD5:BKEffects QFontDialog&0G5@B0=85 Font st&yle QFontDialog @8<5@Sample QFontDialogK1>@ H@8DB0 Select Font QFontDialog0GQ@&:=CBK9 Stri&keout QFontDialog&!8AB5<0 ?8AL<0Wr&iting System QFontDialog<5 C40;>AL A<5=8BL :0B0;>3: %1Changing directory failed: %1QFtp<!>548=5=85 A C7;>< CAB0=>2;5=>Connected to hostQFtpB#AB0=>2;5=> A>548=5=85 A C7;>< %1Connected to host %1QFtpD5 C40;>AL A>548=8BLAO A C7;><: %1Connecting to host failed: %1QFtp$!>548=5=85 70:@KB>Connection closedQFtpLB:07 2 A>548=5=88 4;O ?5@540G8 40==KE&Connection refused for data connectionQFtp@ A>548=5=88 A C7;>< %1 >B:070=>Connection refused to host %1QFtpL@5<O =0 A>548=5=85 A C7;>< %1 8AB5:;>Connection timed out to host %1QFtp.!>548=5=85 A %1 70:@KB>Connection to %1 closedQFtp<5 C40;>AL A>740BL :0B0;>3: %1Creating directory failed: %1QFtp:5 C40;>AL 703@C78BL D09;: %1Downloading file failed: %1QFtp#75; %1 =0945= Host %1 foundQFtp"#75; %1 =5 =0945=Host %1 not foundQFtp#75; =0945= Host foundQFtp@5 C40;>AL ?@>G8B0BL :0B0;>3: %1Listing directory failed: %1QFtp:5 C40;>AL 02B>@87>20BLAO: %1Login failed: %1QFtp2!>548=5=85 =5 CAB0=>2;5=> Not connectedQFtp<5 C40;>AL C40;8BL :0B0;>3: %1Removing directory failed: %1QFtp65 C40;>AL C40;8BL D09;: %1Removing file failed: %1QFtp$58725AB=0O >H81:0 Unknown errorQFtp:5 C40;>AL >B3@C78BL D09;: %1Uploading file failed: %1QFtp:;/2K:;Toggle QGroupBox$<O C7;0 =5 7040=>No host name given QHostInfo$58725AB=0O >H81:0 Unknown error QHostInfo#75; =5 =0945=Host not foundQHostInfoAgent*5:>@@5:B=>5 8<O C7;0Invalid hostnameQHostInfoAgent$<O C7;0 =5 7040=>No host name givenQHostInfoAgent,58725AB=K9 B8? 04@5A0Unknown address typeQHostInfoAgent$58725AB=0O >H81:0 Unknown errorQHostInfoAgent.58725AB=0O >H81:0 (%1)Unknown error (%1)QHostInfoAgent*"@51C5BAO 02B>@870F8OAuthentication requiredQHttp<!>548=5=85 A C7;>< CAB0=>2;5=>Connected to hostQHttpB#AB0=>2;5=> A>548=5=85 A C7;>< %1Connected to host %1QHttp$!>548=5=85 70:@KB>Connection closedQHttp*B:070=> 2 A>548=5=88Connection refusedQHttpd A>548=5=88 >B:070=> (8;8 2@5<O >6840=8O 8AB5:;>)!Connection refused (or timed out)QHttp:!>548=5=85 A C7;>< %1 70:@KB>Connection to %1 closedQHttp"0==K5 ?>2@5645=KData corruptedQHttpDH81:0 70?8A8 >B25B0 =0 CAB@>9AB2> Error writing response to deviceQHttp*HTTP-70?@>A =5 C40;AOHTTP request failedQHttp0?@>H5=> A>548=5=85 ?> ?@>B>:>;C HTTPS, => ?>445@6:0 SSL =5 A:><?8;8@>20=0:HTTPS connection requested but SSL support not compiled inQHttp#75; %1 =0945= Host %1 foundQHttp"#75; %1 =5 =0945=Host %1 not foundQHttp#75; =0945= Host foundQHttp0#75; B@51C5B 02B>@870F8NHost requires authenticationQHttpR5:>@@5:B=>5 HTTP-D@03<5=B8@>20=85 40==KEInvalid HTTP chunked bodyQHttpD5:>@@5:B=K9 HTTP-703>;>2>: >B25B0Invalid HTTP response headerQHttp@5 C:070= A5@25@ 4;O ?>4:;NG5=8ONo server set to connect toQHttpN"@51C5BAO 02B>@870F8O =0 ?@>:A8-A5@25@5Proxy authentication requiredQHttpB@>:A8-A5@25@ B@51C5B 02B>@870F8NProxy requires authenticationQHttp0?@>A ?@5@20=Request abortedQHttp628B8@>20=85 SSL =5 C40;>ALSSL handshake failedQHttpJ!5@25@ =5>6840==> @07>@20; A>548=5=85%Server closed connection unexpectedlyQHttp:58725AB=K9 <5B>4 02B>@870F88Unknown authentication methodQHttp$58725AB=0O >H81:0 Unknown errorQHttp6#:070= =58725AB=K9 ?@>B>:>;Unknown protocol specifiedQHttp4525@=0O 4;8=0 A>45@68<>3>Wrong content lengthQHttp*"@51C5BAO 02B>@870F8OAuthentication requiredQHttpSocketEngineN5 ?>;CG5= HTTP->B25B >B ?@>:A8-A5@25@0(Did not receive HTTP response from proxyQHttpSocketEngineXH81:0 >1<5=0 40==K<8 A ?@>:A8-A5@25@>< HTTP#Error communicating with HTTP proxyQHttpSocketEnginehH81:0 @071>@0 70?@>A0 02B>@870F88 >B ?@>:A8-A5@25@0/Error parsing authentication request from proxyQHttpSocketEngine^!>548=5=85 A ?@>:A8-A5@25@>< =5>6840==> 70:@KB>#Proxy connection closed prematurelyQHttpSocketEngineJ A>548=5=88 ?@>:A8-A5@25@>< >B:070=>Proxy connection refusedQHttpSocketEngineB@>:A8-A5@25@ 70?@5B8; A>548=5=85Proxy denied connectionQHttpSocketEngineZ@5<O =0 A>548=5=85 A ?@>:A8-A5@25@>< 8AB5:;>!Proxy server connection timed outQHttpSocketEngine.@>:A8-A5@25@ =5 =0945=Proxy server not foundQHttpSocketEngine85 C40;>AL =0G0BL B@0=70:F8NCould not start transaction QIBaseDriver6H81:0 >B:@KB8O 107K 40==KEError opening database QIBaseDriver>52>7<>6=> 7025@H8BL B@0=70:F8NUnable to commit transaction QIBaseDriver<52>7<>6=> >B:0B8BL B@0=70:F8NUnable to rollback transaction QIBaseDriverd5 C40;>AL ?>;CG8BL @5AC@AK 4;O A>740=8O 2K@065=8OCould not allocate statement QIBaseResultJ5 C40;>AL >?8A0BL 2E>4OI55 2K@065=85"Could not describe input statement QIBaseResult85 C40;>AL >?8A0BL 2K@065=85Could not describe statement QIBaseResultJ5 C40;>AL ?>;CG8BL A;54CNI89 M;5<5=BCould not fetch next item QIBaseResult.5 C40;>AL =09B8 <0AA82Could not find array QIBaseResult>5 C40;>AL =09B8 40==K5 <0AA820Could not get array data QIBaseResultJ5 C40;>AL =09B8 8=D>@<0F8N > 70?@>A5Could not get query info QIBaseResultN5 C40;>AL =09B8 8=D>@<0F8N > 2K@065=88Could not get statement info QIBaseResult@5 C40;>AL ?>43>B>28BL 2K@065=85Could not prepare statement QIBaseResult85 C40;>AL =0G0BL B@0=70:F8NCould not start transaction QIBaseResult852>7<>6=> 70:@KBL 2K@065=85Unable to close statement QIBaseResult>52>7<>6=> 7025@H8BL B@0=70:F8NUnable to commit transaction QIBaseResult.52>7<>6=> A>740BL BLOBUnable to create BLOB QIBaseResult652>7<>6=> 2K?>;=8BL 70?@>AUnable to execute query QIBaseResult.52>7<>6=> >B:@KBL BLOBUnable to open BLOB QIBaseResult252>7<>6=> ?@>G8B0BL BLOBUnable to read BLOB QIBaseResult052>7<>6=> 70?8A0BL BLOBUnable to write BLOB QIBaseResultD5B A2>1>4=>3> <5AB0 =0 CAB@>9AB25No space left on device QIODevice<$09; 8;8 :0B0;>3 =5 ACI5AB2C5BNo such file or directory QIODevice>ABC? 70?@5IQ=Permission denied QIODevice:!;8H:>< <=>3> >B:@KBKE D09;>2Too many open files QIODevice$58725AB=0O >H81:0 Unknown error QIODevice&5B>4 22>40 S60 FEPFEP QInputContext(5B>4 22>40 Mac OS XMac OS X input method QInputContext&5B>4 22>40 S60 FEPS60 FEP input method QInputContext&5B>4 22>40 WindowsWindows input method QInputContext*5B>4 22>40 X-A5@25@0XIM QInputContext*5B>4 22>40 X-A5@25@0XIM input method QInputContext"#:068B5 7=0G5=85:Enter a value: QInputDialogP%1 O2;O5BAO =525@=K< >1J5:B>< ELF (%2)"'%1' is an invalid ELF object (%2)QLibrary:%1 =5 O2;O5BAO >1J5:B>< ELF'%1' is not an ELF objectQLibraryD%1 =5 O2;O5BAO >1J5:B>< ELF (%2)'%1' is not an ELF object (%2)QLibraryL52>7<>6=> 703@C78BL 181;8>B5:C %1: %2Cannot load library %1: %2QLibraryR52>7<>6=> @07@5H8BL A8<2>; %1 2 %2: %3$Cannot resolve symbol "%1" in %2: %3QLibraryL52>7<>6=> 2K3@C78BL 181;8>B5:C %1: %2Cannot unload library %1: %2QLibraryf@>25@>G=0O 8=D>@<0F8O 4;O <>4C;O %1 =5 A>2?0405B)Plugin verification data mismatch in '%1'QLibrary\$09; %1 - =5 O2;O5BAO :>@@5:B=K< <>4C;5< Qt.'The file '%1' is not a valid Qt plugin.QLibrary>4C;L %1 8A?>;L7C5B =5A><5AB8<CN 181;8>B5:C Qt. (%2.%3.%4) [%5]=The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5]QLibrary>4C;L %1 8A?>;L7C5B =5A><5AB8<CN 181;8>B5:C Qt. (52>7<>6=> A>2<5AB8BL @5;87=K5 8 >B;04>G=K5 181;8>B5:8.)WThe plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.)QLibrary>4C;L %1 8A?>;L7C5B =5A><5AB8<CN 181;8>B5:C Qt. 68405BAO :;NG %2, => ?>;CG5= :;NG %3OThe plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3"QLibraryF8=0<8G5A:0O 181;8>B5:0 =5 =0945=0.!The shared library was not found.QLibrary$58725AB=0O >H81:0 Unknown errorQLibrary&>?8@>20BL&Copy QLineEdit&AB028BL&Paste QLineEdit&&>2B>@8BL 459AB285&Redo QLineEdit$&B<5=8BL 459AB285&Undo QLineEdit&K@570BLCu&t QLineEdit#40;8BLDelete QLineEditK45;8BL 2AQ Select All QLineEdit,%1: 4@5A 8A?>;L7C5BAO%1: Address in use QLocalServer(%1: 5:>@@5:B=>5 8<O%1: Name error QLocalServer&%1: >ABC? 70?@5IQ=%1: Permission denied QLocalServer2%1: 58725AB=0O >H81:0 %2%1: Unknown error %2 QLocalServer&%1: >ABC? 70?@5IQ=%1: Access denied QLocalSocket*%1: H81:0 A>548=5=8O%1: Connection error QLocalSocket2%1: B:070=> 2 A>548=5=88%1: Connection refused QLocalSocket<%1: 0B03@0<<0 A;8H:>< 1>;LH0O%1: Datagram too large QLocalSocket(%1: 5:>@@5:B=>5 8<O%1: Invalid name QLocalSocket<%1: 0:@KB> C40;5==>9 AB>@>=>9%1: Remote closed QLocalSocket:%1: H81:0 >1@0I5=8O : A>:5BC%1: Socket access error QLocalSocketN%1: @5<O =0 >?5@0F8N A A>:5B>< 8AB5:;>%1: Socket operation timed out QLocalSocketH%1: H81:0 2K45;5=8O @5AC@A>2 A>:5B0%1: Socket resource error QLocalSocketP%1: ?5@0F8O A A>:5B>< =5 ?>445@68205BAO)%1: The socket operation is not supported QLocalSocket,%1: 58725AB=0O >H81:0%1: Unknown error QLocalSocket2%1: 58725AB=0O >H81:0 %2%1: Unknown error %2 QLocalSocket852>7<>6=> =0G0BL B@0=70:F8NUnable to begin transaction QMYSQLDriver>52>7<>6=> 7025@H8BL B@0=70:F8NUnable to commit transaction QMYSQLDriver,52>7<>6=> A>548=8BLAOUnable to connect QMYSQLDriver@52>7<>6=> >B:@KBL 107C 40==KE 'Unable to open database ' QMYSQLDriver<52>7<>6=> >B:0B8BL B@0=70:F8NUnable to rollback transaction QMYSQLDriverX52>7<>6=> ?@82O70BL @57C;LB8@CNI85 7=0G5=8OUnable to bind outvalues QMYSQLResult:52>7<>6=> ?@82O70BL 7=0G5=85Unable to bind value QMYSQLResultJ52>7<>6=> 2K?>;=8BL A;54CNI89 70?@>AUnable to execute next query QMYSQLResult652>7<>6=> 2K?>;=8BL 70?@>AUnable to execute query QMYSQLResult<52>7<>6=> 2K?>;=8BL 2K@065=85Unable to execute statement QMYSQLResult452>7<>6=> ?>;CG8BL 40==K5Unable to fetch data QMYSQLResult@52>7<>6=> ?>43>B>28BL 2K@065=85Unable to prepare statement QMYSQLResult:52>7<>6=> A1@>A8BL 2K@065=85Unable to reset statement QMYSQLResultP52>7<>6=> A>E@0=8BL A;54CNI89 @57C;LB0BUnable to store next result QMYSQLResult<52>7<>6=> A>E@0=8BL @57C;LB0BUnable to store result QMYSQLResulth52>7<>6=> A>E@0=8BL @57C;LB0BK 2K?>;=5=8O 2K@065=8O!Unable to store statement results QMYSQLResult(5>703;02;5=>) (Untitled)QMdiArea%1 - [%2] %1 - [%2] QMdiSubWindow&0:@KBL&Close QMdiSubWindow&5@5<5AB8BL&Move QMdiSubWindow&>AAB0=>28BL&Restore QMdiSubWindow& 07<5@&Size QMdiSubWindow - [%1]- [%1] QMdiSubWindow0:@KBLClose QMdiSubWindow!?@02:0Help QMdiSubWindow &0A?0E=CBL Ma&ximize QMdiSubWindow 0A?0E=CBLMaximize QMdiSubWindow5=NMenu QMdiSubWindow&!25@=CBL Mi&nimize QMdiSubWindow!25@=CBLMinimize QMdiSubWindow>AAB0=>28BLRestore QMdiSubWindow>AAB0=>28BL Restore Down QMdiSubWindow(!25@=CBL 2 703>;>2>:Shade QMdiSubWindow$AB020BLAO &A25@EC Stay on &Top QMdiSubWindow2>AAB0=>28BL 87 703>;>2:0Unshade QMdiSubWindow0:@KBLCloseQMenuK?>;=8BLExecuteQMenuB:@KBLOpenQMenu59AB28OActionsQMenuBar#3;>20O ?0=5;LCorner ToolbarQMenuBarz<h3> Qt</h3><p>0==0O ?@>3@0<<0 8A?>;L7C5B Qt 25@A88 %1.</p>8

About Qt

This program uses Qt version %1.

 QMessageBox <p>Qt - MB> 8=AB@C<5=B0@89 4;O @07@01>B:8 :@>AA?;0BD>@<5==KE ?@8;>65=89 =0 C++.</p><p>Qt ?@54>AB02;O5B A>2<5AB8<>ABL =0 C@>2=5 8AE>4=KE B5:AB>2 <564C MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux 8 2A5<8 ?>?C;O@=K<8 :><<5@G5A:8<8 20@80=B0<8 Unix. "0:65 Qt 4>ABC?=0 4;O 2AB@08205<KE CAB@>9AB2 2 2845 Qt 4;O Embedded Linux 8 Qt 4;O Windows CE.</p><p>Qt 4>ABC?=0 ?>4 B@5<O @07;8G=K<8 ;8F5=78O<8, @07@01>B0==K<8 4;O C4>2;5B2>@5=8O @07;8G=KE B@51>20=89.</p><p>Qt ?>4 =0H59 :><<5@G5A:>9 ;8F5=7859 ?@54=07=0G5=0 4;O @0728B8O ?@>?@85B0@=>3>/:><<5@G5A:>3> ?@>3@0<<=>3> >15A?5G5=8O, :>340 K =5 65;05B5 ?@54>AB02;OBL 8AE>4=K5 B5:ABK B@5BL8< AB>@>=0<, 8;8 2 A;CG05 =52>7<>6=>AB8 ?@8=OB8O CA;>289 ;8F5=789 GNU LGPL 25@A88 2.1 8;8 GNU GPL 25@A88 3.0.</p><p>Qt ?>4 ;8F5=7859 GNU LGPL 25@A88 2.1 ?@54=07=0G5=0 4;O @07@01>B:8 ?@>3@0<<=>3> >15A?5G5=8O A >B:@KBK<8 8AE>4=K<8 B5:AB0<8 8;8 :><<5@G5A:>3> ?@>3@0<<=>3> >15A?5G5=8O ?@8 A>1;N45=88 CA;>289 ;8F5=788 GNU LGPL 25@A88 2.1.</p><p>Qt ?>4 ;8F5=7859 GNU General Public License 25@A88 3.0 ?@54=07=0G5=0 4;O @07@01>B:8 ?@>3@0<<=KE ?@8;>65=89 2 B5E A;CG0OE, :>340 K E>B5;8 1K 8A?>;L7>20BL B0:85 ?@8;>65=8O 2 A>G5B0=88 A ?@>3@0<<=K< >15A?5G5=85< =0 CA;>28OE ;8F5=788 GNU GPL A 25@A88 3.0 8;8 5A;8 K 3>B>2K A>1;N40BL CA;>28O ;8F5=788 GNU GPL 25@A88 3.0.</p><p>1@0B8B5AL : <a href="http://qt.digia.com/product/licensing">qt.digia.com/product/licensing</a> 4;O >17>@0 ;8F5=789 Qt.</p><p>Copyright (C) 2012 >@?>@0F8O Digia 8/8;8 5Q 4>G5@=85 ?>4@0745;5=8O.</p><p>Qt - ?@>4C:B :><?0=88 Digia. 1@0B8B5AL : <a href="http://qt.digia.com/">qt.digia.com</a> 4;O ?>;CG5=8O 4>?>;=8B5;L=>9 8=D>@<0F88.</p>

Qt is a C++ toolkit for cross-platform application development.

Qt provides single-source portability across MS Windows, Mac OS X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.

Qt is available under three different licensing options designed to accommodate the needs of our various users.

Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.

Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.

Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.

Please see qt.digia.com/product/licensing for an overview of Qt licensing.

Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).

Qt is a Digia product. See qt.digia.com for more information.

 QMessageBox QtAbout Qt QMessageBox!?@02:0Help QMessageBox*!:@KBL ?>4@>1=>AB8...Hide Details... QMessageBox0:@KBLOK QMessageBox.>:070BL ?>4@>1=>AB8...Show Details... QMessageBox$K1>@ @568<0 22>40 Select IMQMultiInputContextR5@5:;NG0B5;L @568<0 <=>65AB25==>3> 22>40Multiple input method switcherQMultiInputContextPlugin5@5:;NG0B5;L @568<0 <=>65AB25==>3> 22>40, 8A?>;L7C5<K9 2 :>=B5:AB=>< <5=N B5:AB>2KE @540:B>@>2MMultiple input method switcher that uses the context menu of the text widgetsQMultiInputContextPluginN@C3>9 A>:5B C65 ?@>A;CH8205B MB>B ?>@B4Another socket is already listening on the same portQNativeSocketEngine|>?KB:0 8A?>;L7>20BL IPv6 =0 ?;0BD>@<5, =5 ?>445@6820NI59 IPv6=Attempt to use IPv6 socket on a platform with no IPv6 supportQNativeSocketEngine*B:070=> 2 A>548=5=88Connection refusedQNativeSocketEngine6@5<O =0 A>548=5=85 8AB5:;>Connection timed outQNativeSocketEngineN0B03@0<<0 A;8H:>< 1>;LH0O 4;O >B?@02:8Datagram was too large to sendQNativeSocketEngine#75; =54>ABC?5=Host unreachableQNativeSocketEngine<5:>@@5:B=K9 45A:@8?B>@ A>:5B0Invalid socket descriptorQNativeSocketEngineH81:0 A5B8 Network errorQNativeSocketEngineB@5<O =0 A5B52CN >?5@0F8N 8AB5:;>Network operation timed outQNativeSocketEngine!5BL =54>ABC?=0Network unreachableQNativeSocketEngine*?5@0F8O A =5-A>:5B><Operation on non-socketQNativeSocketEngine*54>AB0B>G=> @5AC@A>2Out of resourcesQNativeSocketEngine>ABC? 70?@5IQ=Permission deniedQNativeSocketEngine4@>B>:>; =5 ?>445@68205BAOProtocol type not supportedQNativeSocketEngine 4@5A =54>ABC?5=The address is not availableQNativeSocketEngine4@5A 70I8IQ=The address is protectedQNativeSocketEngine,4@5A C65 8A?>;L7C5BAO#The bound address is already in useQNativeSocketEnginef5:>@@5:B=K9 B8? ?@>:A8-A5@25@0 4;O 40==>9 >?5@0F88,The proxy type is invalid for this operationQNativeSocketEngine@#40;Q==K9 C75; 70:@K; A>548=5=85%The remote host closed the connectionQNativeSocketEnginef52>7<>6=> 8=8F80;878@>20BL H8@>:>25I0B5;L=K9 A>:5B%Unable to initialize broadcast socketQNativeSocketEngineX52>7<>6=> 8=8F80;878@>20BL =5-1;>G=K9 A>:5B(Unable to initialize non-blocking socketQNativeSocketEngine:52>7<>6=> ?>;CG8BL A>>1I5=85Unable to receive a messageQNativeSocketEngine<52>7<>6=> >B?@028BL A>>1I5=85Unable to send a messageQNativeSocketEngine&52>7<>6=> 70?8A0BLUnable to writeQNativeSocketEngine$58725AB=0O >H81:0 Unknown errorQNativeSocketEngineH?5@0F8O A A>:5B>< =5 ?>445@68205BAOUnsupported socket operationQNativeSocketEngine$H81:0 >B:@KB8O %1Error opening %1QNetworkAccessCacheBackend(5:>@@5:B=K9 URI: %1Invalid URI: %1QNetworkAccessDataBackendf#40;Q==K9 C75; =5>6840==> ?@5@20; A>548=5=85 4;O %13Remote host closed the connection prematurely on %1QNetworkAccessDebugPipeBackend.H8:0 A>:5B0 4;O %1: %2Socket error on %1: %2QNetworkAccessDebugPipeBackend,H81:0 70?8A8 2 %1: %2Write error writing to %1: %2QNetworkAccessDebugPipeBackendZ52>7<>6=> >B:@KBL %1: #:070= ?CBL : :0B0;>3C#Cannot open %1: Path is a directoryQNetworkAccessFileBackend,H81:0 >B:@KB8O %1: %2Error opening %1: %2QNetworkAccessFileBackend.H81:0 GB5=8O 87 %1: %2Read error reading from %1: %2QNetworkAccessFileBackend`0?@>A =0 >B:@KB85 D09;0 2=5 D09;>2>9 A8AB5<K %1%Request for opening non-local file %1QNetworkAccessFileBackend,H81:0 70?8A8 2 %1: %2Write error writing to %1: %2QNetworkAccessFileBackendZ52>7<>6=> >B:@KBL %1: #:070= ?CBL : :0B0;>3CCannot open %1: is a directoryQNetworkAccessFtpBackendBH81:0 2 ?@>F5AA5 703@C7:8 %1: %2Error while downloading %1: %2QNetworkAccessFtpBackendBH81:0 2 ?@>F5AA5 >B3@C7:8 %1: %2Error while uploading %1: %2QNetworkAccessFtpBackendb!>548=5=85 A %1 =5 C40;>AL: B@51C5BAO 02B>@870F8O0Logging in to %1 failed: authentication requiredQNetworkAccessFtpBackendD>4E>4OI89 ?@>:A8-A5@25@ =5 =0945=No suitable proxy foundQNetworkAccessFtpBackendD>4E>4OI89 ?@>:A8-A5@25@ =5 =0945=No suitable proxy foundQNetworkAccessHttpBackend.>ABC? 2 A5BL >B:;NGQ=.Network access is disabled.QNetworkAccessManagerLH81:0 703@C7:8 %1 - >B25B A5@25@0: %2)Error downloading %1 - server replied: %2 QNetworkReply,H81:0 A5B52>9 A5AA88.Network session error. QNetworkReply258725AB=K9 ?@>B>:>; %1Protocol "%1" is unknown QNetworkReply,@5<5==0O >H81:0 A5B8.Temporary network failure. QNetworkReply0>H81:0 70?CA:0 4@0925@0.backend start error. QNetworkReply"?5@0F8O >B<5=5=0Operation canceledQNetworkReplyImpl45:>@@5:B=0O :>=D83C@0F8O.Invalid configuration.QNetworkSessionH81:0 @>C<8=30 Roaming errorQNetworkSessionPrivateImpl> >C<8=3 ?@5@20= 8;8 =52>7<>65=.'Roaming was aborted or is not possible.QNetworkSessionPrivateImplT!5AA8O ?@5@20=0 ?>;L7>20B5;5< 8;8 A8AB5<>9!Session aborted by user or systemQNetworkSessionPrivateImpl\"@51C5<0O >?5@0F8O =5 ?>445@68205BAO A8AB5<>9.7The requested operation is not supported by the system.QNetworkSessionPrivateImpl`!5AA8O 1K;0 ?@5@20=0 ?>;L7>20B5;5< 8;8 A8AB5<>9..The session was aborted by the user or system.QNetworkSessionPrivateImpl^52>7<>6=> 8A?>;L7>20BL C:070==CN :>=D83C@0F8N.+The specified configuration cannot be used.QNetworkSessionPrivateImpl*5>?@545;Q==0O >H81:0Unidentified ErrorQNetworkSessionPrivateImpl458725AB=0O >H81:0 A5AA88.Unknown session error.QNetworkSessionPrivateImpl852>7<>6=> =0G0BL B@0=70:F8NUnable to begin transaction QOCIDriver>52>7<>6=> 7025@H8BL B@0=70:F8NUnable to commit transaction QOCIDriver652>7<>6=> 8=8F80;878@>20BLUnable to initialize QOCIDriver252>7<>6=> 02B>@87>20BLAOUnable to logon QOCIDriver<52>7<>6=> >B:0B8BL B@0=70:F8NUnable to rollback transaction QOCIDriver852>7<>6=> A>740BL 2K@065=85Unable to alloc statement QOCIResultj52>7<>6=> ?@82O70BL AB>;15F 4;O ?0:5B=>3> 2K?>;=5=8O'Unable to bind column for batch execute QOCIResultX52>7<>6=> ?@82O70BL @57C;LB8@CNI85 7=0G5=8OUnable to bind value QOCIResultN52>7<>6=> 2K?>;=8BL ?0:5B=>5 2K@065=85!Unable to execute batch statement QOCIResult<52>7<>6=> 2K?>;=8BL 2K@065=85Unable to execute statement QOCIResultF52>7<>6=> >?@545;8BL B8? 2K@065=8OUnable to get statement type QOCIResultJ52>7<>6=> ?5@59B8 : A;54CNI59 AB@>:5Unable to goto next QOCIResult@52>7<>6=> ?>43>B>28BL 2K@065=85Unable to prepare statement QOCIResult>52>7<>6=> 7025@H8BL B@0=70:F8NUnable to commit transaction QODBCDriver,52>7<>6=> A>548=8BLAOUnable to connect QODBCDriver52>7<>6=> A>548=8BLAO - @0925@ =5 ?>445@68205B B@51C5<K9 DC=:F8>=0;EUnable to connect - Driver doesn't support all functionality required QODBCDriver\52>7<>6=> >B:;NG8BL 02B>7025@H5=85 B@0=70:F89Unable to disable autocommit QODBCDriverZ52>7<>6=> 2:;NG8BL 02B>7025@H5=85 B@0=70:F89Unable to enable autocommit QODBCDriver<52>7<>6=> >B:0B8BL B@0=70:F8NUnable to rollback transaction QODBCDriverQODBCResult::reset: 52>7<>6=> CAB0=>28BL SQL_CURSOR_STATIC 0B@81CB>< 2K@065=85. @>25@LB5 =0AB@>9:8 4@0925@0 ODBCyQODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration QODBCResult:52>7<>6=> ?@82O70BL 7=0G5=85Unable to bind variable QODBCResult<52>7<>6=> 2K?>;=8BL 2K@065=85Unable to execute statement QODBCResult452>7<>6=> ?>;CG8BL 40==K5Unable to fetch QODBCResultB52>7<>6=> ?>;CG8BL ?5@2CN AB@>:CUnable to fetch first QODBCResultH52>7<>6=> ?>;CG8BL ?>A;54=NN AB@>:CUnable to fetch last QODBCResultH52>7<>6=> ?>;CG8BL A;54CNICN AB@>:CUnable to fetch next QODBCResultJ52>7<>6=> ?>;CG8BL ?@54K4CICN AB@>:CUnable to fetch previous QODBCResult@52>7<>6=> ?>43>B>28BL 2K@065=85Unable to prepare statement QODBCResultv%1 ?>2B>@O5B 8<O ?@54K4CI59 @>;8 8 =5 1C45B 8A?>;L7>20=>.:"%1" duplicates a previous role name and will be disabled.QObjectT5 C40;>AL ?@>G8B0BL >:>=G0=85 87>1@065=8OCould not read footerQObjectN5 C40;>AL ?@>G8B0BL 40==K5 87>1@065=8OCould not read image dataQObjectL5 C40;>AL A1@>A8BL 2 8AE>4=CN ?>78F8N!Could not reset to start positionQObjectX5 C40;>AL ?5@5<5AB8BLAO : :>=FC 87>1@065=8O#Could not seek to image read footerQObjectHomeHomeQObject#75; =5 =0945=Host not foundQObjectL54>?CAB8<0O 3;C18=0 F25B0 87>1@065=8OImage depth not validQObjectP5 C40;>AL ?@>G8B0BL mHeader 87>1@065=8OImage mHeader read failedQObject|"8? 87>1@065=8O (>B;8G=K9 >B TrueVision 2.0) =5 ?>445@68205BAO-Image type (non-TrueVision 2.0) not supportedQObjectB"8? 87>1@065=8O =5 ?>445@68205BAOImage type not supportedQObject42C:>2>9 A5@25@ PulseAudioPulseAudio Sound ServerQObject5 C40;>AL ?@>8725AB8 ?5@5<5I5=85 ?> D09;C/CAB@>9AB2C 4;O GB5=8O 87>1@065=8O&Seek file/device for image read failedQObject5 ?>445@68205BAO GB5=8O 87>1@065=89 87 ?>A;54>20B5;L=KE CAB@>9AB2 (=0?@8<5@ A>:5B0):Sequential device (eg socket) for image read not supportedQObject25:>@@5:B=K9 70?@>A: %1invalid query: "%1"QObject<ONameQPPDOptionsModel=0G5=85ValueQPPDOptionsModel85 C40;>AL =0G0BL B@0=70:F8NCould not begin transaction QPSQLDriver>5 C40;>AL 7025@H8BL B@0=70:F8NCould not commit transaction QPSQLDriver<5 C40;>AL >B:0B8BL B@0=70:F8NCould not rollback transaction QPSQLDriver,52>7<>6=> A>548=8BLAOUnable to connect QPSQLDriver,52>7<>6=> ?>4?8A0BLAOUnable to subscribe QPSQLDriver*52>7<>6=> >B?8A0BLAOUnable to unsubscribe QPSQLDriver252>7<>6=> A>740BL 70?@>AUnable to create query QPSQLResult@52>7<>6=> ?>43>B>28BL 2K@065=85Unable to prepare statement QPSQLResult!0=B8<5B@K (cm)Centimeters (cm)QPageSetupWidget $>@<0FormQPageSetupWidgetKA>B0:Height:QPageSetupWidgetN9<K (in) Inches (in)QPageSetupWidget;L1><=0O LandscapeQPageSetupWidget>;OMarginsQPageSetupWidget8;;8<5B@K (mm)Millimeters (mm)QPageSetupWidget@85=B0F8O OrientationQPageSetupWidget  07<5@ AB@0=8FK: Page size:QPageSetupWidget C<030PaperQPageSetupWidget AB>G=8: 1C<038: Paper source:QPageSetupWidget">G:8 (pt) Points (pt)QPageSetupWidget=86=0OPortraitQPageSetupWidget,5@52Q@=CB0O 0;L1><=0OReverse landscapeQPageSetupWidget(5@52Q@=CB0O :=86=0OReverse portraitQPageSetupWidget(8@8=0:Width:QPageSetupWidget=86=55 ?>;5 bottom marginQPageSetupWidget;52>5 ?>;5 left marginQPageSetupWidget?@02>5 ?>;5 right marginQPageSetupWidget25@E=55 ?>;5 top marginQPageSetupWidget.>4C;L =5 1K; 703@C65=.The plugin was not loaded. QPluginLoader$58725AB=0O >H81:0 Unknown error QPluginLoaderN%1 C65 ACI5AB2C5B. %>B8B5 70<5=8BL 53>?/%1 already exists. Do you want to overwrite it? QPrintDialogX%1 - MB> :0B0;>3. K15@8B5 4@C3>5 8<O D09;0.7%1 is a directory. Please choose a different file name. QPrintDialog&0@0<5B@K << &Options << QPrintDialog&0@0<5B@K >> &Options >> QPrintDialog&5G0BL&Print QPrintDialog2<qt>%>B8B5 70<5=8BL?</qt>%Do you want to overwrite it? QPrintDialogA0A0 QPrintDialog$A0 (841 x 1189 <<)A0 (841 x 1189 mm) QPrintDialogA1A1 QPrintDialog"A1 (594 x 841 <<)A1 (594 x 841 mm) QPrintDialogA2A2 QPrintDialog"A2 (420 x 594 <<)A2 (420 x 594 mm) QPrintDialogA3A3 QPrintDialog"A3 (297 x 420 <<)A3 (297 x 420 mm) QPrintDialogA4A4 QPrintDialogJA4 (210 x 297 <<, 8.26 x 11.7 4N9<>2)%A4 (210 x 297 mm, 8.26 x 11.7 inches) QPrintDialogA5A5 QPrintDialog"A5 (148 x 210 <<)A5 (148 x 210 mm) QPrintDialogA6A6 QPrintDialog"A6 (105 x 148 <<)A6 (105 x 148 mm) QPrintDialogA7A7 QPrintDialog A7 (74 x 105 <<)A7 (74 x 105 mm) QPrintDialogA8A8 QPrintDialogA8 (52 x 74 <<)A8 (52 x 74 mm) QPrintDialogA9A9 QPrintDialogA9 (37 x 52 <<)A9 (37 x 52 mm) QPrintDialogA524>=8<K: %1 Aliases: %1 QPrintDialogB0B0 QPrintDialog&B0 (1000 x 1414 <<)B0 (1000 x 1414 mm) QPrintDialogB1B1 QPrintDialog$B1 (707 x 1000 <<)B1 (707 x 1000 mm) QPrintDialogB10B10 QPrintDialog B10 (31 x 44 <<)B10 (31 x 44 mm) QPrintDialogB2B2 QPrintDialog"B2 (500 x 707 <<)B2 (500 x 707 mm) QPrintDialogB3B3 QPrintDialog"B3 (353 x 500 <<)B3 (353 x 500 mm) QPrintDialogB4B4 QPrintDialog"B4 (250 x 353 <<)B4 (250 x 353 mm) QPrintDialogB5B5 QPrintDialogJB5 (176 x 250 <<, 6.93 x 9.84 4N9<>2)%B5 (176 x 250 mm, 6.93 x 9.84 inches) QPrintDialogB6B6 QPrintDialog"B6 (125 x 176 <<)B6 (125 x 176 mm) QPrintDialogB7B7 QPrintDialog B7 (88 x 125 <<)B7 (88 x 125 mm) QPrintDialogB8B8 QPrintDialogB8 (62 x 88 <<)B8 (62 x 88 mm) QPrintDialogB9B9 QPrintDialogB9 (44 x 62 <<)B9 (44 x 62 mm) QPrintDialogC5EC5E QPrintDialog$C5E (163 x 229 <<)C5E (163 x 229 mm) QPrintDialog >;L7>20B5;LA:89Custom QPrintDialogDLEDLE QPrintDialog$DLE (110 x 220 <<)DLE (110 x 220 mm) QPrintDialogExecutive Executive QPrintDialogRExecutive (191 x 254 <<, 7.5 x 10 4N9<>2))Executive (7.5 x 10 inches, 191 x 254 mm) QPrintDialogh%1 =54>ABC?5= 4;O 70?8A8. K15@8B5 4@C3>5 8<O D09;0.=File %1 is not writable. Please choose a different file name. QPrintDialog$09; ACI5AB2C5B File exists QPrintDialog FolioFolio QPrintDialog(Folio (210 x 330 <<)Folio (210 x 330 mm) QPrintDialog LedgerLedger QPrintDialog*Ledger (432 x 279 <<)Ledger (432 x 279 mm) QPrintDialog LegalLegal QPrintDialogJLegal (216 x 356 <<, 8.5 x 14 4N9<>2)%Legal (8.5 x 14 inches, 216 x 356 mm) QPrintDialog LetterLetter QPrintDialogLLetter (216 x 279 <<, 8.5 x 11 4N9<>2)&Letter (8.5 x 11 inches, 216 x 279 mm) QPrintDialog>:0;L=K9 D09; Local file QPrintDialog0:@KBLOK QPrintDialog 5G0BLPrint QPrintDialog"5G0BL 2 D09; ...Print To File ... QPrintDialogA5 AB@0=8FK Print all QPrintDialog "5:CI0O AB@0=8F0Print current page QPrintDialog 80?07>= AB@0=8F Print range QPrintDialog&K45;5==K9 D@03<5=BPrint selection QPrintDialog&5G0BL 2 D09; (PDF)Print to File (PDF) QPrintDialog45G0BL 2 D09; (Postscript)Print to File (Postscript) QPrintDialogTabloidTabloid QPrintDialog,Tabloid (279 x 432 <<)Tabloid (279 x 432 mm) QPrintDialog`=0G5=85 A =5 <>65B 1KBL 1>;LH5 7=0G5=8O ?>.7The 'From' value cannot be greater than the 'To' value. QPrintDialog,US Common #10 EnvelopeUS Common #10 Envelope QPrintDialog6>=25@B US #10 (105x241 <<)%US Common #10 Envelope (105 x 241 mm) QPrintDialog0?8AL %1 D09;0 Write %1 file QPrintDialog$A>548=5=> ;>:0;L=>locally connected QPrintDialog=58725AB=>unknown QPrintDialog%1%%1%QPrintPreviewDialog0:@KBLCloseQPrintPreviewDialog-:A?>@B 2 PDF Export to PDFQPrintPreviewDialog(-:A?>@B 2 PostscriptExport to PostScriptQPrintPreviewDialog5@20O AB@0=8F0 First pageQPrintPreviewDialog0 2AN AB@0=8FCFit pageQPrintPreviewDialog> H8@8=5 Fit widthQPrintPreviewDialog;L1><=0O LandscapeQPrintPreviewDialog$>A;54=OO AB@0=8F0 Last pageQPrintPreviewDialog$!;54CNI0O AB@0=8F0 Next pageQPrintPreviewDialog$0@0<5B@K AB@0=8FK Page SetupQPrintPreviewDialog$0@0<5B@K AB@0=8FK Page setupQPrintPreviewDialog=86=0OPortraitQPrintPreviewDialog&@54K4CI0O AB@0=8F0 Previous pageQPrintPreviewDialog 5G0BLPrintQPrintPreviewDialog@>A<>B@ ?5G0B8 Print PreviewQPrintPreviewDialog6>:070BL B8BC;L=K5 AB@0=8FKShow facing pagesQPrintPreviewDialog6>:070BL >17>@ 2A5E AB@0=8FShow overview of all pagesQPrintPreviewDialog,>:070BL >4=C AB@0=8FCShow single pageQPrintPreviewDialog#25;8G8BLZoom inQPrintPreviewDialog#<5=LH8BLZoom outQPrintPreviewDialog>?>;=8B5;L=>AdvancedQPrintPropertiesWidget $>@<0FormQPrintPropertiesWidget!B@0=8F0PageQPrintPropertiesWidget& 07>1@0BL ?> :>?8O<CollateQPrintSettingsOutput&25BColorQPrintSettingsOutput 568< F25B0 Color ModeQPrintSettingsOutput >?88CopiesQPrintSettingsOutput">;8G5AB2> :>?89:Copies:QPrintSettingsOutput "5:CI0O AB@0=8F0 Current PageQPrintSettingsOutput&2CAB>@>==OO ?5G0BLDuplex PrintingQPrintSettingsOutput $>@<0FormQPrintSettingsOutputBB5=:8 A5@>3> GrayscaleQPrintSettingsOutput$> 4;8==>9 AB>@>=5 Long sideQPrintSettingsOutput5BNoneQPrintSettingsOutput0@0<5B@KOptionsQPrintSettingsOutput 0AB@>9:8 2K2>40Output SettingsQPrintSettingsOutput!B@0=8FK A Pages fromQPrintSettingsOutputA5 Print allQPrintSettingsOutput80?07>= ?5G0B8 Print rangeQPrintSettingsOutput 1@0B=K9 ?>@O4>:ReverseQPrintSettingsOutput&K45;5==K9 D@03<5=B SelectionQPrintSettingsOutput&> :>@>B:>9 AB>@>=5 Short sideQPrintSettingsOutput?>toQPrintSettingsOutput&0720=85:&Name: QPrintWidget...... QPrintWidget $>@<0Form QPrintWidget 0A?>;>65=85: Location: QPrintWidgetK2>4 2 &D09;: Output &file: QPrintWidget!&2>9AB20 P&roperties QPrintWidget@>A<>B@Preview QPrintWidget@8=B5@Printer QPrintWidget"8?:Type: QPrintWidgetf5 C40;>AL >B:@KBL ?5@5=0?@02;5=85 22>40 4;O GB5=8O,Could not open input redirection for readingQProcessh5 C40;>AL >B:@KBL ?5@5=0?@02;5=85 2K2>40 4;O 70?8A8-Could not open output redirection for writingQProcessFH81:0 ?>;CG5=8O 40==KE >B ?@>F5AA0Error reading from processQProcess>H81:0 >B?@02:8 40==KE ?@>F5AACError writing to processQProcess(@>3@0<<0 =5 C:070=0No program definedQProcess8@>F5AA 7025@H8;AO A >H81:>9Process crashedQProcess@5 C40;>AL 70?CAB8BL ?@>F5AA: %1Process failed to start: %1QProcessJ@5<O =0 >?5@0F8N A ?@>F5AA>< 8AB5:;>Process operation timed outQProcessRH81:0 2K45;5=8O @5AC@A>2 (A1>9 fork): %1!Resource error (fork failure): %1QProcess B<5=0CancelQProgressDialogB:@KBLOpen QPushButtonB<5B8BLCheck QRadioButtonL=5?@028;L=K9 A8=B0:A8A :;0AA0 A8<2>;>2bad char class syntaxQRegExp@=5?@028;L=K9 A8=B0:A8A lookaheadbad lookahead syntaxQRegExpB=5?@028;L=K9 A8=B0:A8A ?>2B>@5=8Obad repetition syntaxQRegExpL8A?>;L7>20=85 >B:;NGQ==KE 2>7<>6=>AB59disabled feature usedQRegExp,=5:>@@5:B=0O :0B53>@8Oinvalid categoryQRegExp*=5:>@@5:B=K9 8=B5@20;invalid intervalQRegExpD=5:>@@5:B=>5 2>AL<5@8G=>5 7=0G5=85invalid octal valueQRegExpXlookbehind =5 ?>445@68205BAO, A<. QTBUG-2371)lookbehinds not supported, see QTBUG-2371QRegExpB4>AB83=CB> 2=CB@5==55 >3@0=8G5=85met internal limitQRegExp:>BACBAB2C5B ;52K9 @0745;8B5;Lmissing left delimQRegExp$>H81:8 >BACBAB2CNBno error occurredQRegExp"=5>6840==K9 :>=5Funexpected endQRegExp6H81:0 >B:@KB8O 107K 40==KEError opening databaseQSQLite2Driver852>7<>6=> =0G0BL B@0=70:F8NUnable to begin transactionQSQLite2Driver>52>7<>6=> 7025@H8BL B@0=70:F8NUnable to commit transactionQSQLite2Driver<52>7<>6=> >B:0B8BL B@0=70:F8NUnable to rollback transactionQSQLite2Driver<52>7<>6=> 2K?>;=8BL 2K@065=85Unable to execute statementQSQLite2Result<52>7<>6=> ?>;CG8BL @57C;LB0BKUnable to fetch resultsQSQLite2Result6H81:0 70:@KB8O 107K 40==KEError closing database QSQLiteDriver6H81:0 >B:@KB8O 107K 40==KEError opening database QSQLiteDriver852>7<>6=> =0G0BL B@0=70:F8NUnable to begin transaction QSQLiteDriver>52>7<>6=> 7025@H8BL B@0=70:F8NUnable to commit transaction QSQLiteDriver<52>7<>6=> >B:0B8BL B@0=70:F8NUnable to rollback transaction QSQLiteDriver$BACBAB2C5B 70?@>ANo query QSQLiteResultD>;8G5AB2> ?0@0<5B@>2 =5 A>2?0405BParameter count mismatch QSQLiteResult:52>7<>6=> ?@82O70BL ?0@0<5B@Unable to bind parameters QSQLiteResultl52>7<>6=> >4=>2@5<5==> 70?CAB8BL =5A:>;L:> >?5@0B>@>2/Unable to execute multiple statements at a time QSQLiteResult<52>7<>6=> 2K?>;=8BL 2K@065=85Unable to execute statement QSQLiteResult452>7<>6=> ?>;CG8BL AB@>:CUnable to fetch row QSQLiteResult:52>7<>6=> A1@>A8BL 2K@065=85Unable to reset statement QSQLiteResult#A;>285 ConditionQScriptBreakpointsModel!>2?045=89 Hit-countQScriptBreakpointsModelIDIDQScriptBreakpointsModel@>?CI5=> Ignore-countQScriptBreakpointsModel 07<5I5=85LocationQScriptBreakpointsModel4=>:@0B=> Single-shotQScriptBreakpointsModel#40;8BLDeleteQScriptBreakpointsWidget >20ONewQScriptBreakpointsWidget(&09B8 2 AF5=0@88...&Find in Script...QScriptDebugger G8AB8BL :>=A>;L Clear ConsoleQScriptDebugger2G8AB8BL >B;04>G=K9 2K2>4Clear Debug OutputQScriptDebugger,G8AB8BL 6C@=0; >H81>:Clear Error LogQScriptDebugger@>4>;68BLContinueQScriptDebugger Ctrl+FCtrl+FQScriptDebuggerCtrl+F10Ctrl+F10QScriptDebugger Ctrl+GCtrl+GQScriptDebuggerB;04:0DebugQScriptDebuggerF10F10QScriptDebuggerF11F11QScriptDebuggerF3F3QScriptDebuggerF5F5QScriptDebuggerF9F9QScriptDebugger 09B8 &A;54CNI55 Find &NextQScriptDebugger"09B8 &?@54K4CI55Find &PreviousQScriptDebugger 5@59B8 : AB@>:5 Go to LineQScriptDebugger@5@20BL InterruptQScriptDebugger!B@>:0:Line:QScriptDebugger(K?>;=8BL 4> :C@A>@0 Run to CursorQScriptDebugger8K?>;=8BL 4> =>2>3> AF5=0@8ORun to New ScriptQScriptDebuggerShift+F11 Shift+F11QScriptDebuggerShift+F3Shift+F3QScriptDebuggerShift+F5Shift+F5QScriptDebugger>9B8 2 Step IntoQScriptDebugger K9B8 87 DC=:F88Step OutQScriptDebugger5@59B8 G5@57 Step OverQScriptDebugger@#AB0=>28BL/C1@0BL B>G:C >AB0=>20Toggle BreakpointQScriptDebugger<img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;>8A: A =0G0;0J Search wrappedQScriptDebuggerCodeFinderWidget"#G8BK20BL @538AB@Case SensitiveQScriptDebuggerCodeFinderWidget0:@KBLCloseQScriptDebuggerCodeFinderWidget!;54CNI89NextQScriptDebuggerCodeFinderWidget@54K4CI89PreviousQScriptDebuggerCodeFinderWidget!;>20 F5;8:>< Whole wordsQScriptDebuggerCodeFinderWidget0720=85NameQScriptDebuggerLocalsModel=0G5=85ValueQScriptDebuggerLocalsModel#@>25=LLevelQScriptDebuggerStackModel 07<5I5=85LocationQScriptDebuggerStackModel0720=85NameQScriptDebuggerStackModel.#A;>285 B>G:8 >AB0=>20:Breakpoint Condition: QScriptEdit*#1@0BL B>G:C >AB0=>20Disable Breakpoint QScriptEdit2#AB0=>28BL B>G:C >AB0=>20Enable Breakpoint QScriptEdit@#AB0=>28BL/C1@0BL B>G:C >AB0=>20Toggle Breakpoint QScriptEdit">G:8 >AB0=>20 BreakpointsQScriptEngineDebugger>=A>;LConsoleQScriptEngineDebugger B;04>G=K9 2K2>4 Debug OutputQScriptEngineDebuggerC@=0; >H81>: Error LogQScriptEngineDebugger(03@C65==K5 AF5=0@88Loaded ScriptsQScriptEngineDebugger(>:0;L=K5 ?5@5<5==K5LocalsQScriptEngineDebugger*B;04G8: AF5=0@852 QtQt Script DebuggerQScriptEngineDebugger >8A:SearchQScriptEngineDebugger!B5:StackQScriptEngineDebugger84ViewQScriptEngineDebugger0:@KBLCloseQScriptNewBreakpointWidget=87Bottom QScrollBar ;52>9 3@0=8F5 Left edge QScrollBar0 AB@>:C 2=87 Line down QScrollBar0 AB@>:C 225@ELine up QScrollBar 0 AB@0=8FC 2=87 Page down QScrollBar"0 AB@0=8FC 2;52> Page left QScrollBar$0 AB@0=8FC 2?@02> Page right QScrollBar"0 AB@0=8FC 225@EPage up QScrollBar>;>65=85Position QScrollBar  ?@02>9 3@0=8F5 Right edge QScrollBar@>:@CB8BL 2=87 Scroll down QScrollBar@>:@CB8BL AN40 Scroll here QScrollBar @>:@CB8BL 2;52> Scroll left QScrollBar"@>:@CB8BL 2?@02> Scroll right QScrollBar @>:@CB8BL 225@E Scroll up QScrollBar 25@ETop QScrollBarR%1: A?5F8D8G5A:89 :;NG UNIX =5 ACI5AB2C5B%1: UNIX key file doesn't exist QSharedMemory$%1: C65 ACI5AB2C5B%1: already exists QSharedMemory %1: =525@=>5 8<O %1: bad name QSharedMemory,%1: @07<5@ <5=LH5 =C;O%1: create size is less then 0 QSharedMemory"%1: =5 ACI5AB2C5B%1: doesn't exist QSharedMemory"%1: =5 ACI5AB2C5B%1: doesn't exists QSharedMemory%1: >H81:0 ftok%1: ftok failed QSharedMemory&%1: =525@=K9 @07<5@%1: invalid size QSharedMemory%1: ?CAB>9 :;NG%1: key is empty QSharedMemory$%1: =5 ?@8;>65==K9%1: not attached QSharedMemory2%1: =54>AB0B>G=> @5AC@A>2%1: out of resources QSharedMemory&%1: 4>ABC? 70?@5IQ=%1: permission denied QSharedMemory>%1: =5 C40;>AL 70?@>A8BL @07<5@%1: size query failed QSharedMemoryV%1: A8AB5<>9 =0;>65=K >3@0=8G5=8O =0 @07<5@$%1: system-imposed size restrictions QSharedMemory8%1: =52>7<>6=> 701;>:8@>20BL%1: unable to lock QSharedMemory6%1: =52>7<>6=> A>740BL :;NG%1: unable to make key QSharedMemoryR%1: =52>7<>6=> CAB0=>28BL :;NG 1;>:8@>2:8%1: unable to set key on lock QSharedMemory:%1: =52>7<>6=> @071;>:8@>20BL%1: unable to unlock QSharedMemory2%1: =58725AB=0O >H81:0 %2%1: unknown error %2 QSharedMemory++ QShortcut(>1028BL 2 871@0==>5 Add Favorite QShortcut"0AB@>9:0 O@:>AB8Adjust Brightness QShortcutAltAlt QShortcutF0F8:;5==>5 2>A?@>872545=85 4>@>6:8Audio Cycle Track QShortcut@>A;54>20B5;L=>5 2>A?@>872545=85 Audio Forward QShortcut2!;CG09=>5 2>A?@>872545=85Audio Random Play QShortcut0>A?@>872545=85 ?> :@C3C Audio Repeat QShortcut*5@5<>B:0 0C48> =0704 Audio Rewind QShortcut#HQ;Away QShortcut 0704Back QShortcut0704/2?5@Q4 Back Forward QShortcutBackspace Backspace QShortcutBacktabBacktab QShortcut#A8;5=85 10A>2 Bass Boost QShortcut0AK =865 Bass Down QShortcut0AK 2KH5Bass Up QShortcut0B0@5OBattery QShortcutBluetooth Bluetooth QShortcut =830Book QShortcut1>7@520B5;LBrowser QShortcutCDCD QShortcut0;L:C;OB>@ Calculator QShortcut>72>=8BLCall QShortcut$$>:CA8@>2:0 :0<5@K Camera Focus QShortcut0B2>@ :0<5@KCamera Shutter QShortcut5@=89 @538AB@ Caps Lock QShortcutCapsLockCapsLock QShortcutG8AB8BLClear QShortcut0:@KBLClose QShortcut2>4 :>40 Code input QShortcut!>>1I5AB2> Community QShortcut>?8@>20BLCopy QShortcutCtrlCtrl QShortcutK@570BLCut QShortcutDOSDOS QShortcutDelDel QShortcut#40;8BLDelete QShortcutB>1@078BLDisplay QShortcut>:C<5=BK Documents QShortcut=87Down QShortcut72;5GLEject QShortcutEndEnd QShortcut EnterEnter QShortcutEscEsc QShortcut EscapeEscape QShortcutF%1F%1 QShortcut71@0==>5 Favorites QShortcut$8=0=AKFinance QShortcut @KH:0Flip QShortcut ?5@Q4Forward QShortcut3@0Game QShortcut5@59B8Go QShortcut B1>9Hangup QShortcut!?@02:0Help QShortcut#AK?8BL Hibernate QShortcutAB>@8OHistory QShortcutHomeHome QShortcut><0H=89 >D8A Home Office QShortcut"><0H=OO AB@0=8F0 Home Page QShortcut>@OG85 AAK;:8 Hot Links QShortcutInsIns QShortcutAB028BLInsert QShortcutL#<5=LH8BL O@:>ABL ?>4A25B:8 :;0280BC@KKeyboard Brightness Down QShortcutL#25;8G8BL O@:>ABL ?>4A25B:8 :;0280BC@KKeyboard Brightness Up QShortcut>:;./B:;. ?>4A25B:C :;0280BC@KKeyboard Light On/Off QShortcut";0280BC@=>5 <5=N Keyboard Menu QShortcut>2B>@=K9 =01>@Last Number Redial QShortcut0?CAB8BL (0) Launch (0) QShortcut0?CAB8BL (1) Launch (1) QShortcut0?CAB8BL (2) Launch (2) QShortcut0?CAB8BL (3) Launch (3) QShortcut0?CAB8BL (4) Launch (4) QShortcut0?CAB8BL (5) Launch (5) QShortcut0?CAB8BL (6) Launch (6) QShortcut0?CAB8BL (7) Launch (7) QShortcut0?CAB8BL (8) Launch (8) QShortcut0?CAB8BL (9) Launch (9) QShortcut0?CAB8BL (A) Launch (A) QShortcut0?CAB8BL (B) Launch (B) QShortcut0?CAB8BL (C) Launch (C) QShortcut0?CAB8BL (D) Launch (D) QShortcut0?CAB8BL (E) Launch (E) QShortcut0?CAB8BL (F) Launch (F) QShortcut >GB0 Launch Mail QShortcut@>83@K20B5;L Launch Media QShortcut ;52>Left QShortcut0<?>G:0 LightBulb QShortcut K9B8 87 A8AB5<KLogoff QShortcut 5@5A;0BL ?8AL<> Mail Forward QShortcut  K=>:Market QShortcut.>A?@>8725AB8 A;54CNI55 Media Next QShortcut:@8>AB0=>28BL 2>A?@>872545=85 Media Pause QShortcut,0G0BL 2>A?@>872545=85 Media Play QShortcut0>A?@>8725AB8 ?@54K4CI55Media Previous QShortcut0G0BL 70?8AL Media Record QShortcut4AB0=>28BL 2>A?@>872545=85 Media Stop QShortcutAB@5G0Meeting QShortcut5=NMenu QShortcutJ;85=B >1<5=0 <3=>25==K<8 A>>1I5=8O<8 Messenger QShortcutMetaMeta QShortcut4#<5=LH8BL O@:>ABL <>=8B>@0Monitor Brightness Down QShortcut4#25;8G8BL O@:>ABL <>=8B>@0Monitor Brightness Up QShortcut&5A:>;L:> 20@80=B>2Multiple Candidate QShortcut C7K:0Music QShortcut>8 A09BKMy Sites QShortcut>2>AB8News QShortcut5BNo QShortcut &8D@>2K5 :;028H8Num Lock QShortcutNumLockNumLock QShortcut &8D@>2K5 :;028H8 Number Lock QShortcutB:@KBL URLOpen URL QShortcut ?F8OOption QShortcut 0 AB@0=8FC 2=87 Page Down QShortcut"0 AB@0=8FC 225@EPage Up QShortcutAB028BLPaste QShortcut PausePause QShortcut PgDownPgDown QShortcutPgUpPgUp QShortcut"5;5D>=Phone QShortcut7>1@065=8OPictures QShortcut$B:;NG5=85 ?8B0=8O Power Off QShortcut$@54K4CI89 20@80=BPrevious Candidate QShortcut PrintPrint QShortcut5G0BL M:@0=0 Print Screen QShortcut1=>28BLRefresh QShortcut5@5703@C78BLReload QShortcutB25B8BLReply QShortcut ReturnReturn QShortcut ?@02>Right QShortcut>25@=CBL >:=0Rotate Windows QShortcut!>E@0=8BLSave QShortcut"-:@0==0O 70AB02:0 Screensaver QShortcutScroll Lock Scroll Lock QShortcutScrollLock ScrollLock QShortcut >8A:Search QShortcutK1@0BLSelect QShortcutB?@028BLSend QShortcut ShiftShift QShortcut03078=Shop QShortcut!?OI89 @568<Sleep QShortcut @>15;Space QShortcut&@>25@:0 >@D>3@0D88 Spellchecker QShortcut 0745;8BL M:@0= Split Screen QShortcut&-;5:B@>==0O B01;8FK Spreadsheet QShortcut 568< >6840=8OStandby QShortcutAB0=>28BLStop QShortcut!C1B8B@KSubtitle QShortcut>445@6:0Support QShortcut@8>AB0=>28BLSuspend QShortcut SysReqSysReq QShortcut !8AB5<=K9 70?@>ASystem Request QShortcutTabTab QShortcut0=5;L 7040G Task Panel QShortcut"5@<8=0;Terminal QShortcut @5<OTime QShortcut*!=OBL/?>;>68BL B@C1:CToggle Call/Hangup QShortcutP@8>AB0=>28BL/?@>4>;68BL 2>A?@>872545=85Toggle Media Play/Pause QShortcut=AB@C<5=BKTools QShortcut;02=>5 <5=NTop Menu QShortcutCB5H5AB285Travel QShortcut' =865 Treble Down QShortcut' 2KH5 Treble Up QShortcut2!25@EH8@>:>?>;>A=0O A2O7LUltra Wide Band QShortcut 25@EUp QShortcut 845>Video QShortcut84View QShortcut>;>A>2>9 2K7>2 Voice Dial QShortcut"8H5 Volume Down QShortcutK:;NG8BL 72C: Volume Mute QShortcut @><G5 Volume Up QShortcutWWWWWW QShortcut@>1C645=85Wake Up QShortcutM1-:0<5@0WebCam QShortcut"5A?@>2>4=0O A5BLWireless QShortcut$"5:AB>2K9 @540:B>@Word Processor QShortcut0Yes QShortcut#25;8G8BLZoom In QShortcut#<5=LH8BLZoom Out QShortcut iTouchiTouch QShortcut!B@0=8F0 2=87 Page downQSlider!B@0=8F0 2;52> Page leftQSlider!B@0=8F0 2?@02> Page rightQSlider!B@0=8F0 225@EPage upQSlider>;>65=85PositionQSlider8"8? 04@5A0 =5 ?>445@68205BAOAddress type not supportedQSocks5SocketEngineP!>548=5=85 =5 @07@5H5=> A5@25@>< SOCKSv5(Connection not allowed by SOCKSv5 serverQSocks5SocketEngine^!>548=5=85 A ?@>:A8-A5@25@>< =5>6840==> 70:@KB>&Connection to proxy closed prematurelyQSocks5SocketEngineN A>548=5=88 A ?@>:A8-A5@25@>< >B:070=>Connection to proxy refusedQSocks5SocketEngineZ@5<O =0 A>548=5=85 A ?@>:A8-A5@25@>< 8AB5:;>Connection to proxy timed outQSocks5SocketEngine,H81:0 A5@25@5 SOCKSv5General SOCKSv5 server failureQSocks5SocketEngineB@5<O =0 A5B52CN >?5@0F8N 8AB5:;>Network operation timed outQSocks5SocketEngineV5 C40;>AL 02B>@87>20BLAO =0 ?@>:A8-A5@25@5Proxy authentication failedQSocks5SocketEngine^5 C40;>AL 02B>@87>20BLAO =0 ?@>:A8-A5@25@5: %1Proxy authentication failed: %1QSocks5SocketEngine.@>:A8-A5@25@ =5 =0945=Proxy host not foundQSocks5SocketEngine0H81:0 ?@>B>:>;0 SOCKSv5SOCKS version 5 protocol errorQSocks5SocketEngineB><0=40 SOCKSv5 =5 ?>445@68205BAOSOCKSv5 command not supportedQSocks5SocketEngineTTL 8AB5:;> TTL expiredQSocks5SocketEngineX58725AB=0O >H81:0 SOCKSv5 ?@>:A8 (:>4 0x%1)%Unknown SOCKSv5 proxy error code 0x%1QSocks5SocketEngine B<5=0CancelQSoftKeyManager >B>2>DoneQSoftKeyManager KE>4ExitQSoftKeyManagerOKOKQSoftKeyManager0@0<5B@KOptionsQSoftKeyManagerK1@0BLSelectQSoftKeyManager 5=LH5LessQSpinBox >;LH5MoreQSpinBox B<5=0CancelQSql&B<5=8BL 87<5=5=8O?Cancel your edits?QSql>4B25@645=85ConfirmQSql#40;8BLDeleteQSql,#40;8BL 40==CN 70?8AL?Delete this record?QSqlAB028BLInsertQSql5BNoQSql(!>E@0=8BL 87<5=5=8O? Save edits?QSql1=>28BLUpdateQSql0YesQSql`52>7<>6=> ?@54>AB028BL A5@B8D8:0B 157 :;NG0, %1,Cannot provide a certificate with no key, %1 QSslSocketFH81:0 A>740=8O :>=B5:AB0 SSL: (%1)Error creating SSL context (%1) QSslSocket<H81:0 A>740=8O A5AA88 SSL, %1Error creating SSL session, %1 QSslSocket<H81:0 A>740=8O A5AA88 SSL: %1Error creating SSL session: %1 QSslSocket6H81:0 :28B8@>20=8O SSL: %1Error during SSL handshake: %1 QSslSocketTH81:0 703@C7:8 ;>:0;L=>3> A5@B8D8:0B0, %1#Error loading local certificate, %1 QSslSocketFH81:0 703@C7:8 70:@KB>3> :;NG0, %1Error loading private key, %1 QSslSocket"H81:0 GB5=8O: %1Error while reading: %1 QSslSocketT5:>@@5:B=K9 8;8 ?CAB>9 A?8A>: H8D@>2 (%1)!Invalid or empty cipher list (%1) QSslSocket@5 C40;>AL ?@>25@8BL A5@B8D8:0BK!No certificates could be verified QSslSocket5B >H81:8No error QSslSocketh48= 87 A5@B8D8:0B>2 F5=B@0 A5@B8D8:0F88 =5:>@@5:B5=%One of the CA certificates is invalid QSslSocketd0:@KBK9 :;NG =5 A>>B25BAB2C5B >B:@KB><C :;NGC, %1+Private key does not certify public key, %1 QSslSocket@52KH5=> 7=0G5=85 ?0@0<5B@0 4;8=K ?CB8 ?>;O basicConstraints A5@B8D8:0B0!@>: 459AB28O A5@B8D8:0B0 8ABQ:The certificate has expired QSslSocketR!@>: 459AB28O A5@B8D8:0B0 5IQ =5 =0ABC?8; The certificate is not yet valid QSslSocketf!5@B8D8:0B A0<>?>4?8A0==K9 8 =5 O2;O5BAO 7025@5==K<-The certificate is self-signed, and untrusted QSslSocketV5 C40;>AL @0AH8D@>20BL ?>4?8AL A5@B8D8:0B00The certificate signature could not be decrypted QSslSocketj>;5 notAfter A5@B8D8:0B0 A>45@68B =5:>@@5:B=>5 2@5<O9The certificate's notAfter field contains an invalid time QSslSocketl>;5 notBefore A5@B8D8:0B0 A>45@68B =5:>@@5:B=>5 2@5<O:The certificate's notBefore field contains an invalid time QSslSocket "5:CI89 A5@B8D8:0B 8740B5;O 1K; >B:;>=Q=, B0: :0: =0720=85 8740B5;O 8 A5@89=K9 =><5@ =5 A>2?040NB A 845=B8D8:0B>@>< :;NG0 A5@B8D8:0B0The current candidate issuer certificate was rejected because its issuer name and serial number was present and did not match the authority key identifier of the current certificate QSslSocket"5:CI89 A5@B8D8:0B 8740B5;O 1K; >B:;>=Q=, B0: :0: =0720=85 B5<K =5 A>2?0405B A =0720=85< 8740B5;O A5@B8D8:0B0The current candidate issuer certificate was rejected because its subject name did not match the issuer name of the current certificate QSslSocket0720=85 C7;0 =5 A>2?0405B A 4>?CAB8<K<8 =0720=8O<8 C7;>2 A5@B8D8:0B0GThe host name did not match any of the valid hosts for this certificate QSslSocketH5 C40;>AL =09B8 A5@B8D8:0B 8740B5;O)The issuer certificate could not be found QSslSocketv5 C40;>AL =09B8 A5@B8D8:0B 8740B5;O ;>:0;L=>3> A5@B8D8:0B0LThe issuer certificate of a locally looked up certificate could not be found QSslSocket>!5@B8D8:0B C7;0 2 GQ@=>< A?8A:5#The peer certificate is blacklisted QSslSocket<!5@B8D8:0B =5 1K; ?@54>AB02;5=(The peer did not present any certificate QSslSocket\5 C40;>AL ?@>G8B0BL >B:@KBK9 :;NG A5@B8D8:0B03The public key in the certificate could not be read QSslSocket>@=52>9 A5@B8D8:0B F5=B@0 A5@B8D8:0F88 >B<5G5= =0 >B:;>=5=85 4;O 40==>9 F5;8AThe root CA certificate is marked to reject the specified purpose QSslSocket>@=52>9 A5@B8D8:0B F5=B@0 A5@B8D8:0F88 =5 O2;O5BAO 7025@5==K< 4;O 40==>9 F5;87The root CA certificate is not trusted for this purpose QSslSocket>@=52>9 A5@B8D8:0B F5?>G:8 A5@B8D8:0B>2 A0<>?>4?8A0==K9 8 =5 O2;O5BAO 7025@5==K<KThe root certificate of the certificate chain is self-signed, and untrusted QSslSocket@5:>@@5:B=0O ?>4?8AL A5@B8D8:0B0+The signature of the certificate is invalid QSslSocketh@54AB02;5==K9 A5@B8D8:0B =5?@83>45= 4;O 40==>9 F5;87The supplied certificate is unsuitable for this purpose QSslSocketD52>7<>6=> @0AH8D@>20BL 40==K5: %1Unable to decrypt data: %1 QSslSocket<52>7<>6=> 70?8A0BL 40==K5: %1Unable to write data: %1 QSslSocket$58725AB=0O >H81:0 Unknown error QSslSocketBACBAB2C5B A>AB>O=85 ?> C<>;G0=8N 2 8AB>@8G5A:>< A>AB>O=88 %1+Missing default state in history state '%1' QStateMachinerBACBAB2C5B 8AE>4=>5 A>AB>O=85 2 A>AB02=>< A>AB>O=88 %1,Missing initial state in compound state '%1' QStateMachine~5B >1I53> ?@54:0 C 8AB>G=8:0 8 F5;8 ?5@5E>40 87 A>AB>O=8O %1GNo common ancestor for targets and source of transition from state '%1' QStateMachine$58725AB=0O >H81:0 Unknown error QStateMachine6H81:0 >B:@KB8O 107K 40==KEError opening database QSymSQLDriver&525@=K9 ?0@0<5B@: Invalid option:  QSymSQLDriverPOLICY_DB_DEFAULT 4>;6=0 1KBL 7040=0 4> =0G0;0 8A?>;L7>20=8O 4@C38E >?@545;5=89 POLICYQPOLICY_DB_DEFAULT must be defined before any other POLICY definitions can be used QSymSQLDriver852>7<>6=> =0G0BL B@0=70:F8NUnable to begin transaction QSymSQLDriver>52>7<>6=> 7025@H8BL B@0=70:F8NUnable to commit transaction QSymSQLDriver<52>7<>6=> >B:0B8BL B@0=70:F8NUnable to rollback transaction QSymSQLDriverFH81:0 ?>;CG5=8O :>;8G5AB20 :>;>=>:Error retrieving column count QSymSQLResultBH81:0 ?>;CG5=8O =0720=8O :>;>=:8Error retrieving column name QSymSQLResult:H81:0 ?>;CG5=8O B8?0 :>;>=:8Error retrieving column type QSymSQLResultD>;8G5AB2> ?0@0<5B@>2 =5 A>2?0405BParameter count mismatch QSymSQLResult2K@065=85 =5 ?>43>B>2;5=>Statement is not prepared QSymSQLResult:52>7<>6=> ?@82O70BL ?0@0<5B@Unable to bind parameters QSymSQLResult<52>7<>6=> 2K?>;=8BL 2K@065=85Unable to execute statement QSymSQLResult452>7<>6=> ?>;CG8BL AB@>:CUnable to fetch row QSymSQLResult:52>7<>6=> A1@>A8BL 2K@065=85Unable to reset statement QSymSQLResultN@C3>9 A>:5B C65 ?@>A;CH8205B MB>B ?>@B4Another socket is already listening on the same portQSymbianSocketEngine|>?KB:0 8A?>;L7>20BL IPv6 =0 ?;0BD>@<5, =5 ?>445@6820NI59 IPv6=Attempt to use IPv6 socket on a platform with no IPv6 supportQSymbianSocketEngine*B:070=> 2 A>548=5=88Connection refusedQSymbianSocketEngine6@5<O =0 A>548=5=85 8AB5:;>Connection timed outQSymbianSocketEngineN0B03@0<<0 A;8H:>< 1>;LH0O 4;O >B?@02:8Datagram was too large to sendQSymbianSocketEngine#75; =54>ABC?5=Host unreachableQSymbianSocketEngine<5:>@@5:B=K9 45A:@8?B>@ A>:5B0Invalid socket descriptorQSymbianSocketEngineH81:0 A5B8 Network errorQSymbianSocketEngineB@5<O =0 A5B52CN >?5@0F8N 8AB5:;>Network operation timed outQSymbianSocketEngine!5BL =54>ABC?=0Network unreachableQSymbianSocketEngine*?5@0F8O A =5-A>:5B><Operation on non-socketQSymbianSocketEngine*54>AB0B>G=> @5AC@A>2Out of resourcesQSymbianSocketEngine>ABC? 70?@5IQ=Permission deniedQSymbianSocketEngine4@>B>:>; =5 ?>445@68205BAOProtocol type not supportedQSymbianSocketEngineT0==K9 04@5A =5 4>?CAB8< 4;O MB>9 >?5@0F88)The address is invalid for this operationQSymbianSocketEngine 4@5A =54>ABC?5=The address is not availableQSymbianSocketEngine4@5A 70I8IQ=The address is protectedQSymbianSocketEngine,4@5A C65 8A?>;L7C5BAO#The bound address is already in useQSymbianSocketEnginef5:>@@5:B=K9 B8? ?@>:A8-A5@25@0 4;O 40==>9 >?5@0F88,The proxy type is invalid for this operationQSymbianSocketEngine@#40;Q==K9 C75; 70:@K; A>548=5=85%The remote host closed the connectionQSymbianSocketEngineF#:070==0O A5B520O A5AA8O =5 >B:@KB0+The specified network session is not openedQSymbianSocketEnginef52>7<>6=> 8=8F80;878@>20BL H8@>:>25I0B5;L=K9 A>:5B%Unable to initialize broadcast socketQSymbianSocketEngineX52>7<>6=> 8=8F80;878@>20BL =5-1;>G=K9 A>:5B(Unable to initialize non-blocking socketQSymbianSocketEngine:52>7<>6=> ?>;CG8BL A>>1I5=85Unable to receive a messageQSymbianSocketEngine<52>7<>6=> >B?@028BL A>>1I5=85Unable to send a messageQSymbianSocketEngine&52>7<>6=> 70?8A0BLUnable to writeQSymbianSocketEngine$58725AB=0O >H81:0 Unknown errorQSymbianSocketEngineH?5@0F8O A A>:5B>< =5 ?>445@68205BAOUnsupported socket operationQSymbianSocketEngine$%1: C65 ACI5AB2C5B%1: already existsQSystemSemaphore"%1: =5 ACI5AB2C5B%1: does not existQSystemSemaphore$%1: >H81:0 2 8<5=8%1: name errorQSystemSemaphore2%1: =54>AB0B>G=> @5AC@A>2%1: out of resourcesQSystemSemaphore&%1: 4>ABC? 70?@5IQ=%1: permission deniedQSystemSemaphore2%1: =58725AB=0O >H81:0 %2%1: unknown error %2QSystemSemaphore:52>7<>6=> >B:@KBL A>548=5=85Unable to open connection QTDSDriverF52>7<>6=> 8A?>;L7>20BL 107C 40==KEUnable to use database QTDSDriver:B828@>20BLActivateQTabBar(:B828@>20BL 2:;04:CActivate the tabQTabBar0:@KBLCloseQTabBar0:@KBL 2:;04:C Close the tabQTabBar 060BLPressQTabBar @>:@CB8BL 2;52> Scroll LeftQTabBar"@>:@CB8BL 2?@02> Scroll RightQTabBarH?5@0F8O A A>:5B>< =5 ?>445@68205BAO$Operation on socket is not supported QTcpServer&>?8@>20BL&Copy QTextControl&AB028BL&Paste QTextControl&&>2B>@8BL 459AB285&Redo QTextControl$&B<5=8BL 459AB285&Undo QTextControl2!:>?8@>20BL &04@5A AAK;:8Copy &Link Location QTextControl&K@570BLCu&t QTextControl#40;8BLDelete QTextControlK45;8BL 2AQ Select All QTextControlB:@KBLOpen QToolButton 060BLPress QToolButtonJ0==0O ?;0BD>@<0 =5 ?>445@68205B IPv6#This platform does not support IPv6 QUdpSocket$>2B>@8BL 459AB285Redo QUndoGroup>2B>@8BL %1Redo %1 QUndoGroup"B<5=8BL 459AB285Undo QUndoGroupB<5=8BL %1Undo %1 QUndoGroup<?CAB>> QUndoModel$>2B>@8BL 459AB285Redo QUndoStack>2B>@8BL %1Redo %1 QUndoStack"B<5=8BL 459AB285Undo QUndoStackB<5=8BL %1Undo %1 QUndoStackFAB028BL C?@02;ONI89 A8<2>; Unicode Insert Unicode control characterQUnicodeControlCharacterMenu\LRE 0G0;> 2AB@0820=8O =0?8A0=8O A;520 =0?@02>$LRE Start of left-to-right embeddingQUnicodeControlCharacterMenuFLRM @87=0: =0?8A0=8O A;520 =0?@02>LRM Left-to-right markQUnicodeControlCharacterMenuRLRO 0G0;> 70<5=K =0?8A0=8O A;520 =0?@02>#LRO Start of left-to-right overrideQUnicodeControlCharacterMenujPDF @87=0: >:>=G0=8O =0?8A0=8O A 4@C38< =0?@02;5=85<PDF Pop directional formattingQUnicodeControlCharacterMenu\LRE 0G0;> 2AB@0820=8O =0?8A0=8O A?@020 =0;52>$RLE Start of right-to-left embeddingQUnicodeControlCharacterMenuFRLM @87=0: =0?8A0=8O A?@020 =0;52>RLM Right-to-left markQUnicodeControlCharacterMenuRRLO 0G0;> 70<5=K =0?8A0=8O A?@020 =0;52>#RLO Start of right-to-left overrideQUnicodeControlCharacterMenuLZWJ 1J548=ONI89 A8<2>; =C;52>9 H8@8=KZWJ Zero width joinerQUnicodeControlCharacterMenuRZWNJ 5>1J548=ONI89 A8<2>; =C;52>9 H8@8=KZWNJ Zero width non-joinerQUnicodeControlCharacterMenu4ZWSP @>15; =C;52>9 H8@8=KZWSP Zero width spaceQUnicodeControlCharacterMenu252>7<>6=> >B>1@078BL URLCannot show URL QWebFrame<52>7<>6=> >B>1@078BL B8? MIMECannot show mimetype QWebFrame$$09; =5 ACI5AB2C5BFile does not exist QWebFrameX03@C7:0 D@59<0 ?@5@20=0 87<5=5=85< ?>;8B8:8'Frame load interrupted by policy change QWebFrameX03@C7:0 2K?>;=O5BAO <C;LB8<5480-?>4A8AB5<>9&Loading is handled by the media engine QWebFrame"0?@>A 1;>:8@>20=Request blocked QWebFrame0?@>A >B<5=Q=Request canceled QWebFrame0?@>A >B<5=Q=Request cancelled QWebFrame%1 (%2x%3 px)%1 (%2x%3 pixels)QWebPageF%1 4=59 %2 G0A>2 %3 <8=CB %4 A5:C=4&%1 days %2 hours %3 minutes %4 secondsQWebPage6%1 G0A>2 %2 <8=CB %3 A5:C=4%1 hours %2 minutes %3 secondsQWebPage$%1 <8=CB %2 A5:C=4%1 minutes %2 secondsQWebPage%1 A5:C=4 %1 secondsQWebPage%n D09;(0)%n D09;0%n D09;>2 %n file(s)QWebPage$>1028BL 2 A;>20@LAdd To DictionaryQWebPage> ;52><C :@0N Align LeftQWebPage> ?@02><C :@0N Align RightQWebPageC48>-M;5<5=B Audio ElementQWebPage-;5<5=BK C?@02;5=8O 2>A?@>872545=85< 72C:0 8 >B>1@065=85< A>AB>O=8O2Audio element playback controls and status displayQWebPage,0G0BL 2>A?@>872545=85Begin playbackQWebPage 8@=K9BoldQWebPage=87BottomQWebPage> F5=B@CCenterQWebPageD@>25@OBL 3@0<<0B8:C A >@D>3@0D859Check Grammar With SpellingQWebPage&@>25@:0 >@D>3@0D88Check SpellingQWebPageL@>25@OBL >@D>3@0D8N ?@8 =01>@5 B5:AB0Check Spelling While TypingQWebPageK1@0BL D09; Choose FileQWebPage.G8AB8BL 8AB>@8N ?>8A:0Clear recent searchesQWebPage>?8@>20BLCopyQWebPage"!:>?8@>20BL 0C48> Copy AudioQWebPage,>?8@>20BL 87>1@065=85 Copy ImageQWebPage:!:>?8@>20BL 04@5A 87>1@065=8OCopy Image AddressQWebPage.>?8@>20BL 04@5A AAK;:8 Copy LinkQWebPage"!:>?8@>20BL 2845> Copy VideoQWebPage0"5:CI55 A>AB>O=85 D8;L<0Current movie statusQWebPage("5:CI55 2@5<O D8;L<0Current movie timeQWebPageK@570BLCutQWebPage> C<>;G0=8NDefaultQWebPage,#40;8BL 4> :>=F0 A;>20Delete to the end of the wordQWebPage.#40;8BL 4> =0G0;0 A;>20Delete to the start of the wordQWebPage>4@>1=>AB8DetailsQWebPage$0?@02;5=85 ?8AL<0 DirectionQWebPage@>H;> 2@5<5=8 Elapsed TimeQWebPage&>;=>M:@0==K9 @568<Enter FullscreenQWebPage (@8DBKFontsQWebPage,=>?:0 0 25AL M:@0=Fullscreen ButtonQWebPage 0704Go BackQWebPage ?5@Q4 Go ForwardQWebPageF!:@KBL ?0=5;L ?@>25@:8 ?@02>?8A0=8OHide Spelling and GrammarQWebPage@>?CAB8BLIgnoreQWebPage@>?CAB8BL Ignore Grammar context menu itemIgnoreQWebPage&@5<O =5 >?@545;5=>Indefinite timeQWebPage #25;8G8BL >BABC?IndentQWebPage:AB028BL <0@:8@>20==K9 A?8A>:Insert Bulleted ListQWebPage8AB028BL =C<5@>20==K9 A?8A>:Insert Numbered ListQWebPage*AB028BL =>2CN AB@>:CInsert a new lineQWebPage.AB028BL =>2K9 ?0@03@0DInsert a new paragraphQWebPage@>25@8BLInspectQWebPage C@A82ItalicQWebPage>JavaScript: @54C?@5645=85 - %1JavaScript Alert - %1QWebPage<JavaScript: >4B25@645=85 - %1JavaScript Confirm - %1QWebPage2JavaScript: @>1;5<0 - %1JavaScript Problem - %1QWebPage.JavaScript: 0?@>A - %1JavaScript Prompt - %1QWebPage> H8@8=5JustifyQWebPage ;52>9 3@0=8F5 Left edgeQWebPage!;520 =0?@02> Left to RightQWebPage">B>:>2>5 25I0=85Live BroadcastQWebPage03@C7:0... Loading...QWebPage A:0BL 2 A;>20@5Look Up In DictionaryQWebPage$>4C;L >BACBAB2C5BMissing Plug-inQWebPageF5@5<5AB8BL C:070B5;L 2 :>=5F 1;>:0'Move the cursor to the end of the blockQWebPageN5@5<5AB8BL C:070B5;L 2 :>=5F 4>:C<5=B0*Move the cursor to the end of the documentQWebPageH5@5<5AB8BL C:070B5;L 2 :>=5F AB@>:8&Move the cursor to the end of the lineQWebPageT5@5<5AB8BL C:070B5;L : A;54CNI5<C A8<2>;C%Move the cursor to the next characterQWebPageR5@5<5AB8BL C:070B5;L =0 A;54CNICN AB@>:C Move the cursor to the next lineQWebPageP5@5<5AB8BL C:070B5;L : A;54CNI5<C A;>2C Move the cursor to the next wordQWebPageV5@5<5AB8BL C:070B5;L : ?@54K4CI5<C A8<2>;C)Move the cursor to the previous characterQWebPageT5@5<5AB8BL C:070B5;L =0 ?@54K4CICN AB@>:C$Move the cursor to the previous lineQWebPageR5@5<5AB8BL C:070B5;L : ?@54K4CI5<C A;>2C$Move the cursor to the previous wordQWebPageH5@5<5AB8BL C:070B5;L 2 =0G0;> 1;>:0)Move the cursor to the start of the blockQWebPageP5@5<5AB8BL C:070B5;L 2 =0G0;> 4>:C<5=B0,Move the cursor to the start of the documentQWebPageJ5@5<5AB8BL C:070B5;L 2 =0G0;> AB@>:8(Move the cursor to the start of the lineQWebPage5@5<>B:0Movie time scrubberQWebPage">78F8O ?5@5<>B:8Movie time scrubber thumbQWebPage@83;CH8BLMuteQWebPage.=>?:0 B:;NG8BL 72C: Mute ButtonQWebPage4B:;NG8BL 72C:>2K5 4>@>6:8Mute audio tracksQWebPage*!>2?045=89 =5 =0945=>No Guesses FoundQWebPage$09; =5 C:070=No file selectedQWebPage(AB>@8O ?>8A:0 ?CAB0No recent searchesQWebPageB:@KBL 0C48> Open AudioQWebPageB:@KBL D@59< Open FrameQWebPage&B:@KBL 87>1@065=85 Open ImageQWebPageB:@KBL AAK;:C Open LinkQWebPageB:@KBL 2845> Open VideoQWebPage(B:@KBL 2 =>2>< >:=5Open in New WindowQWebPage #<5=LH8BL >BABC?OutdentQWebPage5@5GQ@:=CBK9OutlineQWebPage 0 AB@0=8FC 2=87 Page downQWebPage"0 AB@0=8FC 2;52> Page leftQWebPage$0 AB@0=8FC 2?@02> Page rightQWebPage"0 AB@0=8FC 225@EPage upQWebPageAB028BLPasteQWebPage0AB028BL, A>E@0=82 AB8;LPaste and Match StyleQWebPage@8>AB0=>28BLPauseQWebPage=>?:0 0C70 Pause ButtonQWebPage:@8>AB0=>28BL 2>A?@>872545=85Pause playbackQWebPage>A?@>8725AB8PlayQWebPage0=>?:0 >A?@>872545=85 Play ButtonQWebPaged>A?@>872545=85 2 @568<5 >B>1@065=8O =0 25AL M:@0=Play movie in full-screen modeQWebPageAB>@8O ?>8A:0Recent searchesQWebPage<>AB83=CB ?@545; ?5@504@5A0F88Redirection limit reachedQWebPage1=>28BLReloadQWebPage AB0;>AL 2@5<5=8Remaining TimeQWebPage.AB02H55AO 2@5<O D8;L<0Remaining movie timeQWebPage,#40;8BL D>@<0B8@>20=85Remove formattingQWebPage!1@>A8BLResetQWebPage~>72@0I05B ?>B>:>2>5 2845> : 2>A?@>872545=8N 2 @50;L=>< 2@5<5=8#Return streaming movie to real-timeQWebPageB=>?:0 5@=CBL 2 @50;L=>5 2@5<OReturn to Real-time ButtonQWebPage0=>?:0 5@5<>B:0 =0704 Rewind ButtonQWebPage$5@5<>B:0 2 =0G0;> Rewind movieQWebPage  ?@02>9 3@0=8F5 Right edgeQWebPage!?@020 =0;52> Right to LeftQWebPage*!>E@0=8BL 87>1@065=85 Save ImageQWebPage4!>E@0=8BL ?> AAK;:5 :0:... Save Link...QWebPage@>:@CB8BL 2=87 Scroll downQWebPage@>:@CB8BL AN40 Scroll hereQWebPage @>:@CB8BL 2;52> Scroll leftQWebPage"@>:@CB8BL 2?@02> Scroll rightQWebPage @>:@CB8BL 225@E Scroll upQWebPage"A:0BL 2 =B5@=5BSearch The WebQWebPage0=>?:0 5@5<>B:0 =0704Seek Back ButtonQWebPage2=>?:0 5@5<>B:0 2?5@Q4Seek Forward ButtonQWebPage.KAB@0O ?5@5<>B:0 =0704Seek quickly backQWebPage0KAB@0O ?5@5<>B:0 2?5@Q4Seek quickly forwardQWebPageK45;8BL 2AQ Select AllQWebPage.K45;8BL 4> :>=F0 1;>:0Select to the end of the blockQWebPage6K45;8BL 4> :>=F0 4>:C<5=B0!Select to the end of the documentQWebPage0K45;8BL 4> :>=F0 AB@>:8Select to the end of the lineQWebPage<K45;8BL 4> A;54CNI53> A8<2>;0Select to the next characterQWebPage8K45;8BL 4> A;54CNI59 AB@>:8Select to the next lineQWebPage8K45;8BL 4> A;54CNI53> A;>20Select to the next wordQWebPage>K45;8BL 4> ?@54K4CI53> A8<2>;0 Select to the previous characterQWebPage:K45;8BL 4> ?@54K4CI59 AB@>:8Select to the previous lineQWebPage:K45;8BL 4> ?@54K4CI53> A;>20Select to the previous wordQWebPage0K45;8BL 4> =0G0;0 1;>:0 Select to the start of the blockQWebPage8K45;8BL 4> =0G0;0 4>:C<5=B0#Select to the start of the documentQWebPage2K45;8BL 4> =0G0;0 AB@>:8Select to the start of the lineQWebPageJ>:070BL ?0=5;L ?@>25@:8 ?@02>?8A0=8OShow Spelling and GrammarQWebPage 53C;OB>@SliderQWebPage(#:070B5;L @53C;OB>@0 Slider ThumbQWebPage@D>3@0D8OSpellingQWebPage*B>1@065=85 A>AB>O=8OStatus DisplayQWebPageAB0=>28BLStopQWebPage0GQ@:=CBK9 StrikethroughQWebPageB?@028BLSubmitQWebPageB?@028BLQSubmit (input element) alt text for elements with no alt, title, or valueSubmitQWebPage>4AB@>G=K9 SubscriptQWebPage04AB@>G=K9 SuperscriptQWebPage$0?@02;5=85 B5:AB0Text DirectionQWebPage!1>9 2K?>;=5=8O AF5=0@8O =0 40==>9 AB@0=8F5. 5;05B5 >AB0=>28BL 2K?>;5=85 AF5=0@8O?RThe script on this page appears to have a problem. Do you want to stop the script?QWebPaged=45:A ?>8A:0. 2548B5 :;NG52K5 A;>20 4;O ?>8A:0: 3This is a searchable index. Enter search keywords: QWebPage&:;/2K:; C?@02;5=85Toggle ControlsQWebPage,:;/2K:; 70F8:;5==>ABL Toggle LoopQWebPage 25@ETopQWebPage>4GQ@:=CBK9 UnderlineQWebPage58725AB=>UnknownQWebPage,=>?:0 :;NG8BL 72C: Unmute ButtonQWebPage2:;NG8BL 72C:>2K5 4>@>6:8Unmute audio tracksQWebPage845>-M;5<5=B Video ElementQWebPage-;5<5=BK C?@02;5=8O 2>A?@>872545=85< 2845> 8 >B>1@065=85< A>AB>O=8O2Video element playback controls and status displayQWebPage&Web-8=A?5:B>@ - %2Web Inspector - %2QWebPage'B> MB>? What's This?QWhatsThisAction**QWidget&025@H8BL&FinishQWizard&!?@02:0&HelpQWizard &0;55&NextQWizard&0;55 >&Next >QWizard< &0704< &BackQWizard B<5=0CancelQWizard>4B25@48BLCommitQWizard@>4>;68BLContinueQWizard >B>2>DoneQWizard 0704Go BackQWizard!?@02:0HelpQWizard%1 - [%2] %1 - [%2] QWorkspace&0:@KBL&Close QWorkspace&5@5<5AB8BL&Move QWorkspace&>AAB0=>28BL&Restore QWorkspace& 07<5@&Size QWorkspace4&>AAB0=>28BL 87 703>;>2:0&Unshade QWorkspace0:@KBLClose QWorkspace &0A?0E=CBL Ma&ximize QWorkspace&!25@=CBL Mi&nimize QWorkspace!25@=CBLMinimize QWorkspace>AAB0=>28BL Restore Down QWorkspace*!2&5@=CBL 2 703>;>2>:Sh&ade QWorkspace$AB020BLAO &A25@EC Stay on &Top QWorkspacex2 >1JO2;5=88 XML >6840NBAO ?0@0<5B@K encoding 8;8 standaloneYencoding declaration or standalone declaration expected while reading the XML declarationQXmlH>H81:0 2 >1JO2;5=88 2=5H=53> >1J5:B03error in the text declaration of an external entityQXml4>H81:0 @071>@0 :><<5=B0@8O$error occurred while parsing commentQXml0>H81:0 @071>@0 4>:C<5=B0$error occurred while parsing contentQXmlP>H81:0 @071>@0 >1JO2;5=8O B8?0 4>:C<5=B05error occurred while parsing document type definitionQXml.>H81:0 @071>@0 M;5<5=B0$error occurred while parsing elementQXml*>H81:0 @071>@0 AAK;:8&error occurred while parsing referenceQXml8>H81:0 2K720=0 ?>;L7>20B5;5<error triggered by consumerQXml`2=5H=OO AAK;:0 =0 >1I89 >1J5:B =54>?CAB8<0 2 DTD;external parsed general entity reference not allowed in DTDQXml|2=5H=OO AAK;:0 =0 >1I89 >1J5:B =54>?CAB8<0 2 7=0G5=88 0B@81CB0Gexternal parsed general entity reference not allowed in attribute valueQXmlf2=CB@5==OO AAK;:0 =0 >1I89 >1J5:B =54>?CAB8<0 2 DTD4internal general entity reference not allowed in DTDQXmlD=5:>@@5:B=>5 8<O 48@5:B82K @071>@0'invalid name for processing instructionQXml>6840;0AL 1C:20letter is expectedQXmlFC:070=> 1>;55 >4=>3> B8?0 4>:C<5=B0&more than one document type definitionQXml$>H81:8 >BACBAB2CNBno error occurredQXml&@5:C@A82=K5 >1J5:BKrecursive entitiesQXml\2 >1JO2;5=88 XML >68405BAO ?0@0<5B@ standaloneAstandalone declaration expected while reading the XML declarationQXml BM3 =5 A>2?0405B tag mismatchQXml$=5>6840==K9 A8<2>;unexpected characterQXml.=5>6840==K9 :>=5F D09;0unexpected end of fileQXmln=5@07>1@0==0O AAK;:0 =0 >1J5:B 2 =5?@028;L=>< :>=B5:AB5*unparsed entity reference in wrong contextQXmlV2 >1JO2;5=88 XML >68405BAO ?0@0<5B@ version2version expected while reading the XML declarationQXmlT=5:>@@5:B=>5 7=0G5=85 ?0@0<5B@0 standalone&wrong value for standalone declarationQXmlVH81:0 %1 2 %2, 2 AB@>:5 %3, AB>;1F5 %4: %5)Error %1 in %2, at line %3, column %4: %5QXmlPatternistCLI$H81:0 %1 2 %2: %3Error %1 in %2: %3QXmlPatternistCLI058725AB=>5 @0A?>;>65=85Unknown locationQXmlPatternistCLI`@54C?@5645=85 2 %1, 2 AB@>:5 %2, AB>;1F5 %3: %4(Warning in %1, at line %2, column %3: %4QXmlPatternistCLI.@54C?@5645=85 2 %1: %2Warning in %1: %2QXmlPatternistCLIN%1 - =5:>@@5:B=K9 845=B8D8:0B>@ PUBLIC.#%1 is an invalid PUBLIC identifier. QXmlStream`%1 - =5 O2;O5BAO :>@@5:B=K< =0720=85< :>48@>2:8.%1 is an invalid encoding name. QXmlStream|%1 =5 O2;O5BAO :>@@5:B=K< =0720=85< >1@010BK205<>9 8=AB@C:F88.-%1 is an invalid processing instruction name. QXmlStream, ?>;CG8;8 ' , but got ' QXmlStream,B@81CB ?5@5>?@545;Q=.Attribute redefined. QXmlStream<>48@>2:0 %1 =5 ?>445@68205BAOEncoding %1 is unsupported QXmlStreamb1=0@C65=> =5:>@@5:B=> 70:>48@>20==>5 A>45@68<>5.(Encountered incorrectly encoded content. QXmlStream01J5:B %1 =5 >1JO2;5=.Entity '%1' not declared. QXmlStream6840;>AL  Expected  QXmlStream86840NBAO A8<2>;L=K5 40==K5.Expected character data. QXmlStream@8H=85 40==K5 2 :>=F5 4>:C<5=B0.!Extra content at end of document. QXmlStreamT5:>@@5:B=>5 >1JO2;5=85 ?@>AB@0=AB20 8<Q=.Illegal namespace declaration. QXmlStream05:>@@5:B=K9 A8<2>; XML.Invalid XML character. QXmlStream*5:>@@5:B=>5 8<O XML.Invalid XML name. QXmlStream>5:>@@5:B=0O AB@>:0 25@A88 XML.Invalid XML version string. QXmlStreamL5:>@@5:B=K9 0B@81CB 2 >1JO2;5=88 XML.%Invalid attribute in XML declaration. QXmlStream>5:>@@5:B=0O A8<2>;L=0O AAK;:0.Invalid character reference. QXmlStream,5:>@@5:B=K9 4>:C<5=B.Invalid document. QXmlStream<5:>@@5:B=>5 7=0G5=85 >1J5:B0.Invalid entity value. QXmlStream`5:>@@5:B=>5 =0720=85 >1@010BK205<>9 8=AB@C:F88.$Invalid processing instruction name. QXmlStream:NDATA 2 >1JO2;5=88 ?0@0<5B@0.&NDATA in parameter entity declaration. QXmlStreamT@5D8:A ?@>AB@0=AB20 8<Q= %1 =5 >1JO2;5="Namespace prefix '%1' not declared QXmlStreamVB:@K20NI89 BM3 =5 A>2?0405B A 70:@K20NI8<. Opening and ending tag mismatch. QXmlStream85>6840==K9 :>=5F 4>:C<5=B0.Premature end of document. QXmlStream:1=0@C65= @5:C@A82=K9 >1J5:B.Recursive entity detected. QXmlStreamd!AK;:0 =0 2=5H=89 >1J5:B %1 2 7=0G5=88 0B@81CB0.5Reference to external entity '%1' in attribute value. QXmlStreamJ!AK;:0 =0 =5>1@01>B0==K9 >1J5:B %1."Reference to unparsed entity '%1'. QXmlStreamd>A;54>20B5;L=>ABL ]]> =54>?CAB8<0 2 A>45@68<><.&Sequence ']]>' not allowed in content. QXmlStreamA524>0B@81CB standalone <>65B ?@8=8<0BL B>;L:> 7=0G5=8O yes 8;8 no."Standalone accepts only yes or no. QXmlStream468405BAO >B:@K20NI89 BM3.Start tag expected. QXmlStreamA524>0B@81CB standalone 4>;65= =0E>48BLAO ?>A;5 C:070=8O :>48@>2:8.?The standalone pseudo attribute must appear after the encoding. QXmlStream5>6840==>5 ' Unexpected ' QXmlStreamx5>6840==K9 A8<2>; %1 2 ;8B5@0;5 >B:@KB>3> 845=B8D8:0B>@0./Unexpected character '%1' in public id literal. QXmlStream85?>445@68205<0O 25@A8O XML.Unsupported XML version. QXmlStream^1JO2;5=85 XML =0E>48BAO =5 2 =0G0;5 4>:C<5=B0.)XML declaration not at start of document. QXmlStream-;5<5=BKItems QmlJSDebugger::LiveSelectionTool0.125xQmlJSDebugger::QmlToolBar0.1xQmlJSDebugger::QmlToolBar0.25xQmlJSDebugger::QmlToolBar0.5xQmlJSDebugger::QmlToolBar1xQmlJSDebugger::QmlToolBar>@8<5=8BL 87<5=5=8O : 4>:C<5=BCApply Changes to DocumentQmlJSDebugger::QmlToolBarRA?>;L7>20BL 87<5=5=8O 2 ?@>A<>B@I8:5 QMLApply Changes to QML ViewerQmlJSDebugger::QmlToolBar8?5B:0 Color PickerQmlJSDebugger::QmlToolBar* 568< 8=A?5:B8@>20=8OInspector ModeQmlJSDebugger::QmlToolBar@0?CAB8BL/?@8>AB0=>28BL 0=8<0F88Play/Pause AnimationsQmlJSDebugger::QmlToolBarK1@0BLSelectQmlJSDebugger::QmlToolBar K1@0BL (0@:5B)Select (Marquee)QmlJSDebugger::QmlToolBar=AB@C<5=BKToolsQmlJSDebugger::QmlToolBar0AHB01ZoomQmlJSDebugger::QmlToolBar !:>?8@>20BL F25B Copy ColorQmlJSDebugger::ToolBarColorBox#25;8G8BLZoom InQmlJSDebugger::ZoomTool#<5=LH8BLZoom OutQmlJSDebugger::ZoomTool0AHB01 &100% Zoom to &100%QmlJSDebugger::ZoomToolX%1 8 %2 A>>B25BAB2CNB =0G0;C 8 :>=FC AB@>:8.,%1 and %2 match the start and end of a line. QtXmlPatterns:%1 =5 <>65B 1KBL 2>AAB0=>2;5=%1 cannot be retrieved QtXmlPatternsZ%1 A>45@68B D0A5B %2 A =525@=K<8 40==K<8: %3.+%1 contains %2 facet with invalid data: %3. QtXmlPatterns@%1 A>45@68B =5:>@@5:B=K5 40==K5.%1 contains invalid data. QtXmlPatterns%1 A>45@68B >:B5BK, :>B>@K5 =54>?CAB8<K 2 B@51C5<>9 :>48@>2:5 %2.E%1 contains octets which are disallowed in the requested encoding %2. QtXmlPatternsT$0A5BK %1 8 %2 =5 <>3CB 1KBL >4=>2@5<5==>.-%1 facet and %2 facet cannot appear together. QtXmlPatterns$0A5B %1 =5 <>65B 1KBL %2, 5A;8 D0A5B %3 107>2>3> B8?0 @025= %4.5%1 facet cannot be %2 if %3 facet of base type is %4. QtXmlPatterns$0A5B %1 =5 <>65B 1KBL %2 8;8 %3, 5A;8 D0A5B %4 107>2>3> B8?0 @025= %5.;%1 facet cannot be %2 or %3 if %4 facet of base type is %5. QtXmlPatterns2$0A5B %1 ?@>B82>@5G8B %2. %1 facet collides with %2 facet. QtXmlPatterns^$0A5B %1 A>45@68B =525@=>5 @53C;O@=>5 2K@065=85,%1 facet contains invalid regular expression QtXmlPatternsV$0A5B %1 A>45@68B =525@=>5 7=0G5=85 %2: %3.'%1 facet contains invalid value %2: %3. QtXmlPatternsl$0A5B %1 4>;65= 1KBL =5 <5=55 D0A5B0 %2 107>2>3> B8?0.=%1 facet must be equal or greater than %2 facet of base type. QtXmlPatternsf$0A5B %1 4>;65= 1KBL 1>;55 D0A5B0 %2 107>2>3> B8?0.4%1 facet must be greater than %2 facet of base type. QtXmlPatternsl$0A5B %1 4>;65= 1KBL =5 <5=55 D0A5B0 %2 107>2>3> B8?0.@%1 facet must be greater than or equal to %2 facet of base type. QtXmlPatternsf$0A5B %1 4>;65= 1KBL <5=55 D0A5B0 %2 107>2>3> B8?0.1%1 facet must be less than %2 facet of base type. QtXmlPatternsJ$0A5B %1 4>;65= 1KBL <5=55 D0A5B0 %2.$%1 facet must be less than %2 facet. QtXmlPatternsl$0A5B %1 4>;65= 1KBL =5 1>;55 D0A5B0 %2 107>2>3> B8?0.=%1 facet must be less than or equal to %2 facet of base type. QtXmlPatternsP$0A5B %1 4>;65= 1KBL =5 1>;55 D0A5B0 %2.0%1 facet must be less than or equal to %2 facet. QtXmlPatterns$0A5B %1 4>;65= 8<5BL B0:>5 65 7=0G5=85, :0: 8 D0A5B %2 107>2>3> B8?0.;%1 facet must have the same value as %2 facet of base type. QtXmlPatternsd# %1 70F8:;5=> =0A;54>20=85 2 53> 107>2>< B8?5 %2.,%1 has inheritance loop in its base type %2. QtXmlPatterns%1 - A;>6=K9 B8?. @5>1@07>20=85 : A;>6=K< B8?0< =52>7<>6=>. 4=0:>, ?@5>1@07>20=85 : 0B><0@=K< B8?0< :0: %2 @01>B05B.s%1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works. QtXmlPatterns(%1 =5:>@@5:=> 4;O %2%1 is an invalid %2 QtXmlPatterns~%1 - =5:>@@5:B=K9 D;03 @53C;O@=>3> 2K@065=8O. >?CAB8<K5 D;038:?%1 is an invalid flag for regular expressions. Valid flags are: QtXmlPatternsP%1 - =5:>@@5:B=K9 URI ?@>AB@0=AB20 8<Q=.%1 is an invalid namespace URI. QtXmlPatternsd%1 - =5:>@@5:B=K9 H01;>= @53C;O@=>3> 2K@065=8O: %2/%1 is an invalid regular expression pattern: %2 QtXmlPatterns`%1 =5 O2;O5BAO :>@@5:B=K< H01;>=>< 8<5=8 @568<0.$%1 is an invalid template mode name. QtXmlPatternsJ%1 O2;O5BAO AE5<>9 =58725AB=>3> B8?0.%1 is an unknown schema type. QtXmlPatterns>>48@>2:0 %1 =5 ?>445@68205BAO.%1 is an unsupported encoding. QtXmlPatternsB!8<2>; %1 =54>?CAB8< 4;O XML 1.0.$%1 is not a valid XML 1.0 character. QtXmlPatternsr%1 =5 O2;O5BAO :>@@5:B=K< =0720=85< 8=AB@C:F88 >1@01>B:8.4%1 is not a valid name for a processing-instruction. QtXmlPatternsZ%1 =5 O2;O5BAO :>@@5:B=K< G8A;>2K< ;8B5@0;><."%1 is not a valid numeric literal. QtXmlPatterns%1 =5:>@@5:B=>5 F5;52>5 8<O 2 >1@010BK205<>9 8=AB@C:F88. <O 4>;6=> 1KBL 7=0G5=85< B8?0 %2, =0?@8<5@: %3.Z%1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3. QtXmlPatternsX%1 =5 O2;O5BAO ?@028;L=K< 7=0G5=85< B8?0 %2.#%1 is not a valid value of type %2. QtXmlPatternsP%1 =5 O2;O5BAO ?>;=K< :>;8G5AB2>< <8=CB.$%1 is not a whole number of minutes. QtXmlPatterns%1 =5 <>65B =0A;54>20BL %2 G5@57 @0AH8@5=85, B0: :0: @0=55 >?@545;5=>, GB> >= :>=5G=K9.S%1 is not allowed to derive from %2 by extension as the latter defines it as final. QtXmlPatterns%1 =5 <>65B =0A;54>20BL %2 G5@57 A?8A>:, B0: :0: @0=55 >?@545;5=>, GB> >= :>=5G=K9.N%1 is not allowed to derive from %2 by list as the latter defines it as final. QtXmlPatterns%1 =5 <>65B =0A;54>20BL %2 G5@57 >3@0=8G5=85, B0: :0: @0=55 >?@545;5=>, GB> >= :>=5G=K9.U%1 is not allowed to derive from %2 by restriction as the latter defines it as final. QtXmlPatterns%1 =5 <>65B =0A;54>20BL %2 G5@57 >1J548=5=85, B0: :0: @0=55 >?@545;5=>, GB> >= :>=5G=K9.O%1 is not allowed to derive from %2 by union as the latter defines it as final. QtXmlPatterns5 4>?CAB8<>, GB>1K %1 >?@545;O; 2=CB@5==89 B8? A B0:8< 65 8<5=5<.E%1 is not allowed to have a member type with the same name as itself. QtXmlPatternsB%1 =5 <>65B 8<5B =8:0:8E D0A5B>2.%%1 is not allowed to have any facets. QtXmlPatterns%1 - =5 0B><0@=K9 B8?. @5>1@07>20=85 2>7<>6=> B>;L:> : 0B><0@=K< B8?0<.C%1 is not an atomic type. Casting is only possible to atomic types. QtXmlPatterns%1 O2;O5BAO >1JO2;5=85< 0B@81CB0 2=5 >1;0AB8 >1JO2;5=89. <59B5 2 284C, 2>7<>6=>ABL 8<?>@B0 AE5< =5 ?>445@68205BAO.g%1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported. QtXmlPatternsF%1 =5:>@@5:B=> 2 A>>B25BAB288 A %2. %1 is not valid according to %2. QtXmlPatternsH=0G5=85 %1 =5:>@@5:B=> 4;O B8?0 %2.&%1 is not valid as a value of type %2. QtXmlPatternsL%1 A>>B25BAB2C5B A8<2>;0< :>=F0 AB@>:8%1 matches newline characters QtXmlPatterns%1 4>;6=> A>?@>2>640BLAO %2 8;8 %3, => =5 2 :>=F5 70<5I05<>9 AB@>:8.J%1 must be followed by %2 or %3, not at the end of the replacement string. QtXmlPatterns%1 ?@8=8<05B =5 <5=55 %n 0@3C<5=B0. !;54>20B5;L=>, %2 =5:>@@5:B=>.%1 ?@8=8<05B =5 <5=55 %n 0@3C<5=B>2. !;54>20B5;L=>, %2 =5:>@@5:B=>.%1 ?@8=8<05B =5 <5=55 %n 0@3C<5=B>2. !;54>20B5;L=>, %2 =5:>@@5:B=>.=%1 requires at least %n argument(s). %2 is therefore invalid. QtXmlPatterns%1 ?@8=8<05B =5 1>;55 %n 0@3C<5=B0. !;54>20B5;L=>, %2 =5:>@@5:B=>.%1 ?@8=8<05B =5 1>;55 %n 0@3C<5=B>2. !;54>20B5;L=>, %2 =5:>@@5:B=>.%1 ?@8=8<05B =5 1>;55 %n 0@3C<5=B>2. !;54>20B5;L=>, %2 =5:>@@5:B=>.9%1 takes at most %n argument(s). %2 is therefore invalid. QtXmlPatterns %1 1K;> 2K720=>.%1 was called. QtXmlPatterns54>?CAB8<K D0A5BK %1, %2, %3, %4, %5 8 %6 ?@8 =0A;54>20=88 A?8A:><.F%1, %2, %3, %4, %5 and %6 facets are not allowed when derived by list. QtXmlPatternsjB@81CB %1 8<55B =5:>@@5:B=>5 A>45@68<>5 QName: %2.2'%1' attribute contains invalid QName content: %2. QtXmlPatternsB><<5=B0@89 =5 <>65B A>45@60BL %1A comment cannot contain %1 QtXmlPatternsP><<5=B0@89 =5 <>65B >:0=G820BLAO =0 %1.A comment cannot end with a %1. QtXmlPatternsvAB@5G5=0 :>=AB@C:F8O, 70?@5IQ==0O 4;O B5:CI53> O7K:0 (%1).LA construct was encountered which is disallowed in the current language(%1). QtXmlPatterns1JO2;5=85 ?@>AB@0=AB2> 8<Q= ?> C<>;G0=8N 4>;6=> 1KBL 4> >1JO2;5=8O DC=:F89, ?5@5<5==KE 8 >?F89.^A default namespace declaration must occur before function, variable, and option declarations. QtXmlPatterns@O<>9 :>=AB@C:B>@ M;5<5=B0 A>AB02;5= =5:>@@5:B=>. %1 70:0=G8205BAO =0 %2.EA direct element constructor is not well-formed. %1 is ended with %2. QtXmlPatternsN$C=:F8O A A83=0BC@>9 %1 C65 ACI5AB2C5B.0A function already exists with the signature %1. QtXmlPatterns>4C;L 181;8>B5:8 =5 <>65B 8A?>;L7>20BLAO =0?@O<CN. = 4>;65= 1KBL 8<?>@B8@>20= 87 >A=>2=>3> <>4C;O.VA library module cannot be evaluated directly. It must be imported from a main module. QtXmlPatternsb0@0<5B@ DC=:F88 =5 <>65B 1KBL >1JO2;5= BC==5;5<.78F8>==K9 ?@548:0B 4>;65= 2KG8A;OBLAO :0: G8A;>2>5 2K@065=85.?A positional predicate must evaluate to a single numeric value. QtXmlPatternsX$C=:F8O AB8;59 4>;6=0 8<5BL 8<O A ?@5D8:A><.0A stylesheet function must have a prefixed name. QtXmlPatternsH(01;>= A 8<5=5< %1 C65 1K; >1JO2;5=.2A template with name %1 has already been declared. QtXmlPatterns=0G5=85 B8?0 %1 =5 <>65B 1KBL CA;>285<. #A;>285< <>3CB O2;OBLAO G8A;>2>9 8 1C;52K9 B8?K.yA value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type. QtXmlPatternsb=0G5=85 B8?0 %1 =5 <>65B 1KBL 1C;52K< 7=0G5=85<.:A value of type %1 cannot have an Effective Boolean Value. QtXmlPatterns=0G5=85 B8?0 %1 4>;6=> A>45@60BL G5B=>5 :>;8G5AB2> F8D@. =0G5=85 %2 MB><C B@51>20=8N =5 C4>2;5B2>@O5B.PA value of type %1 must contain an even number of digits. The value %2 does not. QtXmlPatternsJ5@5<5==0O A 8<5=5< %1 C65 >1JO2;5=0.2A variable with name %1 has already been declared. QtXmlPatterns 538>=0;L=>5 A<5I5=85 4>;6=> 1KBL 2 ?5@545;0E >B %1 4> %2 2:;NG8B5;L=>. %3 2KE>48B 70 4>?CAB8<K5 ?@545;K.HA zone offset must be in the range %1..%2 inclusive. %3 is out of range. QtXmlPatternsF5>4=>7=0G=>5 A>>B25BAB285 ?@028;C.Ambiguous rule match. QtXmlPatterns@3C<5=B A 8<5=5< %1 C65 >1JO2;5=. <O :064>3> 0@3C<5=B0 4>;6=> 1KBL C=8:0;L=K<.WAn argument with name %1 has already been declared. Every argument name must be unique. QtXmlPatternsFB@81CB A 8<5=5< %1 C65 ACI5AB2C5B.1An attribute by name %1 has already been created. QtXmlPatterns#75;-0B@81CB =5 <>65B 1KBL ?>B><:>< C7;0-4>:C<5=B0. B@81CB %1 =5C<5AB5=.dAn attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place. QtXmlPatternspB@81CB A 8<5=5< %1 C65 ACI5AB2C5B 4;O 40==>3> M;5<5=B0.?An attribute with name %1 has already appeared on this element. QtXmlPatternsZ0: <8=8<C< >48= M;5<5=B %1 4>;65= 1KBL 2 %2.3At least one %1 element must appear as child of %2. QtXmlPatternsb0: <8=8<C< >48= M;5<5=B %1 4>;65= 1KBL ?5@54 %2.-At least one %1-element must occur before %2. QtXmlPatternsd0: <8=8<C< >48= M;5<5=B %1 4>;65= 1KBL 2=CB@8 %2.-At least one %1-element must occur inside %2. QtXmlPatternsd>;6=0 ?@8ACBAB2>20BL :0: <8=8<C< >4=0 :><?>=5=B0.'At least one component must be present. QtXmlPatterns0: <8=8<C< >48= @568< 4>;65= 1KBL C:070= 2 0B@81CB5 %1 M;5<5=B0 %2.FAt least one mode must be specified in the %1-attribute on element %2. QtXmlPatterns0: <8=8<C< >4=0 :><?>=5=B0 2@5<5=8 4>;6=0 A;54>20BL 70 @0745;8B5;5< %1.?At least one time component must appear after the %1-delimiter. QtXmlPatterns2B@81CB %1 C65 >?@545;Q=.Attribute %1 already defined. QtXmlPatternsFB@81CBK %1 8 %2 2708<>8A:;NG0NI85.+Attribute %1 and %2 are mutually exclusive. QtXmlPatternsB@81CB %1 =5 <>65B 1KBL A5@80;87>20=, B0: :0: ?@8ACBAB2C5B =0 25@E=5< C@>2=5.EAttribute %1 can't be serialized because it appears at the top level. QtXmlPatternsTB@81CB %1 =5 <>65B ?@8=8<0BL 7=0G5=85 %2.&Attribute %1 cannot have the value %2. QtXmlPatternsP-;5<5=B %1 A>45@68B =525@=>5 A>45@68<>5.&Attribute %1 contains invalid content. QtXmlPatternsNB@81CB %1 A>45@68B =525@=K5 40==K5: %2&Attribute %1 contains invalid data: %2 QtXmlPatternsHB@81CB %1 =5 A>>B25BAB2C5B H01;>=C.3Attribute %1 does not match the attribute wildcard. QtXmlPatterns@C??0 0B@81CB>2 %1 A>45@68B 0B@81CB %2, =0 7=0G5=85 :>B>@>3> =0;>65=> >3@0=8G5=85, => B8? =0A;54>20= >B %3.bAttribute group %1 contains attribute %2 that has value constraint but type that inherits from %3. QtXmlPatternsZ@C??0 0B@81CB>2 %1 A>45@68B 420 0B@81CB0 %2./Attribute group %1 contains attribute %2 twice. QtXmlPatterns@C??0 0B@81CB>2 %1 A>45@68B 420 @07=KE 0B@81CB0, ?@>872>4=KE >B %2.ZAttribute group %1 contains two different attributes that both have types derived from %2. QtXmlPatternsB@81CBK A;>6=>3> B8?0 %1 =525@=> 4>?>;=ONB 0B@81CBK 107>2>3> B8?0 %2: %3.^Attributes of complex type %1 are not a valid extension of the attributes of base type %2: %3. QtXmlPatternsB@81CBK A;>6=>3> B8?0 %1 =5 O2;ONBAO 25@=K< >3@0=8G5=85< 0B@81CB>2 107>2>3> B8?0 %2: %3.bAttributes of complex type %1 are not a valid restriction from the attributes of base type %2: %3. QtXmlPatterns07>2K9 B8? %1 ?@>AB>3> B8?0 %2 =5 <>65B 8<5BL >3@0=8G5=85 4;O 0B@81CB0 %3.RBase type %1 of simple type %2 is not allowed to have restriction in %3 attribute. QtXmlPatterns07>2K9 B8? %1 ?@>AB>3> B8?0 %2 4>;65= A>45@60BL :0:>5-B> >1J548=5=85.:Base type %1 of simple type %2 must have variety of union. QtXmlPatternsd07>2K< ?@>AB>3> B8?0 %1 =5 <>65B 1KBL A;>6=K9 %2.6Base type of simple type %1 cannot be complex type %2. QtXmlPatterns07>2K9 B8? ?@>AB>3> B8?0 %1 >?@545;Q= :>=5G=K< 8AE>4O 87 >3@0=8G5=8O.KBase type of simple type %1 has defined derivation by restriction as final. QtXmlPatterns07>2K9 B8? ?@>AB>3> B8?0 %1 4>;65= A>45@60BL :0:>9-=81C4L A?8A>:.;Base type of simple type %1 must have variety of type list. QtXmlPatterns^2>8G=K5 40==K5 =5 A>>B25BAB2CNB D0A5BC length./Binary content does not match the length facet. QtXmlPatternsd2>8G=K5 40==K5 =5 A>>B25BAB2CNB D0A5BC maxLength.2Binary content does not match the maxLength facet. QtXmlPatternsd2>8G=K5 40==K5 =5 A>>B25BAB2CNB D0A5BC minLength.2Binary content does not match the minLength facet. QtXmlPatternsb2>8G=K5 40==K5 >BACBAB2CNB 2 D0A5B5 enumeration.6Binary content is not listed in the enumeration facet. QtXmlPatterns\C;52>5 G8A;> =5 A>>B25BAB2C5B D0A5BC pattern.-Boolean content does not match pattern facet. QtXmlPatternsP&8:;8G=>5 =0A;54>20=85 107>2>3> B8?0 %1.%Circular inheritance of base type %1. QtXmlPatternsL&8:;8G=>5 =0A;54>20=85 >1J548=5=8O %1.!Circular inheritance of union %1. QtXmlPatternsb!;>6=K9 B8? %1 =5 <>65B 1KBL ?@>872>4=K< >B %2%3.6Complex type %1 cannot be derived from base type %2%3. QtXmlPatterns!;>6=K9 B8? %1 A>45@68B 0B@81CB %2, =0 7=0G5=85 :>B>@>3> =0;>65=> >3@0=8G5=85, => B8? =0A;54>20= >B %3._Complex type %1 contains attribute %2 that has value constraint but type that inherits from %3. QtXmlPatternsP!;>6=K9 B8? %1 A>45@68B 420 0B@81CB0 %2.,Complex type %1 contains attribute %2 twice. QtXmlPatterns~!;>6=K9 B8? %1 A>45@68B 420 @07=KE 0B@81CB0, ?@>872>4=KE >B %2.WComplex type %1 contains two different attributes that both have types derived from %2. QtXmlPatterns!;>6=K9 B8? %1 8<55B ?>2B>@ONI89AO M;5<5=B %2 2 A2>59 <>45;8 A>45@68<>3>.?Complex type %1 has duplicated element %2 in its content model. QtXmlPatternsh!;>6=K9 B8? %1 8<55B =545B5@<8=8@>20==>5 A>45@68<>5..Complex type %1 has non-deterministic content. QtXmlPatternsd54>?CAB8<>, GB>1K A;>6=K9 B8? %1 1K; 01AB@0:B=K<..Complex type %1 is not allowed to be abstract. QtXmlPatterns^!;>6=K9 B8? %1 4>;65= 8<5BL ?@>AB>5 A>45@68<>5.)Complex type %1 must have simple content. QtXmlPatterns!;>6=K9 B8? %1 4>;65= A>45@60BL B0:>9 65 ?@>AB>9 B8?, :0: 8 53> 107>2K9 :;0AA %2.DComplex type %1 must have the same simple type as its base class %2. QtXmlPatterns!;>6=K9 B8? %1 A ?@>ABK< A>45@68<K< =5 <>65B 1KBL ?@>872>4=K< >B A;>6=>3> B8?0 %2.PComplex type %1 with simple content cannot be derived from complex base type %2. QtXmlPatterns>45;L A>45@68<>3> A;>6=>3> B8?0 %1 =525@=> 4>?>;=O5B <>45;L A>45@68<>3> %2.QContent model of complex type %1 is not a valid extension of content model of %2. QtXmlPatterns!>45@68<>5 0B@81CB0 %1 =5 A>>B25BAB2C5B >?@545;Q==><C >3@0=8G5=8N 7=0G5=8O.@Content of attribute %1 does not match defined value constraint. QtXmlPatterns!>45@68<>5 0B@81CB0 %1 =5 A>>B25BAB2C5B 53> >?@545;5=8N B8?0: %2.?Content of attribute %1 does not match its type definition: %2. QtXmlPatterns!>45@68<>5 M;5<5=B0 %1 =5 A>>B25BAB2C5B >?@545;Q==><C >3@0=8G5=8N 7=0G5=8O.>Content of element %1 does not match defined value constraint. QtXmlPatterns!>45@68<>5 M;5<5=B0 %1 =5 A>>B25BAB2C5B 53> >?@545;5=8N B8?0: %2.=Content of element %1 does not match its type definition: %2. QtXmlPatternsJ0==K5 B8?0 %1 =5 <>3CB 1KBL ?CABK<8.,Data of type %1 are not allowed to be empty. QtXmlPatternsV0B0-2@5<O =5 A>>B25BAB2C5B D0A5BC pattern./Date time content does not match pattern facet. QtXmlPatterns`0B0-2@5<O =5 A>>B25BAB2C5B D0A5BC maxExclusive.8Date time content does not match the maxExclusive facet. QtXmlPatterns`0B0-2@5<O =5 A>>B25BAB2C5B D0A5BC maxInclusive.8Date time content does not match the maxInclusive facet. QtXmlPatterns`0B0-2@5<O =5 A>>B25BAB2C5B D0A5BC minExclusive.8Date time content does not match the minExclusive facet. QtXmlPatterns`0B0-2@5<O =5 A>>B25BAB2C5B D0A5BC minInclusive.8Date time content does not match the minInclusive facet. QtXmlPatternsX0B0-2@5<O >BACBAB2C5B 2 D0A5B5 enumeration.9Date time content is not listed in the enumeration facet. QtXmlPatterns<5=L %1 =525@5= 4;O <5AOF0 %2.Day %1 is invalid for month %2. QtXmlPatterns:5=L %1 2=5 480?07>=0 %2..%3.#Day %1 is outside the range %2..%3. QtXmlPatternsd5AOB8G=>5 =5 A>>B25BAB2C5B D0A5BC fractionDigits.;Decimal content does not match in the fractionDigits facet. QtXmlPatterns^5AOB8G=>5 =5 A>>B25BAB2C5B D0A5BC totalDigits.8Decimal content does not match in the totalDigits facet. QtXmlPatternsFBACBAB2C5B >1JO2;5=85 0B@81CB0 %1.,Declaration for attribute %1 does not exist. QtXmlPatternsFBACBAB2C5B >1JO2;5=85 M;5<5=B0 %1.*Declaration for element %1 does not exist. QtXmlPatterns5B>4 =0A;54>20=8O %1 4>;65= 1KBL @0AH8@5=85, B0: :0: 107>2K9 B8? %2 O2;O5BAO ?@>ABK<.TDerivation method of %1 must be extension because the base type %2 is a simple type. QtXmlPatterns5;5=85 G8A;0 B8?0 %1 =0 %2 (=5 G8A;>2>5 2K@065=85) =54>?CAB8<>.@Dividing a value of type %1 by %2 (not-a-number) is not allowed. QtXmlPatterns5;5=85 G8A;0 B8?0 %1 =0 %2 8;8 %3 (?;NA 8;8 <8=CA =C;L) =54>?CAB8<>.LDividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed. QtXmlPatternsP5;5=85 (%1) =0 =C;L (%2) =5 >?@545;5=>.(Division (%1) by zero (%2) is undefined. QtXmlPatternsj59AB28B5;L=>5 G8A;> =5 A>>B25BAB2C5B D0A5BC pattern.,Double content does not match pattern facet. QtXmlPatternst59AB28B5;L=>5 G8A;> =5 A>>B25BAB2C5B D0A5BC maxExclusive.5Double content does not match the maxExclusive facet. QtXmlPatternst59AB28B5;L=>5 G8A;> =5 A>>B25BAB2C5B D0A5BC maxInclusive.5Double content does not match the maxInclusive facet. QtXmlPatternst59AB28B5;L=>5 G8A;> =5 A>>B25BAB2C5B D0A5BC minExclusive.5Double content does not match the minExclusive facet. QtXmlPatternst59AB28B5;L=>5 G8A;> =5 A>>B25BAB2C5B D0A5BC minInclusive.5Double content does not match the minInclusive facet. QtXmlPatternsl59AB28B5;L=>5 G8A;> >BACBAB2C5B 2 D0A5B5 enumeration.6Double content is not listed in the enumeration facet. QtXmlPatternsZ;8B5;L=>ABL =5 A>>B25BAB2C5B D0A5BC pattern..Duration content does not match pattern facet. QtXmlPatternsd;8B5;L=>ABL =5 A>>B25BAB2C5B D0A5BC maxExclusive.7Duration content does not match the maxExclusive facet. QtXmlPatternsd;8B5;L=>ABL =5 A>>B25BAB2C5B D0A5BC maxInclusive.7Duration content does not match the maxInclusive facet. QtXmlPatternsd;8B5;L=>ABL =5 A>>B25BAB2C5B D0A5BC minExclusive.7Duration content does not match the minExclusive facet. QtXmlPatternsd;8B5;L=>ABL =5 A>>B25BAB2C5B D0A5BC minInclusive.7Duration content does not match the minInclusive facet. QtXmlPatterns\;8B5;L=>ABL >BACBAB2C5B 2 D0A5B5 enumeration.8Duration content is not listed in the enumeration facet. QtXmlPatterns<O :064>3> ?0@0<5B@0 H01;>=0 4>;6=> 1KBL C=8:0;L=K<, => %1 ?>2B>@O5BAO.CEach name of a template parameter must be unique; %1 is duplicated. QtXmlPatternsC;52> 7=0G5=85 =5 <>65B 1KBL 2KG8A;5=> 4;O ?>A;54>20B5;L=>AB59, :>B>@K5 A>45@60B 420 8 1>;55 0B><0@=KE 7=0G5=8O.aEffective Boolean Value cannot be calculated for a sequence containing two or more atomic values. QtXmlPatterns2-;5<5=B %1 C65 >?@545;Q=.Element %1 already defined. QtXmlPatterns-;5<5=B %1 =5 <>65B 1KBL A5@80;87>20=, B0: :0: @0A?>;>65= 2=5 4>:C<5=B0.OElement %1 can't be serialized because it appears outside the document element. QtXmlPatterns-;5<5=B %1 =5 <>65B A>45@60BL 4@C385 M;5<5=BK, B0: :0: C =53> D8:A8@>20==>5 A>45@68<>5.BElement %1 cannot contain other elements, as it has fixed content. QtXmlPatternsr-;5<5=B %1 =5 <>65B 8<5BL :>=AB@C:B>@ ?>A;54>20B5;L=>AB8..Element %1 cannot have a sequence constructor. QtXmlPatternsF-;5<5=B %1 =5 <>65B 8<5BL ?>B><:>2. Element %1 cannot have children. QtXmlPatternsX M;5<5=B5 %1 =0E>48BAO =525@=>5 A>45@68<>5.$Element %1 contains invalid content. QtXmlPatternsT-;5<5=B %1 A>45@68B =54>?CAB8<K5 0B@81CBK.+Element %1 contains not allowed attributes. QtXmlPatternsj-;5<5=B %1 A>45@68B =54>?CAB8<>5 4>G5@=55 A>45@68<>5..Element %1 contains not allowed child content. QtXmlPatternsd-;5<5=B %1 A>45@68B =54>?CAB8<K9 4>G5@=89 M;5<5=B..Element %1 contains not allowed child element. QtXmlPatternsl-;5<5=B %1 A>45@68B =54>?CAB8<>5 B5:AB>2>5 A>45@68<>5.-Element %1 contains not allowed text content. QtXmlPatternsR-;5<5=B %1 A>45@68B 420 0B@81CB0 B8?0 %2..Element %1 contains two attributes of type %2. QtXmlPatternsV-;5<5=B %1 A>45@68B =58725AB=K9 0B@81CB %2.)Element %1 contains unknown attribute %2. QtXmlPatterns@-;5<5=B %1 >1JO2;5= 01AB@0:B=K<.#Element %1 is declared as abstract. QtXmlPatternsV# M;5<5=B0 %1 >BACBAB2C5B 4>G5@=89 M;5<5=B.$Element %1 is missing child element. QtXmlPatternsb# M;5<5=B0 %1 >BACBAB2C5B =5>1E>48<K9 0B@81CB %2.,Element %1 is missing required attribute %2. QtXmlPatternsF-;5<5=B %1 =54>?CAB8< 2 MB>< <5AB5.+Element %1 is not allowed at this location. QtXmlPatterns-;5<5=BC %1 =54>?CAB8<> 8<5BL >3@0=8G5=85 =0 7=0G5=8O, 5A;8 C 53> 107>2K9 B8? A;>6=K9.QElement %1 is not allowed to have a value constraint if its base type is complex. QtXmlPatterns-;5<5=BC %1 =54>?CAB8<> 8<5BL >3@0=8G5=85 =0 7=0G5=8O, 5A;8 53> B8? ?@>872>4=K9 >B %2.TElement %1 is not allowed to have a value constraint if its type is derived from %2. QtXmlPatternsV-;5<5=B %1 =5 >?@545;Q= 2 40==>< :>=B5:AB5.(Element %1 is not defined in this scope. QtXmlPatterns0-;5<5=B %1 =5>1=C;O5<K9.Element %1 is not nillable. QtXmlPatternsB-;5<5=B %1 4>;65= 84B8 ?>A;54=8<.Element %1 must come last. QtXmlPatterns-;5<5=B %1 4>;65= 8<5BL :0: <8=8<C< >48= 87 0B@81CB>2 %2 8;8 %3.=Element %1 must have at least one of the attributes %2 or %3. QtXmlPatterns-;5<5=B %1 4>;65= 8<5BL 0B@81CB %2 8;8 :>=AB@C:B>@ ?>A;54>20B5;L=>AB8.EElement %1 must have either a %2-attribute or a sequence constructor. QtXmlPatternsX-;5<5=B =5>1=C;O5<K9, B.:. 8<55B A>45@68<>5.1Element contains content although it is nillable. QtXmlPatternsF@C??0 M;5<5=B>2 %1 C65 >?@545;Q=0.!Element group %1 already defined. QtXmlPatterns>>;5 %1 =5 8<55B ?@>AB>3> B8?0.Field %1 has no simple type. QtXmlPatterns;O >1=C;O5<KE M;5<5=B>2 =54>?CAB8<> >3@0=8G5=85 D8:A8@>20==K< 7=0G5=85<.:Fixed value constraint not allowed if element is nillable. QtXmlPatterns<=0G5=85 ID %1 =5 C=8:0;L=>.ID value '%1' is not unique. QtXmlPatternsA;8 >10 7=0G5=8O 8<5NB @538>=0;L=K5 A<5I5=8O, A<5I5=8O 4>;6=K 1KBL >48=0:>2K. %1 8 %2 =5 >48=0:>2K.bIf both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same. QtXmlPatternsA;8 M;5<5=B %1 =5 8<55B 0B@81CB %2, C =53> =5 <>65B 1KBL 0B@81CB>2 %3 8 %4.EIf element %1 has no attribute %2, it cannot have attribute %3 or %4. QtXmlPatterns"@5D8:A =5 4>;65= 1KBL C:070=, 5A;8 ?5@2K9 ?0@0<5B@ - ?CAB0O ?>A;54>20B5;L=>ABL 8;8 ?CAB0O AB@>:0 (2=5 ?@>AB@0=AB20 8<Q=). K; C:070= ?@5D8:A %1.If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified. QtXmlPatterns :>=AB@C:B>@5 ?@>AB@0=AB20 8<Q= 7=0G5=85 ?@>AB@0=AB20 8<Q= =5 <>65B 1KBL ?CAB>9 AB@>:>9.PIn a namespace constructor, the value for a namespace cannot be an empty string. QtXmlPatterns <>4C;5 C?@>IQ==>9 B01;8FK AB8;59 >1O70= ?@8ACBAB2>20BL 0B@81CB %1.@In a simplified stylesheet module, attribute %1 must be present. QtXmlPatterns H01;>=5 XSL-T =5 <>65B 1KBL 8A?>;L7>20=0 >AL %1 - B>;L:> >A8 %2 8;8 %3.DIn an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can. QtXmlPatterns~ H01;>=5 XSL-T C DC=:F88 %1 =5 4>;6=> 1KBL B@5BL53> 0@3C<5=B0.>In an XSL-T pattern, function %1 cannot have a third argument. QtXmlPatterns H01;>=5 XSL-T B>;L:> DC=:F88 %1 8 %2 <>3CB 8A?>;L7>20BLAO 4;O A@02=5=8O, => =5 %3.OIn an XSL-T pattern, only function %1 and %2, not %3, can be used for matching. QtXmlPatterns H01;>=5 XSL-T ?5@2K9 0@3C<5=B DC=:F88 %1 4>;65= 1KBL ;8B5@0;>< 8;8 AAK;:>9 =0 ?5@5<5==CN, 5A;8 DC=:F8O 8A?>;L7C5BAO 4;O A@02=5=8O.yIn an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching. QtXmlPatterns H01;>=5 XSL-T ?5@2K9 0@3C<5=B DC=:F88 %1 4>;65= 1KBL AB@>:>2K< ;8B5@0;><, 5A;8 DC=:F8O 8A?>;L7C5BAO 4;O A@02=5=8O.hIn an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching. QtXmlPatterns 70<5I05<>9 AB@>:5 A8<2>; %1 <>65B 8A?>;L7>20BLAO B>;L:> 4;O M:@0=8@>20=8O A0<>3> A51O 8;8 %2, => =5 %3MIn the replacement string, %1 can only be used to escape itself or %2, not %3 QtXmlPatterns 70<5I05<>9 AB@>:5 %1 4>;6=> A>?@>2>640BLAO :0: <8=8<C< >4=>9 F8D@>9, 5A;8 =5M:@0=8@>20=>.VIn the replacement string, %1 must be followed by at least one digit when not escaped. QtXmlPatternsl&5;>G8A;5==>5 45;5=85 (%1) =0 =C;L (%2) =5 >?@545;5=>.0Integer division (%1) by zero (%2) is undefined. QtXmlPatternsD5:>@@5:B=>5 A>45@68<>5 QName: %1.Invalid QName content: %1. QtXmlPatternsB52>7<>6=> A2O70BL A ?@5D8:A>< %1+It is not possible to bind to the prefix %1 QtXmlPatternsJ52>7<>6=> ?5@5>?@545;8BL ?@5D8:A %1.*It is not possible to redeclare prefix %1. QtXmlPatternsBC45B =52>7<>6=> 2>AAB0=>28BL %1.'It will not be possible to retrieve %1. QtXmlPatternsz52>7<>6=> 4>102;OBL 0B@81CBK ?>A;5 ;N1>3> 4@C3>3> 2840 C7;0.AIt's not possible to add attributes after any other kind of node. QtXmlPatternsx"8? M;5<5=B0 107>2>3> B8?0 =5 A>2?0405B A B8?>< M;5<5=B0 %1.6Item type of base type does not match item type of %1. QtXmlPatternst@>AB>9 B8? %1 =5 <>65B A>45@60BL M;5<5=B>2 A;>6=KE B8?>2.5Item type of simple type %1 cannot be a complex type. QtXmlPatternsb3@0=8G5=85 =0 :;NG %1 A>45@68B =54>AB0NI85 ?>;O.)Key constraint %1 contains absent fields. QtXmlPatterns3@0=8G5=85 =0 :;NG %1 A>45@68B AAK;:8 =0 >1=C;O5<K9 M;5<5=B %2.:Key constraint %1 contains references nillable element %2. QtXmlPatternsL!?8A>: =5 A>>B25BAB2C5B D0A5BC length.)List content does not match length facet. QtXmlPatternsR!?8A>: =5 A>>B25BAB2C5B D0A5BC maxLength.,List content does not match maxLength facet. QtXmlPatternsR!?8A>: =5 A>>B25BAB2C5B D0A5BC minLength.,List content does not match minLength facet. QtXmlPatternsd!>45@68<>5 A?8A:0 =5 A>>B25BAB2C5B D0A5BC pattern.*List content does not match pattern facet. QtXmlPatternsl!>45@68<>5 A?8A:0 =5 ?5@5G8A;5=> 2 D0A5B5 enumeration.4List content is not listed in the enumeration facet. QtXmlPatternsF03@C65==K9 D09; AE5<K =5:>@@5:B5=.Loaded schema file is invalid. QtXmlPatterns>!>>B25BAB28O @538AB@>=57028A8<KMatches are case insensitive QtXmlPatterns=CB@5==89 B8? %1 =5 <>65B 1KBL ?@>872>4=K< >B B8?0 %2, >?@545;Q==>3> 2 107>2>< B8?5 B8?0 %3 - %4.JMember type %1 cannot be derived from member type %2 of %3's base type %4. QtXmlPatterns`@>AB>9 B8? %1 =5 <>65B >?@545;OBL A;>6=K5 B8?K.7Member type of simple type %1 cannot be a complex type. QtXmlPatterns<?>@B8@C5<K5 <>4C;8 4>;6=K 1KBL C:070=K 4> >1JO2;5=8O DC=:F89, ?5@5<5==KE 8 >?F89.MModule imports must occur before function, variable, and option declarations. QtXmlPatternsd5;5=85 ?> <>4C;N (%1) =0 =C;L (%2) =5 >?@545;5=>.0Modulus division (%1) by zero (%2) is undefined. QtXmlPatterns<5AOF %1 2=5 480?07>=0 %2..%3.%Month %1 is outside the range %2..%3. QtXmlPatternsT;O ?>;O %1 =0945=> 1>;55 >4=>3> 7=0G5=8O.'More than one value found for field %1. QtXmlPatterns#<=>65=85 G8A;0 B8?0 %1 =0 %2 8;8 %3 (?;NA-<8=CA 15A:>=5G=>ABL) =54>?CAB8<>.YMultiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed. QtXmlPatterns@>AB@0=AB2> 8<Q= %1 <>65B 1KBL A2O70=> B>;L:> A %2 (2 40==>< A;CG05 C65 ?@54>?@545;5=>).ONamespace %1 can only be bound to %2 (and it is, in either case, pre-declared). QtXmlPatterns1JO2;5=85 ?@>AB@0=AB20 8<Q= 4>;6=> 1KBL 4> >1JO2;5=8O DC=:F89, ?5@5<5==KE 8 >?F89.UNamespace declarations must occur before function, variable, and option declarations. QtXmlPatterns8@5<O >6840=8O A5B8 8AB5:;>.Network timeout. QtXmlPatternsHBACBAB2C5B >?@545;5=85 M;5<5=B0 %1.'No definition for element %1 available. QtXmlPatterns =5H=85 DC=:F88 =5 ?>445@6820NBAO. A5 ?>445@68205<K5 DC=:F88 <>3CB 8A?>;L7>20BLAO =0?@O<CN 157 ?5@2>=0G0;L=>3> >1JO2;5=8O 8E 2 :0G5AB25 2=5H=8E{No external functions are supported. All supported functions can be used directly, without first declaring them as external QtXmlPatterns@$C=:F8O A 8<5=5< %1 >BACBAB2C5B.&No function with name %1 is available. QtXmlPatternsF$C=:F8O A A83=0BC@>9 %1 >BACBAB2C5B*No function with signature %1 is available QtXmlPatternspBACBAB2C5B ?@82O7:0 : ?@>AB@0=AB2C 8<Q= 4;O ?@5D8:A0 %1-No namespace binding exists for the prefix %1 QtXmlPatternszBACBAB2C5B ?@82O7:0 : ?@>AB@0=AB2C 8<Q= 4;O ?@5D8:A0 %1 2 %23No namespace binding exists for the prefix %1 in %2 QtXmlPatternsB!E5<0 4;O ?@>25@:8 =5 >?@545;5=0.!No schema defined for validation. QtXmlPatterns>(01;>= A 8<5=5< %1 >BACBAB2C5B.No template by name %1 exists. QtXmlPatternspBACBAB2C5B 7=0G5=85 4;O 2=5H=59 ?5@5<5==>9 A 8<5=5< %1.=No value is available for the external variable with name %1. QtXmlPatternsD5@5<5==0O A 8<5=5< %1 >BACBAB2C5BNo variable with name %1 exists QtXmlPatternsh1=0@C65=> =5C=8:0;L=>5 7=0G5=85 4;O >3@0=8G5=8O %1.)Non-unique value found for constraint %1. QtXmlPatterns8 >4=> 87 2K@065=89 pragma =5 ?>445@68205BAO. >;6=> ACI5AB2>20BL 70?0A=>5 2K@065=85^None of the pragma expressions are supported. Therefore, a fallback expression must be present QtXmlPatternsp!>45@68<>5 Notation =5 ?5@5G8A;5=> 2 D0A5B5 enumeration.8Notation content is not listed in the enumeration facet. QtXmlPatternsz@8 =0A;54>20=88 >1J548=5=85< 4>ABC?=K B>;L:> D0A5BK %1 8 %2.8Only %1 and %2 facets are allowed when derived by union. QtXmlPatterns">;L:> >4=> >1JO2;5=85 %1 <>65B ?@8ACBAB2>20BL 2 ?@>;>35 70?@>A0.6Only one %1 declaration can occur in the query prolog. QtXmlPatternsF>;65= 1KBL B>;L:> >48= M;5<5=B %1.Only one %1-element can appear. QtXmlPatterns>445@68205BAO B>;L:> Unicode Codepoint Collation (%1). %2 =5 ?>445@68205BAO.IOnly the Unicode Codepoint Collation is supported(%1). %2 is unsupported. QtXmlPatternsh">;L:> ?@5D8:A %1 <>65B 1KBL A2O70= A %2 8 =0>1>@>B.5Only the prefix %1 can be bound to %2 and vice versa. QtXmlPatterns?5@0B>@ %1 =5 <>65B 8A?>;L7>20BLAO 4;O 0B><0@=KE 7=0G5=89 B8?>2 %2 8 %3.>Operator %1 cannot be used on atomic values of type %2 and %3. QtXmlPatterns`?5@0B>@ %1 =5 <>65B 8A?>;L7>20BLAO 4;O B8?0 %2.&Operator %1 cannot be used on type %2. QtXmlPatternsZ5@5?>;=5=85: 5 C40QBAO ?@54AB028BL 40BC %1."Overflow: Can't represent date %1. QtXmlPatternsT5@5?>;=5=85: =52>7<>6=> ?@54AB028BL 40BC.$Overflow: Date can't be represented. QtXmlPatterns$H81:0 @071>@0: %1Parse error: %1 QtXmlPatterns@5D8:A %1 <>65B 1KBL A2O70= B>;L:> A %2 (2 40==>< A;CG05 C65 ?@54>?@545;5=>).LPrefix %1 can only be bound to %2 (and it is, in either case, pre-declared). QtXmlPatternsD@5D8:A %1 C65 >1JO2;5= 2 ?@>;>35.,Prefix %1 is already declared in the prolog. QtXmlPatterns\@5>1@07>20=85 %1 : %2 <>65B A=878BL B>G=>ABL./Promoting %1 to %2 may cause loss of precision. QtXmlPatternsb!>45@68<>5 QName =5 A>>B25BAB2C5B D0A5BC pattern.+QName content does not match pattern facet. QtXmlPatternsd!>45@68<>5 QName >BACBAB2C5B 2 D0A5B5 enumeration.5QName content is not listed in the enumeration facet. QtXmlPatternsJ5>1E>48<> %1 M;5<5=B>2, ?>;CG5=> %2./Required cardinality is %1; got cardinality %2. QtXmlPatternsD"@51C5BAO B8? %1, => >1=0@C65= %2.&Required type is %1, but %2 was found. QtXmlPatterns~K?>;=O5BAO B01;8F0 AB8;59 XSL-T 1.0 A >1@01>BG8:>< 25@A88 2.0.5Running an XSL-T 1.0 stylesheet with a 2.0 processor. QtXmlPatternsf=0:>2>5 F5;>5 =5 A>>B25BAB2C5B D0A5BC totalDigits.?Signed integer content does not match in the totalDigits facet. QtXmlPatterns^=0:>2>5 F5;>5 =5 A>>B25BAB2C5B D0A5BC pattern.4Signed integer content does not match pattern facet. QtXmlPatternsh=0:>2>5 F5;>5 =5 A>>B25BAB2C5B D0A5BC maxExclusive.=Signed integer content does not match the maxExclusive facet. QtXmlPatternsh=0:>2>5 F5;>5 =5 A>>B25BAB2C5B D0A5BC maxInclusive.=Signed integer content does not match the maxInclusive facet. QtXmlPatternsh=0:>2>5 F5;>5 =5 A>>B25BAB2C5B D0A5BC minExclusive.=Signed integer content does not match the minExclusive facet. QtXmlPatternsh=0:>2>5 F5;>5 =5 A>>B25BAB2C5B D0A5BC minInclusive.=Signed integer content does not match the minInclusive facet. QtXmlPatterns`=0:>2>5 F5;>5 >BACBAB2C5B 2 D0A5B5 enumeration.>Signed integer content is not listed in the enumeration facet. QtXmlPatterns# ?@>AB>3> B8?0 %1 <>65B 1KBL B>;L:> ?@>AB>9 0B><0@=K9 107>2K9 B8?.=Simple type %1 can only have simple atomic type as base type. QtXmlPatterns@>AB>9 B8? %1 =5 <>65B =0A;54>20BL %2, B0: :0: 5ABL >3@0=8G5=85, >?@545;ONI55 53> :>=5G=K<.PSimple type %1 cannot derive from %2 as the latter defines restriction as final. QtXmlPatterns# ?@>AB>3> B8?0 %1 %2 =5 <>65B 1KBL =5?>A@54AB25==K< 107>2K< B8?><./Simple type %1 cannot have direct base type %2. QtXmlPatternsf@>AB>9 B8? %1 A>45@68B =54>?CAB8<K9 D0A5B B8?0 %2.2Simple type %1 contains not allowed facet type %2. QtXmlPatternsd54>?CAB8<>, GB>1K ?@>AB>9 B8? %1 8<5; 107>2K< %2.3Simple type %1 is not allowed to have base type %2. QtXmlPatternsV@>AB>9 B8? %1 <>65B 8<5BL B>;L:> D0A5B %2.0Simple type %1 is only allowed to have %2 facet. QtXmlPatternsV@>AB>9 B8? A>45@68B =54>?CAB8<K9 D0A5B %1.*Simple type contains not allowed facet %1. QtXmlPatternsJ#:070==K9 B8? %1 H01;>=C =5 8725AB5=.-Specified type %1 is not known to the schema. QtXmlPatterns#:070==K9 B8? %1 =5 <>65B 1KBL :>@@5:B=> 70<5IQ= M;5<5=B>< B8?0 %2.DSpecified type %1 is not validly substitutable with element type %2. QtXmlPatternsd!>45@68<>5 AB@>:8 =5 A>>B25BAB2C5B D0A5BC pattern.,String content does not match pattern facet. QtXmlPatternsb!>45@68<>5 AB@>:8 =5 A>>B25BAB2C5B D0A5BC length./String content does not match the length facet. QtXmlPatternsh!>45@68<>5 AB@>:8 =5 A>>B25BAB2C5B D0A5BC maxLength.2String content does not match the maxLength facet. QtXmlPatternsh!>45@68<>5 AB@>:8 =5 A>>B25BAB2C5B D0A5BC minLength.2String content does not match the minLength facet. QtXmlPatternsf!>45@68<>5 AB@>:8 >BACBAB2C5B 2 D0A5B5 enumeration.6String content is not listed in the enumeration facet. QtXmlPatternsP"5:AB>2K5 C7;K =54>?CAB8<K 2 MB>< <5AB5.,Text nodes are not allowed at this location. QtXmlPatterns"5:AB 8;8 AAK;:0 =0 >1J5:B =54>?CAB8<K 2 :0G5AB25 A>45@68<>3> M;5<5=B0 %17Text or entity references not allowed inside %1 element QtXmlPatternsBAL %1 =5 ?>445@68205BAO 2 XQuery$The %1-axis is unsupported in XQuery QtXmlPatterns>7<>6=>ABL 8<?>@B0 AE5< =5 ?>445@68205BAO, A;54>20B5;L=>, >1JO2;5=89 %1 1KBL =5 4>;6=>.WThe Schema Import feature is not supported, and therefore %1 declarations cannot occur. QtXmlPatterns>7<>6=>ABL ?@>25@:8 ?> AE5<5 =5 ?>445@68205BAO. K@065=8O %1 =5 <>3CB 8A?>;L7>20BLAO.VThe Schema Validation Feature is not supported. Hence, %1-expressions may not be used. QtXmlPatterns>URI =5 <>65B A>45@60BL D@03<5=BThe URI cannot have a fragment QtXmlPatternsfB@81CB %1 <>65B 1KBL B>;L:> C ?5@2>3> M;5<5=B0 %2.9The attribute %1 can only appear on the first %2 element. QtXmlPatterns|# %2 =5 <>65B 1KBL 0B@81CB0 %1, :>340 >= O2;O5BAO ?>B><:>< %3.?The attribute %1 cannot appear on %2, when it is a child of %3. QtXmlPatterns!8<2>; A :>4>< %1, ?@8ACBAB2CNI89 2 %2 ?@8 8A?>;L7>20=88 :>48@>2:8 %3, =5 O2;O5BAO 4>?CAB8<K< A8<2>;>< XML.QThe codepoint %1, occurring in %2 using encoding %3, is an invalid XML character. QtXmlPatterns~0==K5 >1@010BK205<>9 8=AB@C:F88 =5 <>3CB A>45@60BL AB@>:C %1AThe data of a processing instruction cannot contain the string %1 QtXmlPatterns>01>@ ?> C<>;G0=8N =5 >?@545;Q=#The default collection is undefined QtXmlPatterns$<O :>48@>2:8 %1 =5:>@@5:B=>. <O :>48@>2:8 4>;6=> A>45@60BL B>;L:> A8<2>;K ;0B8=8FK 157 ?@>15;>2 8 4>;6=> C4>2;5B2>@OBL @53C;O@=><C 2K@065=8N %2.The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2. QtXmlPatterns5@2K9 0@3C<5=B %1 =5 <>65B 1KBL B8?0 %2. = 4>;65= 1KBL G8A;>2>3> B8?0, B8?0 xs:yearMonthDuration 8;8 B8?0 xs:dayTimeDuration.uThe first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration. QtXmlPatterns5@2K9 0@3C<5=B %1 =5 <>65B 1KBL B8?0 %2. = 4>;65= 1KBL B8?0 %3, %4 8;8 %5.PThe first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. QtXmlPatterns&$>:CA =5 >?@545;Q=.The focus is undefined. QtXmlPatternsb=8F80;870F8O ?5@5<5==>9 %1 7028A8B >B A51O A0<>93The initialization of variable %1 depends on itself QtXmlPatternsb-;5<5=B %1 =5 A>>B25BAB2C5B =5>1E>48<><C B8?C %2./The item %1 did not match the required type %2. QtXmlPatterns;NG52>5 A;>2> %1 =5 <>65B 2AB@5G0BLAO A ;N1K< 4@C38< =0720=85< @568<0.5The keyword %1 cannot occur with any other mode name. QtXmlPatterns>A;54=OO G0ABL ?CB8 4>;6=0 A>45@60BL C7;K 8;8 0B><0@=K5 7=0G5=8O, => =5 <>65B A>45@60BL 8 B>, 8 4@C3>5 >4=>2@5<5==>.kThe last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two. QtXmlPatternsZ>7<>6=>ABL 8<?>@B0 <>4C;59 =5 ?>445@68205BAO*The module import feature is not supported QtXmlPatternsd0720=85 %1 =5 A>>B25BAB2C5B =8 >4=><C B8?C AE5<K..The name %1 does not refer to any schema type. QtXmlPatterns0720=85 @0AG8BK205<>3> 0B@81CB0 =5 <>65B 8<5BL URI ?@>AB@0=AB20 8<Q= %1 A ;>:0;L=K< 8<5=5< %2.ZThe name for a computed attribute cannot have the namespace URI %1 with the local name %2. QtXmlPatterns<O ?5@5<5==>9, A2O70==>9 A 2K@065=85< for, 4>;6=> >B;8G0BLAO >B ?>78F8>==>9 ?5@5<5==>9. 25 ?5@5<5==K5 A 8<5=5< %1 :>=D;8:BCNB.The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide. QtXmlPatterns|0720=85 2K@065=8O @0AH8@5=8O 4>;6=> 1KBL 2 ?@>AB@0=AB25 8<Q=.;The name of an extension expression must be in a namespace. QtXmlPatterns0720=85 >?F88 4>;6=> A>45@60BL ?@5D8:A. 5B ?@>AB@0=AB20 8<Q= ?> C<>;G0=8N 4;O >?F89.TThe name of an option must have a prefix. There is no default namespace for options. QtXmlPatternsf@>AB@0=BA2> 8<Q= %1 70@575@28@>20=>, ?>MB><C ?>;L7>20B5;LA:85 DC=:F88 =5 <>3CB 53> 8A?>;L7>20BL. >?@>1C9B5 ?@54>?@545;Q==K9 ?@5D8:A %2, :>B>@K9 ACI5AB2C5B 4;O ?>4>1=KE A8BC0F89.The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases. QtXmlPatternsURI ?@>AB@0=AB20 8<Q= =5 <>65B 1KBL ?CAB>9 AB@>:>9 ?@8 A2O7K20=88 A ?@5D8:A>< %1.JThe namespace URI cannot be the empty string when binding to a prefix, %1. QtXmlPatternsURI ?@>AB@0=AB20 8<Q= 2 =0720=88 @0AAG8BK205<>3> 0B@81CB0 =5 <>65B 1KBL %1.DThe namespace URI in the name for a computed attribute cannot be %1. QtXmlPatternsURI ?@>AB@0=AB20 8<Q= 4>;65= 1KBL :>=AB0=B>9 8 =5 <>65B A>45@60BL 2K@065=89.IThe namespace URI must be a constant and cannot use enclosed expressions. QtXmlPatterns@>AB@0=AB2> 8<Q= 4;O DC=:F88 ?>;L7>20B5;O =5 <>65B 1KBL ?CABK< (?>?@>1C9B5 ?@54>?@545;Q==K9 ?@5D8:A %1, A>740==K9 4;O ?>4>1=KE A;CG052)zThe namespace for a user defined function cannot be empty (try the predefined prefix %1, which exists for cases like this) QtXmlPatterns8@>AB@0=AB2> 8<Q= ?>;L7>20B5;LA:>9 DC=:F88 2 <>4C;5 181;8>B5:8 4>;65= A>>B25BAB2>20BL ?@>AB@0=AB2C 8<Q= <>4C;O. @C38<8 A;>20<8, >= 4>;65= 1KBL %1 2<5AB> %2The namespace of a user defined function in a library module must be equivalent to the module namespace. In other words, it should be %1 instead of %2 QtXmlPatterns$>@<0 =>@<0;870F88 %1 =5 ?>445@68205BAO. >445@6820NBAO B>;L:> %2, %3, %4, %5 8 ?CAB0O, B.5. ?CAB0O AB@>:0 (157 =>@<0;870F88).The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization). QtXmlPatternsv5@540= ?0@0<5B@ %1 , => A>>B25BAB2CNI53> %2 =5 ACI5AB2C5B.;The parameter %1 is passed, but no corresponding %2 exists. QtXmlPatternsv5>1E>48< ?0@0<5B@ %1 , => A>>B25BAB2CNI53> %2 =5 ?5@540=>.BThe parameter %1 is required, but no corresponding %2 is supplied. QtXmlPatterns>@5D8:A%1 =5 <>65B 1KBL A2O70=.The prefix %1 cannot be bound. QtXmlPatterns5 C40QBAO A2O70BL ?@5D8:A %1. > C<>;G0=8N ?@5D8:A A2O70= A ?@>AB@0=AB2>< 8<Q= %2.SThe prefix %1 cannot be bound. By default, it is already bound to the namespace %2. QtXmlPatternsp@5D8:A 4>;65= 1KBL :>@@5:B=K< %1, => %2 8< =5 O2;O5BAO./The prefix must be a valid %1, which %2 is not. QtXmlPatterns>@=52>9 C75; 2B>@>3> 0@3C<5=B0 DC=:F88 %1 4>;65= 1KBL 4>:C<5=B><. %2 =5 O2;O5BAO 4>:C<5=B><.gThe root node of the second argument to function %1 must be a document node. %2 is not a document node. QtXmlPatternsB>@>9 0@3C<5=B %1 =5 <>65B 1KBL B8?0 %2. = 4>;65= 1KBL B8?0 %3, %4 8;8 %5.QThe second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. QtXmlPatterns&5;52>5 8<O 2 >1@010BK205<>9 8=AB@C:F88 =5 <>65B 1KBL %1 2 ;N1>9 :><18=0F88 =86=53> 8 25@E=53> @538AB@>2. <O %2 =5:>@@5:B=>.~The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, %2 is invalid. QtXmlPatternsd&5;52>5 ?@>AB@0=AB2> 8<Q= %1 =5 <>65B 1KBL ?CABK<.-The target namespace of a %1 cannot be empty. QtXmlPatterns=0G5=85 0B@81CB0 %1 M;5<5=B0 %2 4>;6=> 1KBL 8;8 %3, 8;8 %4, => =5 %5.IThe value for attribute %1 on element %2 must either be %3 or %4, not %5. QtXmlPatterns=0G5=85 0B@81CB0 %1 4>;6=> 1KBL B8?0 %2, => %3 =5 A>>B25BAB2C5B 40==><C B8?C.=The value of attribute %1 must be of type %2, which %3 isn't. QtXmlPatterns=0G5=85 0B@81CB0 25@A88 XSL-T 4>;6=> 1KBL B8?0 %1, => %2 8< =5 O2;O5BAO.TThe value of the XSL-T version attribute must be a value of type %1, which %2 isn't. QtXmlPatterns:5@5<5==0O %1 =5 8A?>;L7C5BAOThe variable %1 is unused QtXmlPatternsz@8ACBAB2C5B >4=> 7=0G5=85 IDREF 157 A>>B25BAB2CNI53> ID: %1.6There is one IDREF value with no corresponding ID: %1. QtXmlPatterns0==K9 >1@01>BG8: =5 @01>B05B A> AE5<0<8, A;54>20B5;L=>, %1 =5 <>65B 8A?>;L7>20BLAO.CThis processor is not Schema-aware and therefore %1 cannot be used. QtXmlPatterns<@5<O %1:%2:%3.%4 =5:>@@5:B=>.Time %1:%2:%3.%4 is invalid. QtXmlPatterns@5<O 24:%1:%2.%3 =5:>@@5:B=>. 24 G0A0, => <8=CBK, A5:C=4K 8/8;8 <8;;8A5:C=4K >B;8G=K >B 0; _Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0;  QtXmlPatterns-;5<5=BK 25@E=53> C@>2=O B01;8FK AB8;59 4>;6=K 1KBL 2 ?@>AB@0=AB25 8<5=, :>B>@K< %1 =5 O2;O5BAO.NTop level stylesheet elements must be in a non-null namespace, which %1 isn't. QtXmlPatterns20 0B@81CB0 >1JO2;5=8O ?@>AB@0=AB2 8<Q= 8<5NB >48=0:>2>5 8<O: %1.?@545;Q=.Type %1 already defined. QtXmlPatternsrH81:0 B8?>2 2 ?@5>1@07>20=88, >6840;>AL %1, ?>;CG5=> %2.-Type error in cast, expected %1, received %2. QtXmlPatternsX1J548=5=85 =5 A>>B25BAB2C5B D0A5BC pattern.+Union content does not match pattern facet. QtXmlPatterns`1J548=5=85 =5 ?5@5G8A;5=> 2 D0A5B5 enumeration.5Union content is not listed in the enumeration facet. QtXmlPatterns<58725AB2=K9 0B@81CB XSL-T %1.Unknown XSL-T attribute %1. QtXmlPatternsh D0A5B5 %2 8A?>;L7C5BAO =58725AB=>5 >1>7=0G5=85 %1.%Unknown notation %1 used in %2 facet. QtXmlPatternsl577=0:>2>5 F5;>5 =5 A>>B25BAB2C5B D0A5BC totalDigits.AUnsigned integer content does not match in the totalDigits facet. QtXmlPatternsd577=0:>2>5 F5;>5 =5 A>>B25BAB2C5B D0A5BC pattern.6Unsigned integer content does not match pattern facet. QtXmlPatternsn577=0:>2>5 F5;>5 =5 A>>B25BAB2C5B D0A5BC maxExclusive.?Unsigned integer content does not match the maxExclusive facet. QtXmlPatternsn577=0:>2>5 F5;>5 =5 A>>B25BAB2C5B D0A5BC maxInclusive.?Unsigned integer content does not match the maxInclusive facet. QtXmlPatternsn577=0:>2>5 F5;>5 =5 A>>B25BAB2C5B D0A5BC minExclusive.?Unsigned integer content does not match the minExclusive facet. QtXmlPatternsn577=0:>2>5 F5;>5 =5 A>>B25BAB2C5B D0A5BC minInclusive.?Unsigned integer content does not match the minInclusive facet. QtXmlPatternsf577=0:>2>5 F5;>5 >BACBAB2C5B 2 D0A5B5 enumeration.@Unsigned integer content is not listed in the enumeration facet. QtXmlPatternsT=0G5=85 %1 B8?0 %2 1>;LH5 <0:A8<C<0 (%3).)Value %1 of type %2 exceeds maximum (%3). QtXmlPatternsR=0G5=85 %1 B8?0 %2 <5=LH5 <8=8<C<0 (%3).*Value %1 of type %2 is below minimum (%3). QtXmlPatternsl3@0=8G5=85 7=0G5=8O 0B@81CB0 %1 =5 B8?0 0B@81CB0: %2.?Value constraint of attribute %1 is not of attributes type: %2. QtXmlPatternsl3@0=8G5=85 7=0G5=8O M;5<5=B0 %1 =5 B8?0 M;5<5=B0: %2.;Value constraint of element %1 is not of elements type: %2. QtXmlPatterns84K B8?>2 M;5<5=B>2 %1 4>;6=K 1KBL 8;8 0B><0@=K<8, 8;8 >1J548=5=8O<8.:Variety of item type of %1 must be either atomic or union. QtXmlPatterns`84K 2=CB@5==8E B8?>2 %1 4>;6=K 1KBL 0B><0@=K<8.-Variety of member types of %1 must be atomic. QtXmlPatterns|5@A8O %1 =5 ?>445@68205BAO. >445@68205BAO XQuery 25@A88 1.0.AVersion %1 is not supported. The supported XQuery version is 1.0. QtXmlPatternsJ>;5 >3@0=8G5=89 B8?0 H01;>=0 W3C XML(W3C XML Schema identity constraint field QtXmlPatterns\5@5:;NG0B5;L >3@0=8G5=89 B8?0 H01;>=0 W3C XML+W3C XML Schema identity constraint selector QtXmlPatternsA;8 ?0@0<5B@ =5>1E>48<, 7=0G5=85 ?> C<>;G0=85 =5 <>65B 1KBL ?5@540=> G5@57 0B@81CB %1 8;8 :>=AB@C:B>@ ?>A;54>20B5;L=>AB8.rWhen a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor. QtXmlPatternsA;8 %2 A>45@68B 0B@81CB %1, :>=AB@C:B>@ ?>A;54>20B5;L=>AB8 =5 <>65B 1KBL 8A?>;L7>20=.JWhen attribute %1 is present on %2, a sequence constructor cannot be used. QtXmlPatterns|@8 ?@5>1@07>20=88 %2 2 %1 8AE>4=>5 7=0G5=85 =5 <>65B 1KBL %3.:When casting to %1 from %2, the source value cannot be %3. QtXmlPatterns@8 ?@5>1@07>20=88 2 %1 8;8 ?@>872>4=K5 >B =53> B8?K 8AE>4=>5 7=0G5=85 4>;6=> 1KBL B>3> 65 B8?0 8;8 AB@>:>2K< ;8B5@0;><. "8? %2 =54>?CAB8<.When casting to %1 or types derived from it, the source value must be of the same type, or it must be a string literal. Type %2 is not allowed. QtXmlPatternsA;8 DC=:F8O %1 8A?>;L7C5BAO 4;O A@02=5=8O 2=CB@8 H01;>=0, 0@3C<5=B 4>;65= 1KBL AAK;:>9 =0 ?5@5<5==CN 8;8 AB@>:>2K< ;8B5@0;><.vWhen function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal. QtXmlPatterns!8<2>;K ?@>15;>2 C40;5=K (70 8A:;NG5=85< B5E, GB> 1K;8 2 A8<2>;0E :;0AA>2)OWhitespace characters are removed, except when they appear in character classes QtXmlPatternsP>4 %1 =525@5=, B0: :0: =0G8=05BAO A %2.-Year %1 is invalid because it begins with %2. QtXmlPatterns ?CAB>empty QtXmlPatterns@>2=> >48= exactly one QtXmlPatterns>48= 8;8 1>;55 one or more QtXmlPatternsxsi:noNamespaceSchemaLocation =5 <>65B 2AB@5G0BLAO ?>A;5 ?5@2>3> =5-`namespace` M;5<5=B0 8;8 0B@81CB0.^xsi:noNamespaceSchemaLocation cannot appear after the first no-namespace element or attribute. QtXmlPatterns@>AB@0=AB2> 8<Q= xsi:schemaLocation %1 C65 2AB@5G0;>AL @0=55 2 40==>< 4>:C<5=B5.Vxsi:schemaLocation namespace %1 has already appeared earlier in the instance document. QtXmlPatterns=C;L 8;8 1>;55 zero or more QtXmlPatterns=C;L 8;8 >48= zero or one QtXmlPatterns ) , x2goclient-4.1.2.3/res/i18n/qt_sv.qm0000644000000000000000000020047314447111613013676 0ustar 7}D,*i% %Fc60090q0t0055 D<} DI+,=X,S6SvCU]DyKU|#ar)tm}wZ}$}$}$ Z[K<9Q /X\EKuTTi~5kEXU FbDńgA i$x1 \z*2d.U5Zz>mLn*bC;ʴ5qDʴ5Ԅ߄DdF5-F5rWYI IGAsB 5* }$o qeV ڤwu Em EE Ac AcH 35 K!?C bbД b` b` i3$ latN lf | t# tH 1 ?5 (U yt {W > d m| K %'  e  )q */ 7uL =L' B T^ ] `\ ` c( d e P eG f1O} gn{ k,m rD"t x| ~a # 9 I& I, I6 ; o+ 5 J %p* ,Y ,A + ˔K7 P') P O W 68 :/{ f  f CW 4_ s x sE AAT 9 m,l #-t 0N+ E9] L' Lx Mc\; Saa Ve ]$3 f) f)C io> m` w H HB0 $D .@4  i _ j& ΂ J JE t. ķ Ӈ  ̺K{ -DLl k kצ U)Y < 0  Qo  X Q xH[ .. 7F* >T} >Ut >V_ >[ >g, >h > > DT I.C RVID RV~ RV S.ɘ S YH [ j7oA1 p/* . Bc  T2) Tk] T T d 4i ` SV )d 3 .2} .] .l' . .Y . a~ y s  t :bZ ʜ- +>0O 0E ;ɾ; Ptr Pt fe feX g iFC iG^ i` u w wo wՔ w} w}Ǩ w} N WL ^t R X D t5r t5ۯ s6 Z ): HT)gT**'*٫/E)//E|1I_ZjXRuB[ Sa.9?vɅy$~[2SfB&{Ӣ~#ݖ|[yr; Q E-"#$U%4<8%4Iu-vр0i)X001c}2wTD sHJdZL$.c5c5ֳiCyC!{~a`D ExN@@kyjPKt2,wjfqi1 Om %1About %1MAC_APPLICATION_MENU Gm %1Hide %1MAC_APPLICATION_MENUGm vriga Hide OthersMAC_APPLICATION_MENUInstllningar &Preferences...MAC_APPLICATION_MENUAvsluta %1Quit %1MAC_APPLICATION_MENUTjnsterServicesMAC_APPLICATION_MENUVisa allaShow AllMAC_APPLICATION_MENU2%1, %2 r inte definierad%1, %2 not definedQ3Accel4Tvetydigt %1 hanteras inteAmbiguous %1 not handledQ3AccelTa bortDelete Q3DataTable FalsktFalse Q3DataTable InfogaInsert Q3DataTableSantTrue Q3DataTableUppdateraUpdate Q3DataTablep%1 Filen hittades inte. Kontrollera skvg och filnamn.+%1 File not found. Check path and filename. Q3FileDialog&Ta bort&Delete Q3FileDialog&Nej&No Q3FileDialog&OK&OK Q3FileDialog &ppna&Open Q3FileDialog&Byt namn&Rename Q3FileDialog &Spara&Save Q3FileDialog&Osorterad &Unsorted Q3FileDialog&Ja&Yes Q3FileDialogh<qt>r du sker p att du vill ta bort %1 "%2"?</qt>1Are you sure you wish to delete %1 "%2"? Q3FileDialogAlla filer (*) All Files (*) Q3FileDialog Alla filer (*.*)All Files (*.*) Q3FileDialogAttribut Attributes Q3FileDialogTillbakaBack Q3FileDialog AvbrytCancel Q3FileDialog8Kopiera eller ta bort en filCopy or Move a File Q3FileDialogSkapa ny mappCreate New Folder Q3FileDialog DatumDate Q3FileDialogTa bort %1 Delete %1 Q3FileDialogDetaljvy Detail View Q3FileDialogKatalogDir Q3FileDialogKataloger Directories Q3FileDialogKatalog: Directory: Q3FileDialogFelError Q3FileDialogFilFile Q3FileDialogFil&namn: File &name: Q3FileDialogFil&typ: File &type: Q3FileDialogHitta katalogFind Directory Q3FileDialogOtillgnglig Inaccessible Q3FileDialog Listvy List View Q3FileDialogLeta &i: Look &in: Q3FileDialogNamnName Q3FileDialogNy mapp New Folder Q3FileDialogNy mapp %1 New Folder %1 Q3FileDialogNy mapp 1 New Folder 1 Q3FileDialog En katalog upptOne directory up Q3FileDialog ppnaOpen Q3FileDialog ppnaOpen  Q3FileDialog6Frhandsgranska filinnehllPreview File Contents Q3FileDialog<Frhandsgranska filinformationPreview File Info Q3FileDialogUppdat&eraR&eload Q3FileDialogSkrivskyddad Read-only Q3FileDialogLs-skriv Read-write Q3FileDialogLs: %1Read: %1 Q3FileDialogSpara somSave As Q3FileDialogVlj en katalogSelect a Directory Q3FileDialog"Visa &dolda filerShow &hidden files Q3FileDialogStorlekSize Q3FileDialogSorteraSort Q3FileDialog(Sortera efter &datum Sort by &Date Q3FileDialog&Sortera efter &namn Sort by &Name Q3FileDialog,Sortera efter &storlek Sort by &Size Q3FileDialogSpecialSpecial Q3FileDialog6Symbolisk lnk till katalogSymlink to Directory Q3FileDialog.Symbolisk lnk till filSymlink to File Q3FileDialog6Symbolisk lnk till specialSymlink to Special Q3FileDialogTypType Q3FileDialogLsskyddad Write-only Q3FileDialogSkriv: %1 Write: %1 Q3FileDialogkatalogen the directory Q3FileDialog filenthe file Q3FileDialog"symboliska lnken the symlink Q3FileDialog<Kunde inte skapa katalogen %1Could not create directory %1 Q3LocalFs(Kunde inte ppna %1Could not open %1 Q3LocalFs8Kunde inte lsa katalogen %1Could not read directory %1 Q3LocalFsXKunde inte ta bort filen eller katalogen %1%Could not remove file or directory %1 Q3LocalFsJKunde inte byta namn p %1 till %2Could not rename %1 to %2 Q3LocalFs4Kunde inte skriva till %1Could not write %1 Q3LocalFsAnpassa... Customize... Q3MainWindowRada uppLine up Q3MainWindow@tgrden stoppades av anvndarenOperation stopped by the userQ3NetworkProtocol AvbrytCancelQ3ProgressDialogVerkstllApply Q3TabDialog AvbrytCancel Q3TabDialogStandardvrdenDefaults Q3TabDialog HjlpHelp Q3TabDialogOKOK Q3TabDialog&Kopiera&Copy Q3TextEditKlistra &in&Paste Q3TextEdit&Gr om&Redo Q3TextEdit &ngra&Undo Q3TextEditTmClear Q3TextEditKlipp u&tCu&t Q3TextEditMarkera alla Select All Q3TextEdit StngClose Q3TitleBar Stnger fnstretCloses the window Q3TitleBar`Innehller kommandon fr att manipulera fnstret*Contains commands to manipulate the window Q3TitleBarVisar namnet p fnstret och innehller kontroller fr att manipulera detFDisplays the name of the window and contains controls to manipulate it Q3TitleBar4Gr fnstret till helskrmMakes the window full screen Q3TitleBarMaximeraMaximize Q3TitleBarMinimeraMinimize Q3TitleBar2Flyttar fnstret ur vgenMoves the window out of the way Q3TitleBarnterstller ett maximerat fnster tillbaka till normalt&Puts a maximized window back to normal Q3TitleBarLterstller ett minimerat till normaltPuts a minimized back to normal Q3TitleBarterstll nedt Restore down Q3TitleBarterstll uppt Restore up Q3TitleBar SystemSystem Q3TitleBar Mer...More... Q3ToolBar(oknt) (unknown) Q3UrlOperatorProtokollet \"%1\" har inte std fr att kopiera eller flytta filer eller katalogerIThe protocol `%1' does not support copying or moving files or directories Q3UrlOperatorxProtokollet \"%1\" har inte std fr att skapa nya kataloger;The protocol `%1' does not support creating new directories Q3UrlOperatorhProtokollet \"%1\" har inte std fr att hmta filer0The protocol `%1' does not support getting files Q3UrlOperatorpProtokollet \"%1\" har inte std fr att lista kataloger6The protocol `%1' does not support listing directories Q3UrlOperatorhProtokollet \"%1\" har inte std fr att lmna filer0The protocol `%1' does not support putting files Q3UrlOperatorProtokollet \"%1\" har inte std fr att ta bort filer eller kataloger@The protocol `%1' does not support removing files or directories Q3UrlOperatorProtokollet \"%1\" har inte std fr att byta namn p filer eller kataloger@The protocol `%1' does not support renaming files or directories Q3UrlOperator8Protokollet \"%\" stds inte"The protocol `%1' is not supported Q3UrlOperator&Avbryt&CancelQ3Wizard&Frdig&FinishQ3Wizard &Hjlp&HelpQ3Wizard&Nsta >&Next >Q3Wizard< Till&baka< &BackQ3Wizard(Anslutningen nekadesConnection refusedQAbstractSocketHTidsgrnsen fr anslutning verstegsConnection timed outQAbstractSocket(Vrden hittades inteHost not foundQAbstractSocket0Ntverket r inte nbartNetwork unreachableQAbstractSocket0Uttaget r inte anslutetSocket is not connectedQAbstractSocketHTidsgrns fr uttagstgrd verstegsSocket operation timed outQAbstractSocket&Stega uppt&Step upQAbstractSpinBoxStega &nedt Step &downQAbstractSpinBoxAktiveraActivate QApplicationDAktiverar programmets huvudfnster#Activates the program's main window QApplicationVBinren \"%1\" krver Qt %2, hittade Qt %3.,Executable '%1' requires Qt %2, found Qt %3. QApplication<Inkompatibelt Qt-biblioteksfelIncompatible Qt Library Error QApplication&Avbryt&Cancel QAxSelectCOM-&objekt: COM &Object: QAxSelectOKOK QAxSelect(Vlj ActiveX ControlSelect ActiveX Control QAxSelect KryssaCheck QCheckBox VxlaToggle QCheckBoxAvkryssaUncheck QCheckBox:&Lgg till i anpassade frger&Add to Custom Colors QColorDialog&Basfrger &Basic colors QColorDialog"&Anpassade frger&Custom colors QColorDialog &Grn:&Green: QColorDialog &Rd:&Red: QColorDialog&Mttnad:&Sat: QColorDialog&Ljushet:&Val: QColorDialogAlfa&kanal:A&lpha channel: QColorDialog Bl&:Bl&ue: QColorDialogNya&ns:Hu&e: QColorDialog StngClose QComboBox FalsktFalse QComboBox ppnaOpen QComboBoxSantTrue QComboBoxBKunde inte verkstlla transaktionUnable to commit transaction QDB2Driver$Kunde inte anslutaUnable to connect QDB2DriverJKunde inte rulla tillbaka transaktionUnable to rollback transaction QDB2DriverZKunde inte stlla in automatisk verkstllningUnable to set autocommit QDB2Driver2Kunde inte binda variabelUnable to bind variable QDB2Result2Kunde inte kra frgesatsUnable to execute statement QDB2Result.Kunde inte hmta frstaUnable to fetch first QDB2Result,Kunde inte hmta nstaUnable to fetch next QDB2Result4Kunde inte hmta posten %1Unable to fetch record %1 QDB2Result<Kunde inte frbereda frgesatsUnable to prepare statement QDB2ResultAMAM QDateTimeEditPMPM QDateTimeEditamam QDateTimeEditpmpm QDateTimeEditVad r det hr? What's This?QDialog&Avbryt&CancelQDialogButtonBox &Stng&CloseQDialogButtonBox&Nej&NoQDialogButtonBox&OK&OKQDialogButtonBox &Spara&SaveQDialogButtonBox&Ja&YesQDialogButtonBox AvbrytAbortQDialogButtonBoxVerkstllApplyQDialogButtonBox AvbrytCancelQDialogButtonBox StngCloseQDialogButtonBoxFrkastaDiscardQDialogButtonBoxSpara inte Don't SaveQDialogButtonBox HjlpHelpQDialogButtonBoxIgnoreraIgnoreQDialogButtonBoxN&ej till alla N&o to AllQDialogButtonBoxOKOKQDialogButtonBox ppnaOpenQDialogButtonBoxterstllResetQDialogButtonBox0terstll standardvrdenRestore DefaultsQDialogButtonBoxFrsk igenRetryQDialogButtonBox SparaSaveQDialogButtonBoxSpara allaSave AllQDialogButtonBoxJa till &alla Yes to &AllQDialogButtonBoxndringsdatum Date Modified QDirModelSortKind QDirModelNamnName QDirModelStorlekSize QDirModelTypType QDirModel StngClose QDockWidget MindreLessQDoubleSpinBoxMerMoreQDoubleSpinBox&OK&OK QErrorMessage6&Visa detta meddelande igen&Show this message again QErrorMessage,Felskningsmeddelande:Debug Message: QErrorMessagedesdigert fel: Fatal Error: QErrorMessageVarning:Warning: QErrorMessage%1 Katalogen hittades inte. Kontrollera att det korrekta katalognamnet angavs.K%1 Directory not found. Please verify the correct directory name was given. QFileDialog%1 Filen hittades inte. Kontrollera att det korrekta filnamnet angavs.A%1 File not found. Please verify the correct file name was given. QFileDialogJ%1 finns redan. Vill du erstta den?-%1 already exists. Do you want to replace it? QFileDialog&Ta bort&Delete QFileDialog &ppna&Open QFileDialog&Byt namn&Rename QFileDialog &Spara&Save QFileDialogd\"%1\" r skrivskyddad. Vill du ta bort den nd?9'%1' is write protected. Do you want to delete it anyway? QFileDialogAlla filer (*) All Files (*) QFileDialog Alla filer (*.*)All Files (*.*) QFileDialogTr du sker p att du vill ta bort \"%1\"?!Are sure you want to delete '%1'? QFileDialogTillbakaBack QFileDialog:Kunde inte ta bort katalogen.Could not delete directory. QFileDialogSkapa ny mappCreate New Folder QFileDialogDetaljerad vy Detail View QFileDialogKataloger Directories QFileDialogKatalog: Directory: QFileDialog EnhetDrive QFileDialogFilFile QFileDialogFil&namn: File &name: QFileDialogFiler av typen:Files of type: QFileDialogHitta katalogFind Directory QFileDialog FramtForward QFileDialog Listvy List View QFileDialogMin dator My Computer QFileDialogNy mapp New Folder QFileDialog ppnaOpen QFileDialogFrldrakatalogParent Directory QFileDialogSpara somSave As QFileDialog"Visa &dolda filerShow &hidden files QFileDialog OkntUnknown QFileDialogndringsdatum Date ModifiedQFileSystemModelSortKindQFileSystemModelMin dator My ComputerQFileSystemModelNamnNameQFileSystemModelStorlekSizeQFileSystemModelTypTypeQFileSystemModel&Typsnitt&Font QFontDialog&Storlek&Size QFontDialog&Understruken &Underline QFontDialogEffekterEffects QFontDialogT&ypsnittsstil Font st&yle QFontDialogTestSample QFontDialogVlj typsnitt Select Font QFontDialogGenomstru&ken Stri&keout QFontDialogSkr&ivsystemWr&iting System QFontDialogBByte av katalog misslyckades: %1Changing directory failed: %1QFtp(Ansluten till vrdenConnected to hostQFtp.Ansluten till vrden %1Connected to host %1QFtpPAnslutning till vrden misslyckades: %1Connecting to host failed: %1QFtp&Anslutningen stngdConnection closedQFtpLAnslutning vgrades fr dataanslutning&Connection refused for data connectionQFtpHAnslutningen till vrden %1 vgradesConnection refused to host %1QFtp:Anslutningen till %1 stngdesConnection to %1 closedQFtpPSkapandet av katalogen misslyckades: %1Creating directory failed: %1QFtpPNedladdningen av filen misslyckades: %1Downloading file failed: %1QFtp$Vrden %1 hittades Host %1 foundQFtp.Vrden %1 hittades inteHost %1 not foundQFtpVrden hittades Host foundQFtpNListning av katalogen misslyckades: %1Listing directory failed: %1QFtp8Inloggning misslyckades: %1Login failed: %1QFtpInte ansluten Not connectedQFtpTBorttagning av katalogen misslyckades: %1Removing directory failed: %1QFtpLBorttagning av filen misslyckades: %1Removing file failed: %1QFtpOknt fel Unknown errorQFtpPUppladdningen av filen misslyckades: %1Uploading file failed: %1QFtpLTRQT_LAYOUT_DIRECTIONQGuiApplicationOknt fel Unknown error QHostInfo(Vrden hittades inteHost not foundQHostInfoAgentOknd adresstypUnknown address typeQHostInfoAgentOknt fel Unknown errorQHostInfoAgent$Ansluten till vrdConnected to hostQHttp.Ansluten till vrden %1Connected to host %1QHttp&Anslutningen stngdConnection closedQHttp(Anslutningen nekadesConnection refusedQHttp:Anslutningen till %1 stngdesConnection to %1 closedQHttp2HTTP-begran misslyckadesHTTP request failedQHttp$Vrden %1 hittades Host %1 foundQHttp.Vrden %1 hittades inteHost %1 not foundQHttpVrden hittades Host foundQHttp2Ogiltig HTTP chunked bodyInvalid HTTP chunked bodyQHttp.Ogiltig HTTP-svarshuvudInvalid HTTP response headerQHttpLIngen server instlld att ansluta tillNo server set to connect toQHttpBegran avbrtsRequest abortedQHttpHServern stngde ovntat anslutningen%Server closed connection unexpectedlyQHttpOknt fel Unknown errorQHttp$Fel innehllslngdWrong content lengthQHttp:Kunde inte starta transaktionCould not start transaction QIBaseDriver4Fel vid ppning av databasError opening database QIBaseDriverBKunde inte verkstlla transaktionUnable to commit transaction QIBaseDriverJKunde inte rulla tillbaka transaktionUnable to rollback transaction QIBaseDriver:Kunde inte allokera frgesatsCould not allocate statement QIBaseResultNKunde inte beskriva inmatningsfrgesats"Could not describe input statement QIBaseResult:Kunde inte beskriva frgesatsCould not describe statement QIBaseResult6Kunde inte hmta nsta postCould not fetch next item QIBaseResult,Kunde inte hitta kedjaCould not find array QIBaseResult.Kunde inte f kedjedataCould not get array data QIBaseResultDKunde inte g frgesatsinformationCould not get query info QIBaseResultDKunde inte f frgesatsinformationCould not get statement info QIBaseResult<Kunde inte frbereda frgesatsCould not prepare statement QIBaseResult:Kunde inte starta transaktionCould not start transaction QIBaseResult6Kunde inte stnga frgesatsUnable to close statement QIBaseResultBKunde inte verkstlla transaktionUnable to commit transaction QIBaseResult*Kunde inte skapa BLOBUnable to create BLOB QIBaseResult2Kunde inte kra frgesatsUnable to execute query QIBaseResult*Kunde inte ppna BLOBUnable to open BLOB QIBaseResult(Kunde inte lsa BLOBUnable to read BLOB QIBaseResult,Kunde inte skriva BLOBUnable to write BLOB QIBaseResult>Inget ledigt utrymme p enhetenNo space left on device QIODevice:Ingen sdan fil eller katalogNo such file or directory QIODevicetkomst nekadPermission denied QIODevice*Fr mnga ppna filerToo many open files QIODeviceOknt fel Unknown error QIODevice0Mac OS X-inmatningsmetodMac OS X input method QInputContext.Windows-inmatningsmetodWindows input method QInputContextXIMXIM QInputContext&XIM-inmatningsmetodXIM input method QInputContextOknt fel Unknown errorQLibrary&Kopiera&Copy QLineEditKlistra &in&Paste QLineEdit&Gr om&Redo QLineEdit &ngra&Undo QLineEditKlipp &utCu&t QLineEditTa bortDelete QLineEditMarkera alla Select All QLineEdit<Kunde inte pbrja transaktionUnable to begin transaction QMYSQLDriverBKunde inte verkstlla transaktionUnable to commit transaction QMYSQLDriver$Kunde inte anslutaUnable to connect QMYSQLDriver:Kunde inte ppna databasen \"Unable to open database ' QMYSQLDriverJKunde inte rulla tillbaka transaktionUnable to rollback transaction QMYSQLDriver2Kunde inte binda utvrdenUnable to bind outvalues QMYSQLResult,Kunde inte binda vrdeUnable to bind value QMYSQLResult2Kunde inte kra frgesatsUnable to execute query QMYSQLResult2Kunde inte kra frgesatsUnable to execute statement QMYSQLResult*Kunde inte hmta dataUnable to fetch data QMYSQLResult<Kunde inte frbereda frgesatsUnable to prepare statement QMYSQLResult>Kunde inte terstlla frgesatsUnable to reset statement QMYSQLResult2Kunde inte lagra resultatUnable to store result QMYSQLResultPKunde inte lagra resultat frn frgesats!Unable to store statement results QMYSQLResult%1 - [%2] %1 - [%2] QMdiSubWindow &Stng&Close QMdiSubWindow&Flytta&Move QMdiSubWindowte&rstll&Restore QMdiSubWindow&Storlek&Size QMdiSubWindow StngClose QMdiSubWindow HjlpHelp QMdiSubWindowMa&ximera Ma&ximize QMdiSubWindowMaximeraMaximize QMdiSubWindowMenyMenu QMdiSubWindowMi&nimera Mi&nimize QMdiSubWindowMinimeraMinimize QMdiSubWindowterstll nedt Restore Down QMdiSubWindow&Stanna kvar vers&t Stay on &Top QMdiSubWindow StngCloseQMenuKrExecuteQMenu ppnaOpenQMenu Om QtAbout Qt QMessageBox HjlpHelp QMessageBox Dlj detaljer,,,Hide Details... QMessageBoxOKOK QMessageBox Visa detaljer...Show Details... QMessageBox(Vlj inmatningsmetod Select IMQMultiInputContextFVxlare fr flera inmatningsmetoderMultiple input method switcherQMultiInputContextPluginVxlare fr flera inmatningsmetoder som anvnder sammanhangsmenyn fr textwidgarMMultiple input method switcher that uses the context menu of the text widgetsQMultiInputContextPluginVEtt annat uttag lyssnar redan p samma port4Another socket is already listening on the same portQNativeSocketEngineFrsk att anvnda IPv6-uttag p en plattform som saknar IPv6-std=Attempt to use IPv6 socket on a platform with no IPv6 supportQNativeSocketEngine*Anslutningen vgradesConnection refusedQNativeSocketEngineHTidsgrnsen fr anslutning verstegsConnection timed outQNativeSocketEngineHDatagram fr fr stor fr att skickaDatagram was too large to sendQNativeSocketEngine(Vrden r inte nbarHost unreachableQNativeSocketEngine0Ogiltig uttagsbeskrivareInvalid socket descriptorQNativeSocketEngineNtverksfel Network errorQNativeSocketEngineLTidsgrns fr ntverkstgrd verstegsNetwork operation timed outQNativeSocketEngine0Ntverket r inte nbartNetwork unreachableQNativeSocketEngine(tgrd p icke-uttagOperation on non-socketQNativeSocketEngine Slut p resurserOut of resourcesQNativeSocketEnginetkomst nekadPermission deniedQNativeSocketEngine2Protokolltypen stds inteProtocol type not supportedQNativeSocketEngine8Adressen r inte tillgngligThe address is not availableQNativeSocketEngine&Adressen r skyddadThe address is protectedQNativeSocketEngine:Bindningsadress anvnds redan#The bound address is already in useQNativeSocketEngine@Fjrrvrden stngde anslutningen%The remote host closed the connectionQNativeSocketEngineNKunde inte initiera uttag fr broadcast%Unable to initialize broadcast socketQNativeSocketEngineTKunde inte initiera icke-blockerande uttag(Unable to initialize non-blocking socketQNativeSocketEngineBKunde inte ta emot ett meddelandeUnable to receive a messageQNativeSocketEngine@Kunde inte skicka ett meddelandeUnable to send a messageQNativeSocketEngine"Kunde inte skrivaUnable to writeQNativeSocketEngineOknt fel Unknown errorQNativeSocketEngine2Uttagstgrden stds inteUnsupported socket operationQNativeSocketEngine<Kunde inte pbrja transaktionUnable to begin transaction QOCIDriverBKunde inte verkstlla transaktionUnable to commit transaction QOCIDriver&Kunde inte logga inUnable to logon QOCIDriverJKunde inte rulla tillbaka transaktionUnable to rollback transaction QOCIDriver:Kunde inte allokera frgesatsUnable to alloc statement QOCIResultNKunde inte binda kolumn fr satskrning'Unable to bind column for batch execute QOCIResult,Kunde inte binda vrdeUnable to bind value QOCIResult2Kunde inte kra satsfrga!Unable to execute batch statement QOCIResult2Kunde inte kra frgesatsUnable to execute statement QOCIResult0Kunde inte g till nstaUnable to goto next QOCIResult<Kunde inte frbereda frgesatsUnable to prepare statement QOCIResultBKunde inte verkstlla transaktionUnable to commit transaction QODBCDriver$Kunde inte anslutaUnable to connect QODBCDriverKunde inte ansluta - Drivrutinen har inte std fr all ndvndig funktionalitetCUnable to connect - Driver doesn't support all needed functionality QODBCDriver\Kunde inte inaktivera automatisk verkstllningUnable to disable autocommit QODBCDriverXKunde inte aktivera automatisk verkstllningUnable to enable autocommit QODBCDriverJKunde inte rulla tillbaka transaktionUnable to rollback transaction QODBCDriverQODBCResult::reset: Kunde inte stlla in \"SQL_CURSOR_STATIC\" som frgesatsattribut. Kontrollera konfigurationen fr din ODBC-drivrutinyQODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration QODBCResult2Kunde inte binda variabelUnable to bind variable QODBCResult2Kunde inte kra frgesatsUnable to execute statement QODBCResult.Kunde inte hmta frstaUnable to fetch first QODBCResult,Kunde inte hmta nstaUnable to fetch next QODBCResult<Kunde inte frbereda frgesatsUnable to prepare statement QODBCResultHomeHomeQObjectNamnNameQPPDOptionsModel VrdeValueQPPDOptionsModel<Kunde inte pbrja transaktionCould not begin transaction QPSQLDriverBKunde inte verkstlla transaktionCould not commit transaction QPSQLDriverJKunde inte rulla tillbaka transaktionCould not rollback transaction QPSQLDriver$Kunde inte anslutaUnable to connect QPSQLDriver,Kunde inte skapa frgaUnable to create query QPSQLResult<Kunde inte frbereda frgesatsUnable to prepare statement QPSQLResultLiggande LandscapeQPageSetupWidgetSidstorlek: Page size:QPageSetupWidgetPappersklla: Paper source:QPageSetupWidgetStendePortraitQPageSetupWidgetOknt fel Unknown error QPluginLoaderR%1 finns redan. Vill du skriva ver den?/%1 already exists. Do you want to overwrite it? QPrintDialog$A0 (841 x 1189 mm)A0 (841 x 1189 mm) QPrintDialog"A1 (594 x 841 mm)A1 (594 x 841 mm) QPrintDialog"A2 (420 x 594 mm)A2 (420 x 594 mm) QPrintDialog"A3 (297 x 420 mm)A3 (297 x 420 mm) QPrintDialogDA4 (210 x 297 mm, 8.26 x 11.7 tum)%A4 (210 x 297 mm, 8.26 x 11.7 inches) QPrintDialog"A5 (148 x 210 mm)A5 (148 x 210 mm) QPrintDialog"A6 (105 x 148 mm)A6 (105 x 148 mm) QPrintDialog A7 (74 x 105 mm)A7 (74 x 105 mm) QPrintDialogA8 (52 x 74 mm)A8 (52 x 74 mm) QPrintDialogA9 (37 x 52 mm)A9 (37 x 52 mm) QPrintDialogAlias: %1 Aliases: %1 QPrintDialog&B0 (1000 x 1414 mm)B0 (1000 x 1414 mm) QPrintDialog$B1 (707 x 1000 mm)B1 (707 x 1000 mm) QPrintDialog B10 (31 x 44 mm)B10 (31 x 44 mm) QPrintDialog"B2 (500 x 707 mm)B2 (500 x 707 mm) QPrintDialog"B3 (353 x 500 mm)B3 (353 x 500 mm) QPrintDialog"B4 (250 x 353 mm)B4 (250 x 353 mm) QPrintDialogDB5 (176 x 250 mm, 6.93 x 9.84 tum)%B5 (176 x 250 mm, 6.93 x 9.84 inches) QPrintDialog"B6 (125 x 176 mm)B6 (125 x 176 mm) QPrintDialog B7 (88 x 125 mm)B7 (88 x 125 mm) QPrintDialogB8 (62 x 88 mm)B8 (62 x 88 mm) QPrintDialogB9 (44 x 62 mm)B9 (44 x 62 mm) QPrintDialog$C5E (163 x 229 mm)C5E (163 x 229 mm) QPrintDialog$DLE (110 x 220 mm)DLE (110 x 220 mm) QPrintDialogLExecutive (7.5 x 10 tum, 191 x 254 mm))Executive (7.5 x 10 inches, 191 x 254 mm) QPrintDialogfFilen %1 r inte skrivbar. Vlj ett annat filnamn.=File %1 is not writable. Please choose a different file name. QPrintDialog(Folio (210 x 330 mm)Folio (210 x 330 mm) QPrintDialog*Ledger (432 x 279 mm)Ledger (432 x 279 mm) QPrintDialogDLegal (8.5 x 14 tum, 216 x 356 mm)%Legal (8.5 x 14 inches, 216 x 356 mm) QPrintDialogFLetter (8.5 x 11 tum, 216 x 279 mm)&Letter (8.5 x 11 inches, 216 x 279 mm) QPrintDialogOKOK QPrintDialogSkriv utPrint QPrintDialog*Skriv ut till fil ...Print To File ... QPrintDialogSkriv ut alla Print all QPrintDialog$Skriv ut intervall Print range QPrintDialog,Tabloid (279 x 432 mm)Tabloid (279 x 432 mm) QPrintDialogJUS Common #10 Envelope (105 x 241 mm)%US Common #10 Envelope (105 x 241 mm) QPrintDialoglokalt anslutenlocally connected QPrintDialog okntunknown QPrintDialog StngCloseQPrintPreviewDialogLiggande LandscapeQPrintPreviewDialogStendePortraitQPrintPreviewDialogSorteraCollateQPrintSettingsOutput KopiorCopiesQPrintSettingsOutputSidor frn Pages fromQPrintSettingsOutputSkriv ut alla Print allQPrintSettingsOutput$Skriv ut intervall Print rangeQPrintSettingsOutputVal SelectionQPrintSettingsOutputtilltoQPrintSettingsOutputSkrivarePrinter QPrintWidget AvbrytCancelQProgressDialog ppnaOpen QPushButton KryssaCheck QRadioButton4felaktig teckenklasssyntaxbad char class syntaxQRegExp.felaktig seframtsyntaxbad lookahead syntaxQRegExp4felaktig upprepningssyntaxbad repetition syntaxQRegExp8inaktiverad funktion anvndsdisabled feature usedQRegExp*ogiltigt oktalt vrdeinvalid octal valueQRegExp$ndde intern grnsmet internal limitQRegExp2saknar vnster avgrnsaremissing left delimQRegExp&inga fel intrffadeno error occurredQRegExpovntat slutunexpected endQRegExp4Fel vid ppning av databasError to open databaseQSQLite2Driver<Kunde inte pbrja transaktionUnable to begin transactionQSQLite2DriverBKunde inte verkstlla transaktionUnable to commit transactionQSQLite2DriverJKunde inte rulla tillbaka transaktionUnable to rollback TransactionQSQLite2Driver2Kunde inte kra frgesatsUnable to execute statementQSQLite2Result2Kunde inte hmta resultatUnable to fetch resultsQSQLite2Result8Fel vid stngning av databasError closing database QSQLiteDriver4Fel vid ppning av databasError opening database QSQLiteDriver<Kunde inte pbrja transaktionUnable to begin transaction QSQLiteDriverBKunde inte verkstlla transaktionUnable to commit transaction QSQLiteDriverJKunde inte rulla tillbaka transaktionUnable to rollback transaction QSQLiteDriver6Parameterantal stmmer inteParameter count mismatch QSQLiteResult6Kunde inte binda parametrarUnable to bind parameters QSQLiteResult2Kunde inte kra frgesatsUnable to execute statement QSQLiteResult(Kunde inte hmta radUnable to fetch row QSQLiteResult>Kunde inte terstlla frgesatsUnable to reset statement QSQLiteResultNederkantBottom QScrollBarVnsterkant Left edge QScrollBarRad nedt Line down QScrollBarRada uppLine up QScrollBarSida nedt Page down QScrollBarSida vnster Page left QScrollBarSida hger Page right QScrollBarSida upptPage up QScrollBarPositionPosition QScrollBarHgerkant Right edge QScrollBarRulla nedt Scroll down QScrollBarRulla hr Scroll here QScrollBarRulla vnster Scroll left QScrollBarRulla hger Scroll right QScrollBarRulla uppt Scroll up QScrollBarverkantTop QScrollBar++ QShortcutAltAlt QShortcut BaktBack QShortcutBacksteg Backspace QShortcutBacktabBacktab QShortcutFrstrk bas Bass Boost QShortcutSnk bas Bass Down QShortcutHj basBass Up QShortcutRing uppCall QShortcutCaps Lock Caps Lock QShortcutCapsLockCapsLock QShortcutSammanhang1Context1 QShortcutSammanhang2Context2 QShortcutSammanhang3Context3 QShortcutSammanhang4Context4 QShortcutCtrlCtrl QShortcutDelDel QShortcut DeleteDelete QShortcutNedDown QShortcutEndEnd QShortcut EnterEnter QShortcutEscEsc QShortcut EscapeEscape QShortcutF%1F%1 QShortcutFavoriter Favorites QShortcutVndFlip QShortcut FramtForward QShortcutLgg pHangup QShortcut HjlpHelp QShortcutHomeHome QShortcutHemsida Home Page QShortcutInsIns QShortcut InsertInsert QShortcutStarta (0) Launch (0) QShortcutStarta (1) Launch (1) QShortcutStarta (2) Launch (2) QShortcutStarta (3) Launch (3) QShortcutStarta (4) Launch (4) QShortcutStarta (5) Launch (5) QShortcutStarta (6) Launch (6) QShortcutStarta (7) Launch (7) QShortcutStarta (8) Launch (8) QShortcutStarta (9) Launch (9) QShortcutStarta (A) Launch (A) QShortcutStarta (B) Launch (B) QShortcutStarta (C) Launch (C) QShortcutStarta (D) Launch (D) QShortcutStarta (E) Launch (E) QShortcutStarta (F) Launch (F) QShortcutStarta e-post Launch Mail QShortcutStarta media Launch Media QShortcutVnsterLeft QShortcutMedia nsta Media Next QShortcutMedia spela upp Media Play QShortcut Media fregendeMedia Previous QShortcutMedia spela in Media Record QShortcutMedia stopp Media Stop QShortcutMenyMenu QShortcutMetaMeta QShortcutNejNo QShortcutNum LockNum Lock QShortcutNumLockNumLock QShortcutNumber Lock Number Lock QShortcutppna urlOpen URL QShortcutPage Down Page Down QShortcutPage UpPage Up QShortcut PausePause QShortcut PgDownPgDown QShortcutPgUpPgUp QShortcut PrintPrint QShortcutPrint Screen Print Screen QShortcutUppdateraRefresh QShortcut ReturnReturn QShortcut HgerRight QShortcutScroll Lock Scroll Lock QShortcutScrollLock ScrollLock QShortcutSkSearch QShortcutVljSelect QShortcut ShiftShift QShortcutMellanslagSpace QShortcutAvvaktaStandby QShortcut StoppaStop QShortcut SysReqSysReq QShortcutSystem RequestSystem Request QShortcutTabTab QShortcutSnk diskant Treble Down QShortcutHj diskant Treble Up QShortcutUppUp QShortcutSnk volym Volume Down QShortcutVolym tyst Volume Mute QShortcutHj volym Volume Up QShortcutJaYes QShortcutSida nedt Page downQSliderSida vnster Page leftQSliderSida hger Page rightQSliderSida upptPage upQSliderPositionPositionQSliderLTidsgrns fr ntverkstgrd verstegsNetwork operation timed outQSocks5SocketEngine MindreLessQSpinBoxMerMoreQSpinBox AvbrytCancelQSql2Avbryt dina redigeringar?Cancel your edits?QSqlBekrftaConfirmQSqlTa bortDeleteQSql&Ta bort denna post?Delete this record?QSql InfogaInsertQSqlNejNoQSql&Spara redigeringar? Save edits?QSqlUppdateraUpdateQSqlJaYesQSql6Kunde inte ppna anslutningUnable to open connection QTDSDriver8Kunde inte anvnda databasenUnable to use database QTDSDriverRulla vnster Scroll LeftQTabBarRulla hger Scroll RightQTabBar&Kopiera&Copy QTextControlKlistra &in&Paste QTextControl&Gr om&Redo QTextControl &ngra&Undo QTextControl$Kopiera &lnkplatsCopy &Link Location QTextControlKlipp u&tCu&t QTextControlTa bortDelete QTextControlMarkera alla Select All QTextControl ppnaOpen QToolButton TryckPress QToolButtonHDenna plattform saknar std fr IPv6#This platform does not support IPv6 QUdpSocket Gr omRedo QUndoGroup ngraUndo QUndoGroup <tom> QUndoModel Gr omRedo QUndoStack ngraUndo QUndoStack:Infoga unicode-kontrolltecken Insert Unicode control characterQUnicodeControlCharacterMenu U+202A$LRE Start of left-to-right embeddingQUnicodeControlCharacterMenu U+200ELRM Left-to-right markQUnicodeControlCharacterMenu U+202D#LRO Start of left-to-right overrideQUnicodeControlCharacterMenu U+202CPDF Pop directional formattingQUnicodeControlCharacterMenu U+202B$RLE Start of right-to-left embeddingQUnicodeControlCharacterMenu U+200FRLM Right-to-left markQUnicodeControlCharacterMenu U+202E#RLO Start of right-to-left overrideQUnicodeControlCharacterMenu U+200DZWJ Zero width joinerQUnicodeControlCharacterMenu U+200CZWNJ Zero width non-joinerQUnicodeControlCharacterMenu U+200BZWSP Zero width spaceQUnicodeControlCharacterMenuNederkantBottomQWebPageIgnoreraIgnoreQWebPageIgnorera Ignore Grammar context menu itemIgnoreQWebPageVnsterkant Left edgeQWebPageSida nedt Page downQWebPageSida vnster Page leftQWebPageSida hger Page rightQWebPageSida upptPage upQWebPageterstllResetQWebPageHgerkant Right edgeQWebPageRulla nedt Scroll downQWebPageRulla hr Scroll hereQWebPageRulla vnster Scroll leftQWebPageRulla hger Scroll rightQWebPageRulla uppt Scroll upQWebPage StoppaStopQWebPageverkantTopQWebPage OkntUnknownQWebPageVad r det hr? What's This?QWhatsThisAction**QWidget&Frdig&FinishQWizard &Hjlp&HelpQWizard&Nsta >&Next >QWizard< Till&baka< &BackQWizard AvbrytCancelQWizard HjlpHelpQWizard%1 - [%2] %1 - [%2] QWorkspace &Stng&Close QWorkspace&Flytta&Move QWorkspacete&rstll&Restore QWorkspace&Storlek&Size QWorkspaceA&vskugga&Unshade QWorkspace StngClose QWorkspaceMa&ximera Ma&ximize QWorkspaceMi&nimera Mi&nimize QWorkspaceMinimeraMinimize QWorkspaceterstll nedt Restore Down QWorkspaceSkugg&aSh&ade QWorkspace&Stanna kvar vers&t Stay on &Top QWorkspacekodningsdeklarering eller fristende deklarering frvntades vid lsning av XML-deklareringenYencoding declaration or standalone declaration expected while reading the XML declarationQXmlXfel i textdeklareringen av en extern entitet3error in the text declaration of an external entityQXmlPfel intrffade vid tolkning av kommentar$error occurred while parsing commentQXmlNfel intrffade vid tolkning av innehll$error occurred while parsing contentQXmljfel intrffade vid tolkning av dokumenttypsdefinition5error occurred while parsing document type definitionQXmlLfel intrffade vid tolkning av element$error occurred while parsing elementQXmlNfel intrffade vid tolkning av referens&error occurred while parsing referenceQXml2fel utlstes av konsumenterror triggered by consumerQXmlpextern tolkad allmn entitetsreferens tillts inte i DTD;external parsed general entity reference not allowed in DTDQXmlextern tolkad allmn entitetsreferens tillts inte i attributvrdeGexternal parsed general entity reference not allowed in attribute valueQXmlbintern allmn entitetsreferens tillts inte i DTD4internal general entity reference not allowed in DTDQXmlPogiltigt namn fr behandlingsinstruktion'invalid name for processing instructionQXml&bokstav frvntadesletter is expectedQXmlBfler n en dokumenttypsdefinition&more than one document type definitionQXml&inga fel intrffadeno error occurredQXml&rekursiva entiteterrecursive entitiesQXmlfristende deklarering frvntades vid lsning av XML-deklareringAstandalone declaration expected while reading the XML declarationQXml"tagg stmmer inte tag mismatchQXmlovntat teckenunexpected characterQXml*ovntat slut p filenunexpected end of fileQXmlRotolkad entitetsreferens i fel sammanhang*unparsed entity reference in wrong contextQXmlhversion frvntades vid lsning av XML-deklareringen2version expected while reading the XML declarationQXmlHfel vrde fr fristende deklarering&wrong value for standalone declarationQXmlx2goclient-4.1.2.3/res/i18n/qt_zh_tw.qm0000644000000000000000000034501014447111613014376 0ustar J``^yQ X0ee;deKįįT y0~^u Q93A(4G(4G(5H(5H;*y|*yr*yh*TR*0'*0+F}l+F+L2+f+f@+z.++s++z.++6+Ae+R+}+v+į +įsE+į+/7v:9;*@ƿC:F0iFn4Fn4IG7&Hw9Hw97TH 3I'KI-;ItJ+=J6J606J67J6;J6~<J6J6J6Jcb$KQ bKD.LZ L L0]LbM5;MbLMeEMgNM:O|/PFE!PFE]PFEqQNROR|fRO;S8^TTʴTZU?^,U|4U}PV1V1¹VlVV VXVPJW0WT8WTWTX~X9X X˙9XYP{YYoYGZgZkpZQi[;^d\ʼn\]4\]4\\at%gclG|^>cBv5v|$fX/4L5.96CL?IA[9@Inyɵn1ɵneɵniuɵnxɵnɵnɵnpɵnu(Z\ Bt* 'F TMKEna\/q >^6H,<!p#5.#QE%UT~(ŎH*4C-ct25v}kacPG~$~P hVly @Gt=$h$Lt+79(ʁYr^K K֊0 nz=,f `;yO-SKAķnKn7^k=Z&Hf."/fP?=IxS-M"R>+YMUYM[^R<h^#8i&psscs-wUUxK[/^rt2>:.ۊ/at.;NY]ϛ]YIIII7II.IIQYރi޵y݉ݻ%WIK}߯uDWuD^CDo, ,s,ڕ,,]`=}rkɘe^5$ZfRfREG>:d7_~FN3F?Mc%SOPqYV8VfR@ . N  |t jd$%C#g&~N&3)2nG)8*4M+,?"y?>u #JA/KN#MwR(V|O]e+]hdI,gBky^! {yi5t ]FFg:ΞVOG%Sn<ص.ǥ+G6<tH{y/;QxAQr.9\QsQ;#ϾN%-b{I]C-*5pC^^ƨ ~ƨ˾i/eҝz=iէ?Z>*z>ߺei=fvq.m}^9! "${~bE~bJsoMm!h )ўR+u\+3R,8//144~6 ? 2=AVD#[GTGbILAUgOr$Pѧ7Q]SnhTyUkU=UTdZٔZZZ[]k*E]80^n_peiXi^~kQ+oN'9y;y"{}u+}w}w}w }* lRr"B>}vtt8..3>VPȞiUaDDGYuLt(@t[tR2$-n._ +5F{C]ʢ3ʢEƴd4 d{Yddd0 59gэŵ+b&NSOUd8B hwkp 2Y ? g'V|y+_,D /42<42c%6X7D!:sg?;5CU])D iIN;J0KK U|7V7O\ar̘twL|(^ | |}wZ}$а}$Q}$ ϗ/Z[VN_ DaaL>YlNqmK<8f+·҈·ý4p׳: /]K/UESHhxvu:%5JT m e~QGi~i9%nwb/#,%''s-.z.)#5kEɱ=Q=?t?x CtILPPBV%uXU DZi[`ӣ`NvbDDbGoAfDOfdgAhIN3i$x1 fz*2D|QRTdJx9lU(.J5z=Mc.`%1YrXmTU^en$M<>b_†5iKC:Hʴ5}ʴ5Cʶ/^ cԄ۔#VDA'Nmd-F5!ZF5~Ypb+>BIIDAs 3 }$|5 qeZ ڤ' ڥk d Ey E  Ac AcG0 U 35 u bÛ bb{ b`2 b` gUv] i3% la lfo uul xq$! |oT |m Jć t$ tF .&  a )N F>. > (~   B ҉D >΅  \ j z nw Ns s Y+Z K % 팤a l~? %' E /32 =# qP y }( o> 9X )b */ .>wb 5`C 7u ;p =S BU BnFz J" J"e K2M Rۮ"/ Ty w T^إ Uj4tz ] `es ` bu b c( cEv d e eEQ e{֫ f1V f* g5UT gn- k, rD"- t>n :. f 5 f B 4g5 .R( X ss sC AAY+ 9 8$ 9|  m, #-t 0N+ 5 A/ CUR E9T I` L L' La Mc\:} R_ ShR Vk W ]$2n f)s f)BR f= io>!u m`" w xR1: yr5W >S  tx H HA. *D nF $C .@ 7 i c  s % J JC %C t. k Ӈ MS  N>o ̺SZ &n -DT .r5 ۷l c>J rO k k U)^  <! Ԥ E 0B  ~  z+  W  ^ IMe %RU Nq   xHa w :@  .. 7F >Yr >Z' >Z >a0 >l >r >P > ?t| DT Q I- P@  RVGt RV RVE S.Q SGG Sz Y YY [ c`g( hۮM j7o? p.A vu 5 .˻ Bi  T1 Tx T/ T  j 3= M S )d Tv  ;>z .2% .f .yj . . .Ϳ  $ v a y! p e.BE hNq >ZY ҂&9  % u : |f mb  Xt n 9 t ab @ :b_; Uqw s O.> ʜ,  ^ #$ #= %nr (I$ (N2j +>/P +k 0E 64- ;ɾ1 Fg K9B Pt$ Pt; T>T W I dBh_ fe fe gQ iFC۵ iE& i jӮ kGn m9 n)z u u v o v& v{E wP w w $ w}Ѐ w}$ w} R |[-_  U [ %r Jc ^N }q R PU  xN Uu ɰe F}\ ) XH &- D Fu + t5~ t5 E? b >   ) "R!w| @agT)k]oC*gT)6*(*/E(/E_=BnI__KiOOvXRu3X6[ [ a.8Ta.1gcnyG,ivɅy$ʡ~`>Heo]4x&nb'A47Sk^[Ǘ 2:B&rsݖ[y8^{r | C_G5+lD'"#=$Ua%4:%4I-vI0i)01c2wT<U<(_D#HJd`nKcK#j8L$.Wcc5:c5 g3iCmhGpyC$+{~az6$Y5 O&&{kE`nTd[#>V(_C>b@N?h E"~LfGr)=r kyLn~BPXt2,xW&,dUi>l<html>eHde>n <b>%1</b> ]SOu( Vpg Q*QHk Vkd\RcR0rn0</html>xSwitching to the audio playback device %1
which just became available and has higher preference. AudioOutputr<html>eHde>n <b>%1</b> g*KO\0<br/>e9u(-n <b>%2</b>0</html>^The audio playback device %1 does not work.
Falling back to %2. AudioOutputV_R0n %1Revert back to device '%1' AudioOutputܕR Close Tab CloseButton e %1About %1MAC_APPLICATION_MENU%1Hide %1MAC_APPLICATION_MENUQvN Hide OthersMAC_APPLICATION_MENU POY}-["Preferences...MAC_APPLICATION_MENU }Pg_ %1Quit %1MAC_APPLICATION_MENUg RServicesMAC_APPLICATION_MENUoy:QhShow AllMAC_APPLICATION_MENURn AccessibilityPhonon::  CommunicationPhonon::Jb2GamesPhonon::jMusicPhonon::w NotificationsPhonon::_qPVideoPhonon::dfTJ`Slg [ GStreamer Ycz _0 b@g eH_qPe/c\ܕ0~Warning: You do not seem to have the base GStreamer plugins installed. All audio and video support has been disabledPhonon::Gstreamer::BackendzfTJ`Slg [ gstreamer0.10-plugins-good0 g N_qPvR\ܕ0Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. Some video features have been disabled.Phonon::Gstreamer::BackendkdQg[%0`A required codec is missing. You need to install the following codec(s) to play this content: %0Phonon::Gstreamer::MediaObjectq!lՕYde>0 jg`v Gstreamer [ N&x[`g [ libgstreamer-plugins-base YWN0wCannot start playback. Check your Gstreamer installation and make sure you have libgstreamer-plugins-base installed.Phonon::Gstreamer::MediaObjectq!lՉxZOn0Could not decode media source.Phonon::Gstreamer::MediaObjectq!l[OMZOn0Could not locate media source.Phonon::Gstreamer::MediaObject"q!lՕU_eHn0n]W(Ou(N-0:Could not open audio device. The device is already in use.Phonon::Gstreamer::MediaObjectq!lՕU_ZOn0Could not open media source.Phonon::Gstreamer::MediaObjectN TlvOnWaK0Invalid source type.Phonon::Gstreamer::MediaObjectBOu(kdnRVhOet0g]搊vOMnp 0% gSvp %1%0WUse this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1%Phonon::VolumeSlider %1% Volume: %1%Phonon::VolumeSlider%1 %2 g*[%1, %2 not definedQ3AccelN fxv %1 \g*UtAmbiguous %1 not handledQ3AccelR*dDelete Q3DataTablePGFalse Q3DataTablecQeInsert Q3DataTablewTrue Q3DataTablefeUpdate Q3DataTable&%1 b~N R0jhH0 jg_jT 0+%1 File not found. Check path and filename. Q3FileDialog R*d(&D)&Delete Q3FileDialog T&(&N)&No Q3FileDialog x[(&O)&OK Q3FileDialog U_(&O)&Open Q3FileDialogeT}T (&R)&Rename Q3FileDialog Q2[X(&S)&Save Q3FileDialogg*c^(&U) &Unsorted Q3FileDialog f/(&Y)&Yes Q3FileDialog4<qt>`x[R*d %1 "%2" U</qt>1Are you sure you wish to delete %1 "%2"? Q3FileDialogb@g jhH (*) All Files (*) Q3FileDialogb@g jhH (*.*)All Files (*.*) Q3FileDialog\l`' Attributes Q3FileDialogVBack Q3FileDialogSmCancel Q3FileDialogbyRjhHCopy or Move a File Q3FileDialog ^zeeY>Create New Folder Q3FileDialogegDate Q3FileDialog R*d %1 Delete %1 Q3FileDialogs}0j Detail View Q3FileDialogvDir Q3FileDialogv Directories Q3FileDialogv Directory: Q3FileDialog/Error Q3FileDialogjhHFile Q3FileDialogjT (&N) File &name: Q3FileDialogjhHWaK(&T) File &type: Q3FileDialog\ b~vFind Directory Q3FileDialogq!l[XS Inaccessible Q3FileDialogRhj List View Q3FileDialog\ b~e(&I) Look &in: Q3FileDialogT z1Name Q3FileDialogeeY> New Folder Q3FileDialogeeY> %1 New Folder %1 Q3FileDialog eeY> 1 New Folder 1 Q3FileDialog _N N\dvOne directory up Q3FileDialogU_Open Q3FileDialogU_ Open  Q3FileDialog jhHQg[Preview File Contents Q3FileDialog jhHNJ Preview File Info Q3FileDialoge Qe(&E)R&eload Q3FileDialogU/ Read-only Q3FileDialogS[ Read-write Q3FileDialog S%1Read: %1 Q3FileDialogS[XejSave As Q3FileDialogːxdNP vSelect a Directory Q3FileDialogoy:j(&H)Show &hidden files Q3FileDialogY'\Size Q3FileDialogc^Sort Q3FileDialogOegc^(&D) Sort by &Date Q3FileDialogOT z1c^(&N) Sort by &Name Q3FileDialogOY'\c^(&S) Sort by &Size Q3FileDialogryk{Special Q3FileDialogR0vv{&_#}PSymlink to Directory Q3FileDialogR0jhHv{&_#}PSymlink to File Q3FileDialogR0ryk{v{&_#}PSymlink to Special Q3FileDialogWaKType Q3FileDialogU/[ Write-only Q3FileDialog [Qe%1 Write: %1 Q3FileDialogkdv the directory Q3FileDialogkdjhHthe file Q3FileDialog kd{&_#}P the symlink Q3FileDialogq!l^zv %1Could not create directory %1 Q3LocalFsq!lՕU_ %1Could not open %1 Q3LocalFsq!lՋSv %1Could not read directory %1 Q3LocalFsq!lydv %1%Could not remove file or directory %1 Q3LocalFsq!l\ %1 eT}T p %2Could not rename %1 to %2 Q3LocalFsq!l[Qe %1Could not write %1 Q3LocalFs ... Customize... Q3MainWindowcRLine up Q3MainWindowOu(]N-kbdO\Operation stopped by the userQ3NetworkProtocolSmCancelQ3ProgressDialogYWu(Apply Q3TabDialogSmCancel Q3TabDialog-Defaults Q3TabDialogfHelp Q3TabDialogx[OK Q3TabDialog (&C)&Copy Q3TextEdit N (&P)&Paste Q3TextEdit PZ(&R)&Redo Q3TextEdit _S(&U)&Undo Q3TextEditndClear Q3TextEdit RjN (&T)Cu&t Q3TextEditQhxd Select All Q3TextEditܕClose Q3TitleBarܕzCloses the window Q3TitleBarST+dO\kdzvcN*Contains commands to manipulate the window Q3TitleBar$oy:zT z1 N&ST+dO\[vcR6QCNFDisplays the name of the window and contains controls to manipulate it Q3TitleBar\ze>Y'R0QhukbMakes the window full screen Q3TitleBargY'SMaximize Q3TitleBarg\SMinimize Q3TitleBar bzyMoves the window out of the way Q3TitleBar\gY'Sze>VSY'\&Puts a maximized window back to normal Q3TitleBar\g\Sze>VSY'\Puts a minimized back to normal Q3TitleBarTN `b_ Restore down Q3TitleBarTN `b_ Restore up Q3TitleBar|}qSystem Q3TitleBar fY...More... Q3ToolBarg*w  (unknown) Q3UrlOperator&ST[ %1 g*e/cbyRjhHbvIThe protocol `%1' does not support copying or moving files or directories Q3UrlOperatorST[ %1 g*e/c^zev;The protocol `%1' does not support creating new directories Q3UrlOperatorST[ %1 g*e/cS_jhH0The protocol `%1' does not support getting files Q3UrlOperatorST[ %1 g*e/cRQv6The protocol `%1' does not support listing directories Q3UrlOperatorST[ %1 g*e/c[QejhH0The protocol `%1' does not support putting files Q3UrlOperator ST[ %1 g*e/cydjhHbv@The protocol `%1' does not support removing files or directories Q3UrlOperator$ST[ %1 g*e/ceT}T jhHbv@The protocol `%1' does not support renaming files or directories Q3UrlOperatorST[ %1 g*e/c"The protocol `%1' is not supported Q3UrlOperator Sm(&C)&CancelQ3Wizard [b(&F)&FinishQ3Wizard f(&H)&HelpQ3WizardN NP (&N)&Next >Q3WizardV(&B)< &BackQ3Wizard#}ڈbConnection refusedQAbstractSocket#}ڐ>fBConnection timed outQAbstractSocket b~N R0N;j_Host not foundQAbstractSocket q!lOu(}Network unreachableQAbstractSocketSocket vdO\g*e/c$Operation on socket is not supportedQAbstractSocketSocket g*#}Socket is not connectedQAbstractSocketSocket dO\>fBSocket operation timed outQAbstractSocketQhxd(&S) &Select AllQAbstractSpinBoxUkeTN (&S)&Step upQAbstractSpinBoxUkeTN (&D) Step &downQAbstractSpinBoxU_RActivate QApplicationU_Rz _vN;z#Activates the program's main window QApplication6WLj %1 Qt %2 OFSb~R0 Qt %30,Executable '%1' requires Qt %2, found Qt %3. QApplicationQt Q_^N v[v/Incompatible Qt Library Error QApplication Sm(&C)&Cancel QAxSelectCOM riN(&O) COM &Object: QAxSelectx[OK QAxSelectxd ActiveX cR6Select ActiveX Control QAxSelectRxCheck QCheckBoxRcToggle QCheckBoxSmRxUncheck QCheckBoxeXR0Or(&A)&Add to Custom Colors QColorDialogWg,Or(&B) &Basic colors QColorDialogOr(&C)&Custom colors QColorDialog }(&G)&Green: QColorDialog }(&R)&Red: QColorDialogT^(&S)&Sat: QColorDialogN^(&V)&Val: QColorDialogAlpha r;(&L)A&lpha channel: QColorDialog (&U)Bl&ue: QColorDialogr(&E)Hu&e: QColorDialogxdǘOr Select Color QColorDialogܕClose QComboBoxPGFalse QComboBoxU_Open QComboBoxwTrue QComboBox%1ftok Y1eW%1: ftok failedQCoreApplication%1uP(&N) &New Folder QFileDialog U_(&O)&Open QFileDialogeT}T (&R)&Rename QFileDialog Q2[X(&S)&Save QFileDialog&%1 g [QeO݋w0 `x[R*d[U9'%1' is write protected. Do you want to delete it anyway? QFileDialogb@g jhH (*) All Files (*) QFileDialogb@g jhH (*.*)All Files (*.*) QFileDialog`x[R*d %1 U!Are sure you want to delete '%1'? QFileDialogVBack QFileDialogq!lR*dv0Could not delete directory. QFileDialog ^zeeY>Create New Folder QFileDialogs}0j Detail View QFileDialogv Directories QFileDialogv Directory: QFileDialogxxDrive QFileDialogjhHFile QFileDialogjT (&N) File &name: QFileDialog jhHWaKFiles of type: QFileDialog\ b~vFind Directory QFileDialog_RMForward QFileDialogRhj List View QFileDialog\ b~eLook in: QFileDialogbvf My Computer QFileDialogeeY> New Folder QFileDialogU_Open QFileDialogr6vParent Directory QFileDialog gvW0e Recent Places QFileDialogydRemove QFileDialogS[XejSave As QFileDialogoy: Show  QFileDialogoy:j(&H)Show &hidden files QFileDialogg*wUnknown QFileDialog %1 GB%1 GBQFileSystemModel %1 KB%1 KBQFileSystemModel %1 MB%1 MBQFileSystemModel %1 TB%1 TBQFileSystemModel %1 OMQC}D%1 bytesQFileSystemModel^<b>q!lOu(T z1 "%1"0</b><p>Ou(Qv[T z1 [WQCex\N bf/N g j{&_0oThe name "%1" can not be used.

Try using another name, with fewer characters or no punctuations marks.QFileSystemModelfComputerQFileSystemModelfeg Date ModifiedQFileSystemModel N TlvjT Invalid filenameQFileSystemModelz.^KindQFileSystemModelbvf My ComputerQFileSystemModelT z1NameQFileSystemModelY'\SizeQFileSystemModelWaKTypeQFileSystemModelNOUAny QFontDatabase?bO/Arabic QFontDatabaseN\Tamil QFontDatabase TeluguTelugu QFontDatabase ThaanaThaana QFontDatabaselThai QFontDatabaseTibetan QFontDatabase~AN-eTraditional Chinese QFontDatabaseSW Vietnamese QFontDatabase [WW(&F)&Font QFontDialog Y'\(&S)&Size QFontDialog ^}(&U) &Underline QFontDialogeHgEffects QFontDialog[WWj#_(&Y) Font st&yle QFontDialog{OSample QFontDialogxd[WW Select Font QFontDialogR*d}(&K) Stri&keout QFontDialog[Qe|}q(&I)Wr&iting System QFontDialogfvfBY1eW %1Changing directory failed: %1QFtp ]#}R0N;j_Connected to hostQFtp]#cR0N;j_ %1Connected to host %1QFtp#}R0N;j_Y1eW %1Connecting to host failed: %1QFtp #}]ܕConnection closedQFtp e#}ڈb&Connection refused for data connectionQFtp#}R0N;j_ %1 bConnection refused to host %1QFtp#}R0N;j_ %1 >fBConnection timed out to host %1QFtpR0 %1 v#}]ܕConnection to %1 closedQFtp^zvfBY1eW %1Creating directory failed: %1QFtpN jhHfBY1eW %1Downloading file failed: %1QFtpb~R0N;j_ %1 Host %1 foundQFtpb~N R0N;j_ %1Host %1 not foundQFtpb~R0N;j_ Host foundQFtpRQvfBY1eW %1Listing directory failed: %1QFtpv{QeY1eW %1Login failed: %1QFtpg*#} Not connectedQFtpydvfBY1eW %1Removing directory failed: %1QFtpydjhHfBY1eW %1Removing file failed: %1QFtp g*wv/ Unknown errorQFtpN PjhHfBY1eW %1Uploading file failed: %1QFtpLTRQT_LAYOUT_DIRECTIONQGuiApplication g*wv/ Unknown error QHostInfo b~N R0N;j_Host not foundQHostInfoAgentg*wvOMW@WaKUnknown address typeQHostInfoAgent g*wv/ Unknown errorQHostInfoAgentIAuthentication requiredQHttp ]#}R0N;j_Connected to hostQHttp]#cR0N;j_ %1Connected to host %1QHttp #}]ܕConnection closedQHttp#}ڈbConnection refusedQHttp#}ڈbb#}ڐ>fB !Connection refused (or timed out)QHttpR0 %1 v#}]ܕConnection to %1 closedQHttp e]d kData corruptedQHttp[QeVaR0nfBv|u/ Error writing response to deviceQHttpHTTP lBY1eWHTTP request failedQHttp0HTTPS #}ڗv SSL e/cN&g*}o2O:HTTPS connection requested but SSL support not compiled inQHttpb~R0N;j_ %1 Host %1 foundQHttpb~N R0N;j_ %1Host %1 not foundQHttpb~R0N;j_ Host foundQHttp N;j_IHost requires authenticationQHttpN Tlv HTTP S@XJN;Invalid HTTP chunked bodyQHttpN Tlv HTTP Vމj-Invalid HTTP response headerQHttplg -[#}R0TP O:g VhNo server set to connect toQHttpNtO:g VhIProxy authentication requiredQHttpNtO:g VhIProxy requires authenticationQHttplBN-kbRequest abortedQHttpSSL nY1eWSSL handshake failedQHttpO:g Vhq!fܕ#}%Server closed connection unexpectedlyQHttp g*wv/ Unknown errorQHttpc[Ng*wvST[Unknown protocol specifiedQHttp/vQg[w^Wrong content lengthQHttpIAuthentication requiredQHttpSocketEngine$g*_NtO:g Vhce6R0 HTTP Va(Did not receive HTTP response from proxyQHttpSocketEngine& HTTP NtO:g Vho~kfBv|u/#Error communicating with HTTP proxyQHttpSocketEngine(RVg_NtO:g VhPOvIlBfBv|u//Error parsing authentication request from proxyQHttpSocketEngineNtO:g Vh#}]N kc^8ܕ#Proxy connection closed prematurelyQHttpSocketEngineNtO:g Vh#}ڈbProxy connection refusedQHttpSocketEngineNtO:g Vhb}U#}Proxy denied connectionQHttpSocketEngineNtO:g Vh#}ڐ>fB!Proxy server connection timed outQHttpSocketEngineb~N R0NtO:g VhProxy server not foundQHttpSocketEngine q!lՕYNRCould not start transaction QIBaseDriverU_e^v|u/Error opening database QIBaseDriver q!lcNNRUnable to commit transaction QIBaseDriver q!lS͏INRUnable to rollback transaction QIBaseDriver q!lՑMneXCould not allocate statement QIBaseResultq!lcϏ8QeeX"Could not describe input statement QIBaseResult q!lcϏeXCould not describe statement QIBaseResultq!lbSN NP vCould not fetch next item QIBaseResult b~N R0cRCould not find array QIBaseResultq!lS_cReCould not get array data QIBaseResultq!lS_gbNJ Could not get query info QIBaseResultq!lS_eXNJ Could not get statement info QIBaseResult q!lnPeXCould not prepare statement QIBaseResult q!lՕYNRCould not start transaction QIBaseResult q!lՕܕeXUnable to close statement QIBaseResult q!lcNNRUnable to commit transaction QIBaseResultq!l^z BLOBUnable to create BLOB QIBaseResult q!lWLgbUnable to execute query QIBaseResultq!lՕU_ BLOBUnable to open BLOB QIBaseResultq!lՋS BLOBUnable to read BLOB QIBaseResultq!l[Qe BLOBUnable to write BLOB QIBaseResultnN ]q!zzNo space left on device QIODeviceb~N R0rjhHbvNo such file or directory QIODevicek PN Permission denied QIODevice U_NYjhHToo many open files QIODevice g*wv/ Unknown error QIODeviceMac OS X 8QelMac OS X input method QInputContextWindows 8QelWindows input method QInputContextXIMXIM QInputContextXIM 8QelXIM input method QInputContext ˏ8QeP<Enter a value: QInputDialogq!lՏ QeQ_^ %1%2Cannot load library %1: %2QLibrary$q!lS͉ %2 Qgv{&_ %1%3$Cannot resolve symbol "%1" in %2: %3QLibraryq!lSx Q_^ %1%2Cannot unload library %1: %2QLibraryq!l mmap '%1'%2Could not mmap '%1': %2QLibrary q!l unmap '%1'%2Could not unmap '%1': %2QLibrary$W( %1 N-vYcz _xeN {&T)Plugin verification data mismatch in '%1'QLibrary(jhH %1 N f/Tlv Qt Ycz _0'The file '%1' is not a valid Qt plugin.QLibraryFYcz _ %1 Ou(N v[v Qt Q_^%2.%3.%4 0%50=The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5]QLibraryTYcz _ %1 Ou(N v[v Qt Q_^0N \d/QrHvQ_^mW(Nw0 WThe plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.)QLibraryJYcz _ %1 Ou(N v[v Qt Q_^0g^i˔p %2 S{_R0 %3OThe plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3"QLibraryb~N R0RNQ_^!The shared library was not found.QLibrary g*wv/ Unknown errorQLibrary (&C)&Copy QLineEdit N (&P)&Paste QLineEdit PZ(&R)&Redo QLineEdit _S(&U)&Undo QLineEdit RjN (&T)Cu&t QLineEditR*dDelete QLineEditQhxd Select All QLineEdit%1OMW@Ou(N-%1: Address in use QLocalServer%1T z1/%1: Name error QLocalServer%1[XSֈb%1: Permission denied QLocalServer%1g*wv/ %2%1: Unknown error %2 QLocalServer%1#}ړ/%1: Connection error QLocalSocket%1#}ڈb%1: Connection refused QLocalSocket%1eSNY'%1: Datagram too large QLocalSocket%1N TlvT z1%1: Invalid name QLocalSocket%1`z]ܕ%1: Remote closed QLocalSocket%1Socket OMW@/%1: Socket access error QLocalSocket%1Socket dO\>fB%1: Socket operation timed out QLocalSocket%1Socket n/%1: Socket resource error QLocalSocket%1socket dO\g*e/c)%1: The socket operation is not supported QLocalSocket%1g*wv/%1: Unknown error QLocalSocket%1g*wv/ %2%1: Unknown error %2 QLocalSocket q!lՕYNRUnable to begin transaction QMYSQLDriver q!lcNNRUnable to commit transaction QMYSQLDriverq!lՐ#}Unable to connect QMYSQLDriverq!lՕU_e^Unable to open database ' QMYSQLDriver q!lS͏INRUnable to rollback transaction QMYSQLDriverq!l}PT8QP<Unable to bind outvalues QMYSQLResult q!l}PTexP<Unable to bind value QMYSQLResultq!lWLN NP gbUnable to execute next query QMYSQLResult q!lWLgbUnable to execute query QMYSQLResult q!lWLeXUnable to execute statement QMYSQLResult q!lbS֌eUnable to fetch data QMYSQLResult q!lnPeXUnable to prepare statement QMYSQLResult q!lՑneXUnable to reset statement QMYSQLResultq!lQ2[XN NP }PgUnable to store next result QMYSQLResult q!lQ2[X}PgUnable to store result QMYSQLResultq!lQ2[XeX}Pg!Unable to store statement results QMYSQLResult g*T}T  (Untitled)QMdiArea%1 - [%2] %1 - [%2] QMdiSubWindow ܕ(&C)&Close QMdiSubWindow yR(&M)&Move QMdiSubWindow V_(&R)&Restore QMdiSubWindow Y'\(&S)&Size QMdiSubWindow - [%1]- [%1] QMdiSubWindowܕClose QMdiSubWindowfHelp QMdiSubWindowgY'S(&X) Ma&ximize QMdiSubWindowgY'SMaximize QMdiSubWindowxUMenu QMdiSubWindowg\S(&N) Mi&nimize QMdiSubWindowg\SMinimize QMdiSubWindowV_Restore QMdiSubWindowTN `b_ Restore Down QMdiSubWindown=Shade QMdiSubWindowuYW(z(&T) Stay on &Top QMdiSubWindowSmn=Unshade QMdiSubWindowܕCloseQMenuWLExecuteQMenuU_OpenQMenu e QtAbout Qt QMessageBoxfHelp QMessageBoxϊs`...Hide Details... QMessageBoxx[OK QMessageBoxoy:s`...Show Details... QMessageBox xdǏ8Qel Select IMQMultiInputContextY͏8QelRcVhMultiple input method switcherQMultiInputContextPlugin*Ou(e[WQCNN-vQgexUvY͏8QelRcVhMMultiple input method switcher that uses the context menu of the text widgetsQMultiInputContextPlugin,SNP socket ]}W(v}T NP #cW4Another socket is already listening on the same portQNativeSocketEngine>fWW(lg IPv6 e/cv^sSN Ou( IPv6 socket=Attempt to use IPv6 socket on a platform with no IPv6 supportQNativeSocketEngine#}ڈbConnection refusedQNativeSocketEngine#}ڐ>fBConnection timed outQNativeSocketEngineeNY'q!lՐQDatagram was too large to sendQNativeSocketEngineq!lՐ#}R0N;j_Host unreachableQNativeSocketEngineN Tlv socket cϏ[PInvalid socket descriptorQNativeSocketEngine}/ Network errorQNativeSocketEngine }dO\>fBNetwork operation timed outQNativeSocketEngine q!lOu(}Network unreachableQNativeSocketEngine\ ^ socket dO\Operation on non-socketQNativeSocketEnginenN Out of resourcesQNativeSocketEnginek PN Permission deniedQNativeSocketEngineST[WaKg*e/cProtocol type not supportedQNativeSocketEngine q!lS_OMW@The address is not availableQNativeSocketEnginekdOMW@]O݋wThe address is protectedQNativeSocketEngine}PTvOMW@]}W(Ou(N-#The bound address is already in useQNativeSocketEngineNtO:g VhWaKq!le/ckddO\,The proxy type is invalid for this operationQNativeSocketEngine`zN;j_ܕN#}%The remote host closed the connectionQNativeSocketEngineq!lRYS^d socket%Unable to initialize broadcast socketQNativeSocketEngine q!lRYS^;d`' socket(Unable to initialize non-blocking socketQNativeSocketEngine q!lce6 `oUnable to receive a messageQNativeSocketEngine q!lՐQ `oUnable to send a messageQNativeSocketEngineq!l[QeUnable to writeQNativeSocketEngine g*wv/ Unknown errorQNativeSocketEngineg*e/cv socket dO\Unsupported socket operationQNativeSocketEngineU_ %1 v|u/Error opening %1QNetworkAccessCacheBackend q!lՕU_ %1kd_f/NP v#Cannot open %1: Path is a directoryQNetworkAccessFileBackendU_ %1 v|u/%2Error opening %1: %2QNetworkAccessFileBackend_ %1 S֓/%2Read error reading from %1: %2QNetworkAccessFileBackendlBU_^g,W0zjhH %1%Request for opening non-local file %1QNetworkAccessFileBackend[Qe %1 fBv|u/%2Write error writing to %1: %2QNetworkAccessFileBackendq!lՕU_ %1f/NP vCannot open %1: is a directoryQNetworkAccessFtpBackendN %1 fBv|u/%2Error while downloading %1: %2QNetworkAccessFtpBackendN P %1 fBv|u/%2Error while uploading %1: %2QNetworkAccessFtpBackendv{Qe %1 Y1eWI0Logging in to %1 failed: authentication requiredQNetworkAccessFtpBackendb~N R0TivNtO:g VhNo suitable proxy foundQNetworkAccessFtpBackendb~N R0TivNtO:g VhNo suitable proxy foundQNetworkAccessHttpBackend(N %1 fBv|u/%O:g VhVa%2)Error downloading %1 - server replied: %2 QNetworkReplyg*wvST[ %1Protocol "%1" is unknown QNetworkReplySmdO\Operation canceledQNetworkReplyImpl q!lՕYNRUnable to begin transaction QOCIDriver q!lcNNRUnable to commit transaction QOCIDriver q!lRYSUnable to initialize QOCIDriverq!lv{QeUnable to logon QOCIDriver q!lS͏INRUnable to rollback transaction QOCIDriver q!lՑMneXUnable to alloc statement QOCIResultq!l}PTkOMNPZbyk!WL'Unable to bind column for batch execute QOCIResult q!l}PTexP<Unable to bind value QOCIResultq!lWLbyk!eX!Unable to execute batch statement QOCIResult q!lWLeXUnable to execute statement QOCIResultq!lՍR0N NP Unable to goto next QOCIResult q!lnPeXUnable to prepare statement QOCIResult q!lcNNRUnable to commit transaction QODBCDriverq!lՐ#cUnable to connect QODBCDriver(q!lՐ#c%ERz _q!le/cb@g vRCUnable to connect - Driver doesn't support all needed functionality QODBCDriverq!lՕܕRcNRUnable to disable autocommit QODBCDriverq!lՕU_RcNRUnable to enable autocommit QODBCDriver q!lS͏INRUnable to rollback transaction QODBCDriverQODBCResult::reset: q!lՊ-[ SQL_CURSOR_STATIC PZpeX\l`'0jg`v ODBC ERz _v-[yQODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration QODBCResult q!l}PTexUnable to bind variable QODBCResult q!lWLeXUnable to execute statement QODBCResultq!lbSUnable to fetch QODBCResultq!lbS{,N{FUnable to fetch first QODBCResultq!lbSg_N{FUnable to fetch last QODBCResultq!lbSN N{FUnable to fetch next QODBCResultq!lbSRMN{FUnable to fetch previous QODBCResult q!lnPeXUnable to prepare statement QODBCResultHomeQObjectN Tlv}W@%1Invalid URI: %1QObject g*c[N;j_No host name givenQObjectW( %1 N N e/ckddO\Operation not supported on %1QObject"ST[/ce6R0Y'\p 0 v\S)Protocol error: packet of size 0 receivedQObject_ %1 S֓/%2Read error reading from %1: %2QObject&e %1 N `zN;j_ܕNN kc^8v#}3Remote host closed the connection prematurely on %1QObject&%1 N v|u socket /%2Socket error on %1: %2QObject[Qe %1 fBv|u/%2Write error writing to %1: %2QObjectT z1NameQPPDOptionsModelP<ValueQPPDOptionsModel q!lՕYNRCould not begin transaction QPSQLDriver q!lcNNRCould not commit transaction QPSQLDriver q!lS͏INRCould not rollback transaction QPSQLDriverq!lՐ#}Unable to connect QPSQLDriverq!lՊUnable to subscribe QPSQLDriver q!lSmUnable to unsubscribe QPSQLDriver q!l^zgbUnable to create query QPSQLResult q!lnPeXUnable to prepare statement QPSQLResultQlRCentimeters (cm)QPageSetupWidgethUFormQPageSetupWidget^Height:QPageSetupWidgetT  Inches (in)QPageSetupWidgetjkT LandscapeQPageSetupWidget}MarginsQPageSetupWidgetQlSMillimeters (mm)QPageSetupWidgeteT OrientationQPageSetupWidget }_5Y'\ Page size:QPageSetupWidget}_5PaperQPageSetupWidget }_5On Paper source:QPageSetupWidget Points (pt)QPageSetupWidget~1TPortraitQPageSetupWidgetS^jkTReverse landscapeQPageSetupWidgetS^~1TReverse portraitQPageSetupWidget[^Width:QPageSetupWidgetN } bottom marginQPageSetupWidget]} left marginQPageSetupWidgetS} right marginQPageSetupWidgetN } top marginQPageSetupWidgetYcz _g* Qe0The plugin was not loaded. QPluginLoader g*wv/ Unknown error QPluginLoader%1 ][XW(0 `[[U/%1 already exists. Do you want to overwrite it? QPrintDialog$%1 f/NP v0 ːxdQvNjT 07%1 is a directory. Please choose a different file name. QPrintDialogdO\ (&O) << &Options << QPrintDialogdO\ (&O) >> &Options >> QPrintDialog RSp(&P)&Print QPrintDialog <qt>`[[U</qt>%Do you want to overwrite it? QPrintDialogA0A0 QPrintDialog$A0 (841 x 1189 mm)A0 (841 x 1189 mm) QPrintDialogA1A1 QPrintDialog"A1 (594 x 841 mm)A1 (594 x 841 mm) QPrintDialogA2A2 QPrintDialog"A2 (420 x 594 mm)A2 (420 x 594 mm) QPrintDialogA3A3 QPrintDialog"A3 (297 x 420 mm)A3 (297 x 420 mm) QPrintDialogA4A4 QPrintDialogBA4 (210 x 297 mm, 8.26 x 11.7 T )%A4 (210 x 297 mm, 8.26 x 11.7 inches) QPrintDialogA5A5 QPrintDialog"A5 (148 x 210 mm)A5 (148 x 210 mm) QPrintDialogA6A6 QPrintDialog"A6 (105 x 148 mm)A6 (105 x 148 mm) QPrintDialogA7A7 QPrintDialog A7 (74 x 105 mm)A7 (74 x 105 mm) QPrintDialogA8A8 QPrintDialogA8 (52 x 74 mm)A8 (52 x 74 mm) QPrintDialogA9A9 QPrintDialogA9 (37 x 52 mm)A9 (37 x 52 mm) QPrintDialog R%T %1 Aliases: %1 QPrintDialogB0B0 QPrintDialog&B0 (1000 x 1414 mm)B0 (1000 x 1414 mm) QPrintDialogB1B1 QPrintDialog$B1 (707 x 1000 mm)B1 (707 x 1000 mm) QPrintDialogB10B10 QPrintDialog B10 (31 x 44 mm)B10 (31 x 44 mm) QPrintDialogB2B2 QPrintDialog"B2 (500 x 707 mm)B2 (500 x 707 mm) QPrintDialogB3B3 QPrintDialog"B3 (353 x 500 mm)B3 (353 x 500 mm) QPrintDialogB4B4 QPrintDialog"B4 (250 x 353 mm)B4 (250 x 353 mm) QPrintDialogB5B5 QPrintDialogBB5 (176 x 250 mm, 6.93 x 9.84 T )%B5 (176 x 250 mm, 6.93 x 9.84 inches) QPrintDialogB6B6 QPrintDialog"B6 (125 x 176 mm)B6 (125 x 176 mm) QPrintDialogB7B7 QPrintDialog B7 (88 x 125 mm)B7 (88 x 125 mm) QPrintDialogB8B8 QPrintDialogB8 (62 x 88 mm)B8 (62 x 88 mm) QPrintDialogB9B9 QPrintDialogB9 (44 x 62 mm)B9 (44 x 62 mm) QPrintDialogC5EC5E QPrintDialog$C5E (163 x 229 mm)C5E (163 x 229 mm) QPrintDialogCustom QPrintDialogDLEDLE QPrintDialog$DLE (110 x 220 mm)DLE (110 x 220 mm) QPrintDialogExecutive Executive QPrintDialogJExecutive (7.5 x 10 T , 191 x 254 mm))Executive (7.5 x 10 inches, 191 x 254 mm) QPrintDialog(jhH %1 q!l[Qe0 ːxdQv[jT 0=File %1 is not writable. Please choose a different file name. QPrintDialog jhH][XW( File exists QPrintDialog FolioFolio QPrintDialog"\ (210 x 330 mm)Folio (210 x 330 mm) QPrintDialog LedgerLedger QPrintDialog*Ledger (432 x 279 mm)Ledger (432 x 279 mm) QPrintDialog LegalLegal QPrintDialogBLegal (8.5 x 14 T , 216 x 356 mm)%Legal (8.5 x 14 inches, 216 x 356 mm) QPrintDialog LetterLetter QPrintDialogDLetter (8.5 x 11 T , 216 x 279 mm)&Letter (8.5 x 11 inches, 216 x 279 mm) QPrintDialog g,W0zjhH Local file QPrintDialogx[OK QPrintDialogRSpPrint QPrintDialogRSpR0jhH...Print To File ... QPrintDialogQhRSp Print all QPrintDialogRSp{W  Print range QPrintDialog RSpxdS@Print selection QPrintDialogRSpR0jhHPDF Print to File (PDF) QPrintDialog"RSpR0jhHPostscript Print to File (Postscript) QPrintDialogTabloidTabloid QPrintDialog,Tabloid (279 x 432 mm)Tabloid (279 x 432 mm) QPrintDialogwYexPY'Zoom inQPrintPreviewDialog~.\Zoom outQPrintPreviewDialog2AdvancedQPrintPropertiesWidgethUFormQPrintPropertiesWidgetbPageQPrintPropertiesWidgeth!\ CollateQPrintSettingsOutputOrColorQPrintSettingsOutputOrj!_ Color ModeQPrintSettingsOutputNexCopiesQPrintSettingsOutputNexCopies:QPrintSettingsOutput]RSpDuplex PrintingQPrintSettingsOutputhUFormQPrintSettingsOutputpp GrayscaleQPrintSettingsOutputw Long sideQPrintSettingsOutputq!NoneQPrintSettingsOutputxOptionsQPrintSettingsOutput8Q-[Output SettingsQPrintSettingsOutput c[b_ Pages fromQPrintSettingsOutputQhRSp Print allQPrintSettingsOutputRSp{W  Print rangeQPrintSettingsOutputSTReverseQPrintSettingsOutputxdS@ SelectionQPrintSettingsOutputw퐊 Short sideQPrintSettingsOutputR0toQPrintSettingsOutputT z1(&N)&Name: QPrintWidget...... QPrintWidgethUForm QPrintWidgetOMn Location: QPrintWidget8QjhH(&F) Output &file: QPrintWidget \l`'(&R) P&roperties QPrintWidgetPreview QPrintWidgetSphj_Printer QPrintWidgetWaKType: QPrintWidgetq!lՕU_8Qe\TN勀S,Could not open input redirection for readingQProcessq!lՕU_8Q\TN[Qe-Could not open output redirection for writingQProcess_Lz SfBv|u/Error reading from processQProcess[QeLz fBv|u/Error writing to processQProcess Lz ]])opProcess crashedQProcess U_RՈLz Y1eWProcess failed to startQProcess Lz dO\>fBProcess operation timed outQProcess n/fork Y1eW %1!Resource error (fork failure): %1QProcessSmCancelQProgressDialogU_Open QPushButtonRxCheck QRadioButton/v[WQC^R%lbad char class syntaxQRegExp /v lookahead lbad lookahead syntaxQRegExp/v͉lbad repetition syntaxQRegExpOu(]ܕvRdisabled feature usedQRegExpN TlvQk2OMP<invalid octal valueQRegExp GR0QgPR6met internal limitQRegExp\N]evS@{&missing left delimQRegExp lg v|u/no error occurredQRegExpg*gGR0}P\>unexpected endQRegExpU_e^fBv|u/Error to open databaseQSQLite2Driver q!lՕYNRUnable to begin transactionQSQLite2Driver q!lcNNRUnable to commit transactionQSQLite2Driver q!lS͏INRUnable to rollback TransactionQSQLite2Driver q!lWLeXUnable to execute statementQSQLite2Result q!lbS}PgUnable to fetch resultsQSQLite2Resultܕe^v|u/Error closing database QSQLiteDriverU_e^v|u/Error opening database QSQLiteDriver q!lՕYNRUnable to begin transaction QSQLiteDriver q!lcNNRUnable to commit transaction QSQLiteDriver q!lS͏INRUnable to rollback transaction QSQLiteDriverlg gbNo query QSQLiteResultSexexN {&TParameter count mismatch QSQLiteResult q!l}PTSexUnable to bind parameters QSQLiteResult q!lWLeXUnable to execute statement QSQLiteResult q!lbSRUnable to fetch row QSQLiteResult q!lՑneXUnable to reset statement QSQLiteResult^zBottom QScrollBar]搊} Left edge QScrollBar\ N cR Line down QScrollBar\ N cRLine up QScrollBarbN e Page down QScrollBarb]e Page left QScrollBarbSe Page right QScrollBarbN ePage up QScrollBarOMnPosition QScrollBarS} Right edge QScrollBar_N cr Scroll down QScrollBarW(kdcr Scroll here QScrollBar_]cr Scroll left QScrollBar_Scr Scroll right QScrollBar_N cr Scroll up QScrollBarzTop QScrollBar %1][XW(%1: already exists QSharedMemory%1^zY'\\e 0%1: create size is less then 0 QSharedMemory %1N [XW(%1: doesn't exists QSharedMemory%1ftok Y1eW%1: ftok failed QSharedMemory%1N TlvY'\%1: invalid size QSharedMemory%1uP Media Play QShortcut ZRMNMedia Previous QShortcutZԓ Media Record QShortcutZP\kb Media Stop QShortcutxUMenu QShortcutMetaMeta QShortcutT&No QShortcutex[W[Num Lock QShortcutex[W[NumLock QShortcutex[W[ Number Lock QShortcutU_}W@Open URL QShortcut_N N Page Down QShortcut_N NPage Up QShortcut PausePause QShortcut PgDownPgDown QShortcutPgUpPgUp QShortcut PrintPrint QShortcutRSp^U Print Screen QShortcutR7eRefresh QShortcut ReturnReturn QShortcutSuRight QShortcutcr[ Scroll Lock QShortcutcr[ ScrollLock QShortcutd\ Search QShortcutxdSelect QShortcut ShiftShift QShortcutzzv}uSpace QShortcut_T}Standby QShortcutP\kbStop QShortcut SysReqSysReq QShortcut|}qlB SysRqSystem Request QShortcutTabTab QShortcutTreble Down Treble Down QShortcutTreble Up Treble Up QShortcutN uUp QShortcutϖMON Volume Down QShortcut\ Volume Mute QShortcutcК Volume Up QShortcutf/Yes QShortcutbN e Page downQSliderb]e Page leftQSliderbSe Page rightQSliderbN ePage upQSliderOMnPositionQSliderOMW@WaKg*e/cAddress type not supportedQSocks5SocketEngine$#}g* SOCKSv5 O:g VhQA1(Connection not allowed by SOCKSv5 serverQSocks5SocketEngineNtO:g Vh#}]N kc^8ܕ&Connection to proxy closed prematurelyQSocks5SocketEngineNtO:g Vh#}ڈbConnection to proxy refusedQSocks5SocketEngineNtO:g Vh#}ڐ>fBConnection to proxy timed outQSocks5SocketEngine"N,v SOCKSv5 O:g Vh/General SOCKSv5 server failureQSocks5SocketEngine }dO\>fBNetwork operation timed outQSocks5SocketEngineNtO:g VhIY1eWProxy authentication failedQSocks5SocketEngineNtO:g VhIY1eW%1Proxy authentication failed: %1QSocks5SocketEngineb~N R0NtO:g VhProxy host not foundQSocks5SocketEngineSOCKS 5 vST[/SOCKS version 5 protocol errorQSocks5SocketEngineSOCKSv5 cNg*e/cSOCKSv5 command not supportedQSocks5SocketEngine TTL >fB TTL expiredQSocks5SocketEngine4g*wv SOCKSv5 NtO:g Vh/Nx 0x%1%Unknown SOCKSv5 proxy error code 0x%1QSocks5SocketEngine\LessQSpinBoxfYMoreQSpinBoxSmCancelQSqlSm}/UCancel your edits?QSqlxConfirmQSqlR*dDeleteQSqlR*d{F}UDelete this record?QSqlcQeInsertQSqlT&NoQSqlQ2[X}/NvQg[U Save edits?QSqlfeUpdateQSqlf/YesQSqllg єpq!lcOaI%1,Cannot provide a certificate with no key, %1 QSslSocket$^z SSL QgefBv|u/%1 Error creating SSL context (%1) QSslSocket&^z SSL ]O\kfBv|u/%1Error creating SSL session, %1 QSslSocket&^z SSL ]O\kfBv|u/%1Error creating SSL session: %1 QSslSocketSSL T kefBv|u/%1Error during SSL handshake: %1 QSslSocket Qeg,W0aIfBv|u/%1#Error loading local certificate, %1 QSslSocket QeypfBv|u/%1Error loading private key, %1 QSslSocketSfBv|u/%1Error while reading: %1 QSslSocketN Tlbzzv}vR[nU%1 !Invalid or empty cipher list (%1) QSslSockety[Ƒєpq!lՊIQlєp %1/Private key does not certificate public key, %1 QSslSocketq!l[Qee%1Unable to write data: %1 QSslSocket %1][XW(%1: already existsQSystemSemaphore %1N [XW(%1: does not existQSystemSemaphore%1nN %1: out of resourcesQSystemSemaphore%1[XSֈb%1: permission deniedQSystemSemaphore%1g*wv/ %2%1: unknown error %2QSystemSemaphore q!lՕU_#}Unable to open connection QTDSDriverq!lOu(e^Unable to use database QTDSDriver_]cr Scroll LeftQTabBar_Scr Scroll RightQTabBarSocket vdO\g*e/c$Operation on socket is not supported QTcpServer (&C)&Copy QTextControl N (&P)&Paste QTextControl PZ(&R)&Redo QTextControl _S(&U)&Undo QTextControl#}POMW@(&L)Copy &Link Location QTextControl RjN (&T)Cu&t QTextControlR*dDelete QTextControlQhxd Select All QTextControlU_Open QToolButtonc N Press QToolButtonkd^sSN e/c IPv6#This platform does not support IPv6 QUdpSocketPZRedo QUndoGroup_SUndo QUndoGroupzzv} QUndoModelPZRedo QUndoStack_SUndo QUndoStackcQe,W xcR6[WQC Insert Unicode control characterQUnicodeControlCharacterMenuLRE ]R0S]LQew$LRE Start of left-to-right embeddingQUnicodeControlCharacterMenuLRM ]R0SjLRM Left-to-right markQUnicodeControlCharacterMenuLRO ]R0S[w#LRO Start of left-to-right overrideQUnicodeControlCharacterMenuPDF _HQeTh<_PDF Pop directional formattingQUnicodeControlCharacterMenuRLE SR0]]LQew$RLE Start of right-to-left embeddingQUnicodeControlCharacterMenuRLM SR0]jRLM Right-to-left markQUnicodeControlCharacterMenuRLO SR0]扆[w#RLO Start of right-to-left overrideQUnicodeControlCharacterMenuZWJ [^#cVhZWJ Zero width joinerQUnicodeControlCharacterMenuZWNJ [^^#cVhZWNJ Zero width non-joinerQUnicodeControlCharacterMenuZWSP [^zzv}ZWSP Zero width spaceQUnicodeControlCharacterMenu q!l՘oy:}W@Cannot show URL QWebFrameq!l՘oy: MIME WaKCannot show mimetype QWebFrame jhHN [XW(File does not exist QWebFrame_qPϏ QeVe?{Vf N-e&Frame load interruped by policy change QWebFrame lB]򈫖;dRequest blocked QWebFrame lB]SmRequest cancelled QWebFrame%1%2x%3 P} %1 (%2x%3 pixels)QWebPage %n P jhH %n file(s)QWebPage eXR0[WQxAdd To DictionaryQWebPageN ov HTTP lBBad HTTP requestQWebPage|BoldQWebPage^zBottomQWebPagejgb[WelCheck Grammar With SpellingQWebPagejgb[WCheck SpellingQWebPagebS[WfBzSsjgb[WCheck Spelling While TypingQWebPagexdjhH Choose FileQWebPagendgvd\ Clear recent searchesQWebPageCopyQWebPage_qP Copy ImageQWebPage#}P Copy LinkQWebPageRjN CutQWebPage-DefaultQWebPageR*dR0kdU[Wv}P\>Delete to the end of the wordQWebPageR*dR0kdU[Wvw-Delete to the start of the wordQWebPageeT DirectionQWebPage[WWFontsQWebPage_VGo BackQWebPage_RM Go ForwardQWebPageb[WelHide Spelling and GrammarQWebPage_ueIgnoreQWebPage_ue Ignore Grammar context menu itemIgnoreQWebPagegWInspectQWebPageeItalicQWebPage$JavaScript fTJ % %1JavaScript Alert - %1QWebPage$JavaScript x % %1JavaScript Confirm - %1QWebPage$JavaScript cy: % %1JavaScript Prompt - %1QWebPage]R0SLTRQWebPage]搊} Left edgeQWebPage W([WQxd\ Look Up In DictionaryQWebPageyRn8jR0NP S@XJv}P\>'Move the cursor to the end of the blockQWebPageyRn8jR0NP eNv}P\>*Move the cursor to the end of the documentQWebPageyRn8jR0NLv}P\>&Move the cursor to the end of the lineQWebPageyRn8jR0N NP [WQC%Move the cursor to the next characterQWebPageyRn8jR0N NL Move the cursor to the next lineQWebPageyRn8jR0N NP U[W Move the cursor to the next wordQWebPageyRn8jR0RMNP [WQC)Move the cursor to the previous characterQWebPageyRn8jR0RMNL$Move the cursor to the previous lineQWebPageyRn8jR0RMNP U[W$Move the cursor to the previous wordQWebPageyRn8jR0NP S@XJvw-)Move the cursor to the start of the blockQWebPageyRn8jR0NP eNvw-,Move the cursor to the start of the documentQWebPageyRn8jR0NLvw-(Move the cursor to the start of the lineQWebPageb~N R0SvQg[No Guesses FoundQWebPageg*xSNOUjhHNo file selectedQWebPagelg gvd\ No recent searchesQWebPageU_hFg Open FrameQWebPageU__qP Open ImageQWebPageU_#}P Open LinkQWebPage W(ezU_Open in New WindowQWebPageYhF}OutlineQWebPagebN e Page downQWebPageb]e Page leftQWebPagebSe Page rightQWebPagebN ePage upQWebPageN PasteQWebPageSR0]RTLQWebPage gvd\ Recent searchesQWebPagee QeReloadQWebPagenResetQWebPageS} Right edgeQWebPageQ2[X_qP Save ImageQWebPageQ2[X#}P... Save Link...QWebPage_N cr Scroll downQWebPageW(kdcr Scroll hereQWebPage_]cr Scroll leftQWebPage_Scr Scroll rightQWebPage_N cr Scroll upQWebPaged\ zSSearch The WebQWebPagexdR0NP S@XJv}P\>Select to the end of the blockQWebPagexdR0NP eNv}P\>!Select to the end of the documentQWebPagexdR0NLv}P\>Select to the end of the lineQWebPagexdR0N NP [WQCSelect to the next characterQWebPage xdR0N NLSelect to the next lineQWebPagexdR0N NP U[WSelect to the next wordQWebPagexdR0RMNP [WQC Select to the previous characterQWebPage xdR0RMNLSelect to the previous lineQWebPagexdR0RMNP U[WSelect to the previous wordQWebPagexdR0NP S@XJvw- Select to the start of the blockQWebPagexdR0NP eNvw-#Select to the start of the documentQWebPagexdR0NLvw-Select to the start of the lineQWebPageoy:b[WelShow Spelling and GrammarQWebPageb[WSpellingQWebPageP\kbStopQWebPagecNSubmitQWebPagecNQSubmit (input element) alt text for elements with no alt, title, or valueSubmitQWebPagee[WeTText DirectionQWebPage"f/Sd\ v}"_0ˏ8Qeܓu[W03This is a searchable index. Enter search keywords: QWebPagezTopQWebPage^} UnderlineQWebPageg*wUnknownQWebPage}zgWVh%%2Web Inspector - %2QWebPage f/N What's This?QWhatsThisAction+*QWidget [b(&F)&FinishQWizard f(&H)&HelpQWizardN NP (&N)&NextQWizardN NP (&N)&Next >QWizardV(&B)< &BackQWizardSmCancelQWizardcNCommitQWizard~|~ContinueQWizard[bDoneQWizard_VGo BackQWizardfHelpQWizard%1 - [%2] %1 - [%2] QWorkspace ܕ(&C)&Close QWorkspace yR(&M)&Move QWorkspace V_(&R)&Restore QWorkspace Y'\(&S)&Size QWorkspaceSmn=(&U)&Unshade QWorkspaceܕClose QWorkspacegY'S(&X) Ma&ximize QWorkspaceg\S(&N) Mi&nimize QWorkspaceg\SMinimize QWorkspaceTN `b_ Restore Down QWorkspace n=(&A)Sh&ade QWorkspaceuYW(z(&T) Stay on &Top QWorkspace*S XML [TJfBag }x[TJbshz[TJYencoding declaration or standalone declaration expected while reading the XML declarationQXmlW(Y[N-ve[W[TJg /3error in the text declaration of an external entityQXmlRVg;fBv|u/$error occurred while parsing commentQXmlRVgQg[fBv|u/$error occurred while parsing contentQXmlRVgeNWaK[fBv|u/5error occurred while parsing document type definitionQXmlRVgQC} fBv|u/$error occurred while parsing elementQXmlRVgSÀfBv|u/&error occurred while parsing referenceQXmlu(b6v|v/error triggered by consumerQXml*W( DTD N-N QA1Ou(YRVgv[SÀ;external parsed general entity reference not allowed in DTDQXml&W(\l`'Punexpected end of fileQXml W(/vQgeN-g g*RVgv[SÀ*unparsed entity reference in wrong contextQXmlS XML [TJfBag rHg,_2version expected while reading the XML declarationQXmlshz[TJfBvPzg YvQg[0!Extra content at end of document. QXmlStreamN TlvT}T zz[TJ0Illegal namespace declaration. QXmlStreamN Tlv XML [WQC0Invalid XML character. QXmlStreamN Tlv XML T z10Invalid XML name. QXmlStreamN Tlv XML rHg,[WN20Invalid XML version string. QXmlStreamXML [TJN-g N Tlv\l`'0%Invalid attribute in XML declaration. QXmlStreamN Tlv[WQCSÀ0Invalid character reference. QXmlStreamN TlveN0Invalid document. QXmlStreamN Tlv[P<Invalid entity value. QXmlStreamN TlvUtcNT z10$Invalid processing instruction name. QXmlStreamW(Sex[[TJg NDATA0&NDATA in parameter entity declaration. QXmlStream T}T zzvRMn[WN2 %1 g*[TJ"Namespace prefix '%1' not declared QXmlStreamU_}Pg_vj|dN \ z10 Opening and ending tag mismatch. QXmlStreameN}P\>N kcx0Premature end of document. QXmlStreamPun,R0^[0Recursive entity detected. QXmlStream W(\l`'P"0&Sequence ']]>' not allowed in content. QXmlStream"shz[ScS yes b no0"Standalone accepts only yes or no. QXmlStreamgag Yj|d0Start tag expected. QXmlStream"shzv[d\l`'_ŘW(}xNK_Qs0?The standalone pseudo attribute must appear after the encoding. QXmlStream^g Unexpected ' QXmlStream(W(QlNx[WQCN-GR0^gv[WQC %10/Unexpected character '%1' in public id literal. QXmlStreamg*e/cv XML rHg,0Unsupported XML version. QXmlStreamXML [TJlg W(eNYˆU0)XML declaration not at start of document. QXmlStream(%1  %2 {&TNNLvY˂}P\>0,%1 and %2 match the start and end of a line. QtXmlPatterns%1 q!lS_%1 cannot be retrieved QtXmlPatterns4%1 ST+NW(lBv}x %2 QgN QA1vQk2OMP<0E%1 contains octets which are disallowed in the requested encoding %2. QtXmlPatternsN%1 f/exWaK q!lՏIcbexWaK0q6 IcpSWaK Y %2 f/SLv0s%1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works. QtXmlPatterns%1 f/N Tlv %2%1 is an invalid %2 QtXmlPatterns0%1 f/kchy:_N-N Tlvej0Tlvejg ?%1 is an invalid flag for regular expressions. Valid flags are: QtXmlPatterns%1 f/N TlvT}T zz}W@0%1 is an invalid namespace URI. QtXmlPatterns$%1 f/N Tlvkchy:_j#_%2/%1 is an invalid regular expression pattern: %2 QtXmlPatterns%1 N f/Tlvj#g,j!_T z10$%1 is an invalid template mode name. QtXmlPatterns%1 f/g*wvj_R6WaK0%1 is an unknown schema type. QtXmlPatterns%1 f/P g*e/cv}x0%1 is an unsupported encoding. QtXmlPatterns(%1 N f/Tlv XML 1.0 [WQC0$%1 is not a valid XML 1.0 character. QtXmlPatterns%1 N f/UtcNvTlT z104%1 is not a valid name for a processing-instruction. QtXmlPatterns%1 N f/TlvexP<0"%1 is not a valid numeric literal. QtXmlPatternsH%1 N f/NP TlvUtcNvvjT z10_Řf/ %2 vP< OY %30Z%1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3. QtXmlPatterns"%1 N f/Tlv %2 WaKvP<0#%1 is not a valid value of type %2. QtXmlPatterns%1 N f/RvexP<0$%1 is not a whole number of minutes. QtXmlPatterns(%1 N f/NP SWaK0SIcpSWaK0C%1 is not an atomic type. Casting is only possible to atomic types. QtXmlPatterns2%1 N f/{W Qg\l`'[TJ0laj_R6S/QeRg*e/c0g%1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported. QtXmlPatterns"%1 N f/Tlv %2 WaKvP<0&%1 is not valid as a value of type %2. QtXmlPatterns%1 {&TNcۈL[WQC%1 matches newline characters QtXmlPatterns8%1 _b_Ř߄W %2 b %3 ^SN[WN2v}P\>0J%1 must be followed by %2 or %3, not at the end of the replacement string. QtXmlPatterns6%1 \ %n P Sex Vkd %2 f/N Tlv0=%1 requires at least %n argument(s). %2 is therefore invalid. QtXmlPatterns8%1 gYSg %n P Sex Vkd %2 f/N Tlv09%1 takes at most %n argument(s). %2 is therefore invalid. QtXmlPatterns%1 ]T|S0%1 was called. QtXmlPatterns;N ST+ %1A comment cannot contain %1 QtXmlPatterns;N N %1 PZ}P\>A comment cannot end with a %1. QtXmlPatterns0GR0N^i [斛N SQA1W( XQuery Qg0WaK %1 vP<_ŘST+PvexP ex[W0exP< %2 g*{&TkdhN0PA value of type %1 must contain an even number of digits. The value %2 does not. QtXmlPatternsT p %1 vex][TJ00A variable by name %1 has already been declared. QtXmlPatterns>S@WOMy_Řf/W( %1 R0 %2 {W NKQg0%3 ]Q{W 0HA zone offset must be in the range %1..%2 inclusive. %3 is out of range. QtXmlPatternsN fxvRG{&T0Ambiguous rule match. QtXmlPatterns<\l`' %1 _ŘNTlv %2 pP< %3 f/N Tlv0>An %1-attribute must have a valid %2 as value, which %3 isn't. QtXmlPatterns ][TJ\l`' %1 vP\l`'N PZpeNv[P{0Vkd \l`' %1 vOMnN Ti0dAn attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place. QtXmlPatterns"%2 _Ř\g NP [PQC} %103At least one %1 element must appear as child of %2. QtXmlPatterns*\NP QC} %1 QsW( %2 NKRM0-At least one %1-element must occur before %2. QtXmlPatterns*\NP QC} %1 QsW( %2 NKQg0-At least one %1-element must occur inside %2. QtXmlPatterns_ŘhT\NP }DN0'At least one component must be present. QtXmlPatterns2W(QC} %2 v %1 \l`'N-\c[NP j!_0FAt least one mode must be specified in the %1-attribute on element %2. QtXmlPatterns*W(R{& %1 __Ř\g NP fB}DN0?At least one time component must appear after the %1-delimiter. QtXmlPatterns \l`' %1  %2 _|kdNe0+Attribute %1 and %2 are mutually exclusive. QtXmlPatterns.\l`'QC} %1 q!l^RS VpO\l`' %1 N QsW(QC} %20Sg %3 NSjn\l`'0YAttribute %1 cannot appear on the element %2. Allowed is %3, and the standard attributes. QtXmlPatterns>\l`' %1 N QsW(QC} %20Sg %3 NSjn\l`'0^Attribute %1 cannot appear on the element %2. Only %3 is allowed, and the standard attributes. QtXmlPatterns2\l`' %1 N QsW(QC} %20Sg jn\l`'0VAttribute %1 cannot appear on the element %2. Only the standard attributes can appear. QtXmlPatterns\l`' %1 vPQC} %1 lg \l`' %2 RGN_N g \l`' %3 b %40EIf element %1 has no attribute %2, it cannot have attribute %3 or %4. QtXmlPatternshYg{,NP Sexf/zz^R bf/w^p 0 v[WN2lg T}T zz RGq!lc[RMn[WN20OFf/`c[N %10If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified. QtXmlPatterns,W(|!Svj#_hj!}DN- \l`' %1 _Ř[XW(0@In a simplified stylesheet module, attribute %1 must be present. QtXmlPatternsBW( XSL-T j#_Qg N u( %1 Su( %2 b %30DIn an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can. QtXmlPatterns8W( XSL-T j#_Qg Q_ %1 vN g {,N P Sex0>In an XSL-T pattern, function %1 cannot have a third argument. QtXmlPatternsHW( XSL-T j#_Qg Sg Q_ %1 %2 SNu(ek\ 0%3 N L0OIn an XSL-T pattern, only function %1 and %2, not %3, can be used for matching. QtXmlPatternsTW( XSL-T j#_Qg Q_ %1 v{,NP Sex_Řf/e[WbexSÀ NOu(ek\ 0yIn an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching. QtXmlPatternsJW( XSL-T j#_Qg Q_ %1 v{,NP Sex_Řf/[WN2 NOu(ek\ 0hIn an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching. QtXmlPatterns>W(SN[WN2N- %1 Su(eꎫb %2 v+8 ^ %30MIn the replacement string, %1 can only be used to escape itself or %2, not %3 QtXmlPatterns\WaK %1 NXN %2 b %3kcbq!PY' f/N QA1v0YMultiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed. QtXmlPatternsfB0Network timeout. QtXmlPatternsN IcR0 %1 WaK02No casting is possible with %1 as the target type. QtXmlPatternsST+WaK %1 fBN PZkԏ01No comparisons can be done involving the type %1. QtXmlPatternsDg*e/cYQ_0b@g e/cvT+_SNvcOu( N QH[TJpYQ_0{No external functions are supported. All supported functions can be used directly, without first declaring them as external QtXmlPatternslg T p %1 vQ_0$No function by name %1 is available. QtXmlPatternslg |=zp %1 vQ_SOu(*No function with signature %1 is available QtXmlPatterns RMn[WN2 %1 lg }PTT}T zz-No namespace binding exists for the prefix %1 QtXmlPatterns,W( %2 vRMn[WN2 %1 lg }PTT}T zz3No namespace binding exists for the prefix %1 in %2 QtXmlPatterns(etexdllg KO\\ a %1 SNf/ %21No operand in an integer division, %1, can be %2. QtXmlPatternslg T p %1 vj#g,[XW(0No template by name %1 exists. QtXmlPatterns$T p %1 vY苊exlg Su(vP<0;No value is available for the external variable by name %1. QtXmlPatternslg T p %1 vex[XW(No variable by name %1 exists QtXmlPatterns4g*e/c pragma eX0Vk! _Řg -veX0^None of the pragma expressions are supported. Therefore, a fallback expression must be present QtXmlPatterns"Sg NP %1 [TJSNW(gbN-06Only one %1 declaration can occur in the query prolog. QtXmlPatternsSQsNP QC} %10Only one %1-element can appear. QtXmlPatternsXSe/c Unicode Codepoint Collation%1 0%2 g*e/c0;IOnly the Unicode Codepoint Collation is supported(%1). %2 is unsupported. QtXmlPatterns0Sg RMn[WN2 %1  %2 }PT0SNKNq605Only the prefix %1 can be bound to %2 and vice versa. QtXmlPatterns6dO\QC %1 N u(eWaK %2  %3 vSexP<0>Operator %1 cannot be used on atomic values of type %2 and %3. QtXmlPatterns"dO\QC %1 N u(eWaK %20&Operator %1 cannot be used on type %2. QtXmlPatterns6dO\QC %1 N u(eWaK %2  %3 vSexP<0EOperator %1 is not available between atomic values of type %2 and %3. QtXmlPatternsnOMq!lՈhy:eg %10"Overflow: Can't represent date %1. QtXmlPatternsnOMq!lՈhy:eg0$Overflow: Date can't be represented. QtXmlPatternsRVg/%1Parse error: %1 QtXmlPatternsW(zznull vT}T zz N f/P %1 W( XSL-T T}T zz0iXSL-T attributes on XSL-T elements must be in the null namespace, not in the XSL-T namespace which %1 is. QtXmlPatterns,^tN %1 N Tl Vpf/_ %2 Yv0-Year %1 is invalid because it begins with %2. QtXmlPatternszzv}empty QtXmlPatternsR[Y}NP  exactly one QtXmlPatternsNP NN  one or more QtXmlPatterns 0 P NN  zero or more QtXmlPatterns0 b 1 P  zero or one QtXmlPatterns\Muted VolumeSlider %1% Volume: %1% VolumeSliderx2goclient-4.1.2.3/res/i18n/x2goclient_cs.ts0000644000000000000000000055670614447111613015333 0ustar AppDialog Published Applications Sdílené aplikace Search: Vyhledat: &Start &Spustit &Close &Zavřít Multimedia Multimédia Development Vývoj Education Výuka Game Hry Graphics Grafika Network Síť Office Kancelář Settings Nastavení System Systém Utility Nástroje Other Ostatní BrokerPassDialogUi Dialog Dialog Old password: Původní heslo: New password: Nové heslo: Confirm password: Potvrzení hesla: TextLabel TextLabel BrokerPassDlg Passwords do not match Hesla se neshodují CUPSPrintWidget Form Form Name: Název tiskárny: Properties Vlastnosti State: Stav: Accepting jobs: Připravena: Type: Typ: Location: Umístění: Comment: Komentář: Idle Nečinná Printing Probíhá tisk Stopped Pozastavena Yes Ano No Ne CUPSPrinterSettingsDialog No option selected Nebyla vybrána žádná možnost This value is in conflict with another option. Tato hodnota koliduje s jinou volbou. Options conflict. Konflikt nastavení. ConTest Connectivity test Test připojení HTTPS connection: HTTPS spojení: SSH connection: SSH spojení: Connection speed: Rychlost připojení: Failed Chyba 0 Kb/s 0 Kb/s OK OK Socket operation timed out. Vypršel časový limit připojení. Failed: Chyba: ConfigDialog General Obecné Display icon in system tray Zobrazit ikonu v oznamovací oblasti hlavního panelu Hide to system tray when minimized Při minimalizaci skrýt do oznamovací oblasti hlavního panelu Hide to system tray when closed Při ukončení skrýt do oznamovací oblasti hlavního panelu Hide to system tray after connection is established Po navázaní spojení skrýt do oznamovací oblasti hlavního panelu Restore from system tray after session is disconnected Po ukončení relace obnovit z oznamovací oblasti hlavního panelu Use LDAP Použít LDAP Server URL: Adresa serveru: BaseDN: Základní rozlišující název: Failover server 1 URL: Adresa záložního serveru 1: Failover server 2 URL: Adresa záložního serveru 2: X.Org Server settings Nastavení X.Org serveru X11 application: X11 aplikace: X11 version: X11 verze: Find X11 application Najít X11 aplikaci Start session embedded inside website Spustit relaci jako součást webove stránky Advanced options Rozšířené možnosti Defaults Obnovit výchozí &OK &OK &Cancel &Storno Settings Nastavení Printing Tisk PulseAudio settings Nastavení PulseAudio Disable PulseAudio Zakázat PulseAudio Disable sound input Zakázat zvukový vstup Your XQuartz version is too old. Verze XQuartz je příliš zastaralá. Your are using XQuartz (X Window System Server for OS X) version %1. Používáte XQuartz (X Window System Server pro OS X) verze %1. This version causes problems with X applications in 24bit color mode. You should update your X11 environment. MacPorts users please follow the steps outlined on: <center><a href="https://guide.macports.org/chunked/using.common-tasks.html">https://guide.macports.org/chunked/using.common-tasks.html</a></center> Users who have installed XQuartz via the installer package can find updated versions on: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> Tato verze způsobuje problémy s X aplikacemi ve 24-bitovém barevném režimu. Měli byste aktualizovat prostředí X11. Pokud používate MacPorts, postupujte prosím podle tohoto návodu: <center><a href="https://guide.macports.org/chunked/using.common-tasks.html">https://guide.macports.org/chunked/using.common-tasks.html</a></center> Pokud máte XQuartz nainstalovaný z balíčku, stáhněte si prosím aktualizovanou verzi: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> No valid XQuartz application selected. Neplatná aplikace XQuartz. You did not select a valid XQuartz application. Please try again. Some standard installation locations may be: <center><b>/Applications/Utilities/X11.app</b></center> <center><b>/Applications/Utilities/XQuartz.app</b></center> <center><b>/Applications/MacPorts/X11.app</b></center> Nevybrali jste platnou XQuartz aplikaci. Zkuste to znovu. Některá standardní umístění: <center><b>/Applications/Utilities/X11.app</b></center> <center><b>/Applications/Utilities/XQuartz.app</b></center> <center><b>/Applications/MacPorts/X11.app</b></center> &Connection &Připojení &Input/Output &Rozhraní &Media &Média ConnectionWidget &Connection speed R&ychlost přípojení Connection speed: Rychlost přípojení: C&ompression &Komprese Method: Metoda: Compression method: Kompresní metoda: Image quality: Kvalita zobrazení: CupsPrinterSettingsDialog Dialog Dialog General Obecné Page size: Velikost stránky: Paper type: Typ papíru: Paper source: Zdroj papíru: Duplex Printing Oboustranný tisk None Žádný Long side Dlouhá strana Short side Krátká strana Driver settings Rozšířené nastavení Option Parametr Value Hodnota No option selected Nebyl vybrán žádný parametr text text EditConnectionDialog &Session &Relace &Connection &Připojení &Input/Output Ro&zhraní &Media &Média &Shared folders S&dílené složky &OK &OK &Cancel &Storno Defaults Obnovit výchozí Session preferences - Nastavení relace - ExportDialog &Cancel &Storno &share s&dílet &Preferences ... &Nastavení ... &Custom folder ... &Vlastní složka ... Delete Delete Smazat Share Folders Sdílet složky Select folder Vybrat složku FolderButton Sessions folder Složka relací FolderExplorer Folders Složky Create New Folder Vytvořit novou složku Rename Folder ... Přejmenovat složku ... Change Icon ... Změnit ikonu ... Delete Folder ... Smazat složku ... Open picture Otevřít obrázek Pictures Soubory obrázků X2Go Client X2Go Client Folder Name: Název složky: Error Chyba Unable to remove " Nelze odstranit složku " ". Folder is not empty. Please remove the contents of this directory and try again. ", protože není prázdná. Prosím vyprázdněte ji a zkuste to znovu. Delete folder " Smazat složku " New Folder Nová složka Help Shows this message. Zobrazí tuto nápovědu. Prints version information. Zobrazí informace o verzi. Shows the changelog. Zobrazí seznam změn. Shows git information as used at compile time. [Deprecated: please use --version.] Zobrazí informace z GIT. [Zastaralá volba, používejte --version] Shows available pack methods. Zobrazí dostupné kompresní metody. Do not resume sessions automatically. Neobnovovat relace automaticky. Hides menu bar. Skryje hlavní nabídku. Disables session editing. Zakáže úpravu relací. Starts maximized. Spustí se v maximalizovaném okně. Starts hidden (minimized to system tray where available.) Hlavní okno X2Go Client se spustí skryté (v oznamovací části hlavního panelu, pokud je k dispozici.) Starts in "portable" mode. Spustí se v přenosném režimu. Forces OpenPGP smart card authentication. Vynucuje ověření pomocí OpenPGP smart card. Disable PulseAudio. Zakáže PulseAudio. Disable sound input. Zakáže zvukový vstup. Enables Xinerama by default. Povolí Xinerama. Allows client side printing in LDAP mode. Povoluje tisk na straně klienta v LDAP režimu. Enables thinclient mode. Starts without a window manager. Povolí režim tenkého klienta. Spustí se bez správce oken. Enables shutdown button. Povolí tlačítko Vypnout. Adds RSA key fingerprint to ".ssh/known_hosts" if authenticity of the server can't be determined. Přidá digitální otisk RSA klíče do ".ssh/known_hosts" pokud nelze zjistit pravost serveru. Starts with LDAP support. Example: --ldap=ldapserver:389:o=organization,c=de Spustí se s podporou LDAP. Např. --ldap=ldapserver:389:o=organizace,c=cz Defines the first LDAP failover server. Definuje první záložní LDAP server. Defines the second LDAP failover server. Definuje druhý záložní LDAP server. Defines the remote SSH server port. Default: 22. Definuje port vzdáleného SSH serveru. Výchozi: 22. Defines the local machine's SSH server port. Needed for Client-Side Printing and File Sharing support. Default: 22. Definuje port lokálního SSH serveru. Využívá se pro tisk na straně klienta a sdílení souborů. Výchozí: 22. Sets the default command. Default: 'KDE' (Desktop Session) Nastaví výchozí typ relace. Výchozí: 'KDE' (relace plochy) Starts the session named "session". Spustí relaci s názvem "session". Sets the user name for connecting to the remote SSH server to "username". Nastaví výchozí přihlašovací účet pro připojení ke vzdálenému SSH serveru. Sets the default window geometry. Default: 800x600. Nastaví výchozí velikost okna. Výchozí: 800x600. Sets the remote X2Go Agent's DPI value to "dpi". Default: same as local display. Nastaví hodnotu DPI vzdáleného X2Go Agenta. Výchozí: stejné jako u lokální obrazovky. Sets the default link type. Default: "adsl". Nastaví výchozí typ připojení. Výchozí: "ADSL". Sets default pack method. Default: "16m-jpeg-9". Nastaví výchozí kompresní metodu. Výchozí: "16m-jpeg-9". Sets the default clipboard mode. Default: "both". Nastaví vychozí sdílení schránky. Vychozí: "obousměrné". Sets the default keyboard layout to "layout". "layout" may be a comma-separated list. Nastaví výchozí rozložení klávesnice. "layout" může být čárkou oddělený seznam rozložení klávesnic. Sets the default keyboard type. Nastaví výchozí typ klávesnice. Sets the user's home directory. Nastaví domovský adresář uživatele. Enables or disables overwriting the current keyboard settings. Povolí nebo zakáže přepsání aktuálního nastavení klávesnice. Automatically launches the application(s) "app", "app2", ... on session start in Published Applications mode. Automaticky spustí aplikaci/aplikace "app", "app2", ... při spuštění relace v režimu sdílených aplikací. Defines an alternative session config file path. Definuje alternativní cestu k souboru s nastavením relací. Force-enables session system tray icon. Vynutí použití ikony v oznamovací oblasti hlavního panelu. Automatically closes X2Go Client after a disconnect. Automaticky ukončí X2Go Client po odpojení relace. Hides all Folder-Sharing-related options. Skryje veškeré možnosti pro nastavení sdílení složek. Sets the broker name to display in X2Go Client. This parameter is optional. Nastaví název zprostředkovatele, který se zobrazí v X2Go Client. Tento parametr je volitelný. Sets the path to an SSH key to use for authentication against an SSH session broker. The client's behavior is undefined if this flag is used for non-SSH session brokers. Nastaví cestu k SSH klíči, který bude použit pro přihlášení přes SSH-zprostředkovatele. Chování klienta je nedefinované při použití tohoto parametru u jiného než SSH zprostředkovatele. Enables the use of the default SSH key or SSH agent for authentication against an SSH session broker. The client's behavior is undefined if this flag is used for non-SSH session brokers. Povolí použití výchozího SSH klíče nebo SSH agenta pro přihlášení ke zprostředkovateli SSH relace. Chování klienta je nedefinované při použití tohoto parametru u jiného než SSH zprostředkovatele. Does not ask for user credentials during session broker authentication. This can be useful if you are using an HTTP(S) session broker without authentication. If you run an HTTP(S) server without authentication, but with user-specific profiles, then put the user name into the broker URL (refer to --broker-url.) The user name then will be extracted from the broker URL and be sent to the session broker. The client's behavior is undefined if this flag is used for non-HTTP(S) session brokers. Nepožadovat přihlašovací údaje pro přihlášení ke zprostředkovateli. To je užitečné při připojení přes HTTP(S)-zprostředkovatele, který nevyžaduje přihlášení, ale používá uživatelské profily a uživatelské jméno je předáváno v URL zprostředkovatele (viz --broker-url). Uživatelské jméno z URL je automaticky předáno zprostředkovateli. Chování klienta je nedefinované při použití tohoto parametru u jiného než HTTP(S) zprostředkovatele. Use broker credentials as session user/password credentials when using broker mode with broker authentication. Currently only affects direct RDP sessions. Použít přihlašovací údaje zprostředkovatele i pro přihlášení relace. Používá se pouze u RDP relací. Enables broker logout button. Povolí tlačítko pro odhlášení od zprostředkovatele. Use a custom/branded background image (SVG format) for X2Go Client's main window. If a directory is given, will randomly pick an SVG file inside of it. Umožňuje nastavit vlastní obrázek pozadí v SVG formátu pro hlavní okno X2Go Client. Pokud je předána složka, bude z ní vybrán náhodný SVG soubor. Use a custom icon (SVG format) for additional branding to replace the default in the lower left corner of X2Go Client's main window. Umožňuje nastavit vlastní logo v SVG formátu. Nahradí výchozí logo zobrazované v levém dolním rohu hlavního okna X2Go Client. Disables X2Go Client's UNIX cleanup helper. This will prevent X2Go Client from terminating spawned processes after the main program terminates or crashes. Use with care and when in doubt, do not use this parameter at all. Vypnutí X2Go UNIX cleanup helper(u). Tím zabráníte klientovi X2Go ukončit vzniklé procesy po ukončení nebo havárii hlavního programu. Používejte opatrně, případě pochybností tento parametr nepoužívejte. HelpDialog Options Možnosti HttpBrokerClient Host key for server changed. It is now: Klíč serveru byl změněn. Aktuální klíč: For security reasons, the connection attempt will be aborted. Z bezpečnostních důvodů bude pokus o připojení přerušen. The host key for this server was not found but another type of key exists. An attacker might have changed the default server key to trick your client into thinking the key does not exist yet. Klíč serveru nebyl nalezen, existuje ovšem jiný typ klíče. Je možné, že někdo změnil výchozí klíč serveru, aby zmátl váš klientský program. Could not find known hosts file. If you accept the host key here, the file will be automatically created. Nelze nalézt soubor known_hosts. Přijetím klíče serveru, bude tento soubor automaticky vytvořen. The server is unknown. Do you trust the host key? Public key hash: Neznámý server. Důvěřujete tomuto serverovému klíči? Hodnota hash veřejného klíče: Host key verification failed. Ověření klíče serveru se nezdařilo. Yes Ano No Ne Enter passphrase to decrypt a key Zadejte heslo pro odemčení klíče Verification code: Ověřovací kód: Enter user account password: Zadejte heslo uživatelského účtu: Authentication failed. Ověření se nezdařilo. Error Chyba Login failed!<br>Please try again. Přihlášení se nezdařilo!<br>Zkuste to znovu. <br><b>Server uses an invalid security certificate.</b><br><br> <br><b>Server používá neplatný bezpečnostní certifikát.</b><br><br> <p style='background:#FFFFDC;'>You should not add an exception if you are using an internet connection that you do not trust completely or if you are not used to seeing a warning for this server.</p> <p style='background:#FFFFDC;'>Neměli byste přidávat výjimku pokud plně nedůvěřujete svému internetovému připojení případně pokud při připojení k tomuto serveru je zobrazení varování neobvyklé.</p> Secure connection failed. Zabezpečené připojení se nezdařilo. Issued to: Vydán pro: Common Name(CN) Běžný název(CN) Organization(O) Organizace(O) Organizational Unit(OU) Organizační jednotka(OU) Serial Number Sériové číslo Issued by: Vydal: Validity: Doba platnosti: Issued on Datum vydání expires on Konec platnosti Fingerprints: Digitální otisky: SHA1 SHA1 MD5 MD5 Exit X2Go Client Ukončit X2Go Client Add exception Přidat výjimku InteractionDialog Terminal output: Výstup terminálu: Cancel Storno Reconnect Znovu připojit MediaWidget Sound Zvuk Enable sound support Povolit podporu zvuku Start sound daemon Spustit zvukového démona Use running sound daemon Použít běžícího zvukového démona Use SSH port forwarding to tunnel sound system connections through firewalls Tunelovat připojení zvukových systémů skrz SSH Use default sound port Použít výchozí zvukový port Sound port: Zvukový port: Client side printing support Podpora tisku na straně klienta Deprecation Warning Varování ARTS support is scheduled to be removed soon. Please upgrade to PulseAudio. Podpora ARTS bude brzy odstraněna. Aktualizujte systém na PulseAudio. ESounD support is scheduled to be removed soon. Please upgrade to PulseAudio. Podpora ESounD bude brzy odstraněna. Aktualizujte systém na PulseAudio. ONMainWindow Starting X2Go Client %1... Spouštění X2Go Client %1... us cz X2Go Client X2Go Client connecting připojování Internet browser Internetový prohlížeč Email client E-mailový klient OpenOffice.org OpenOffice.org Terminal Terminál Starting X2Go Client in portable mode. Data directory is: Spouštění X2Go Client v přenosném režimu. Složka s daty: &Settings ... &Nastavení ... Support ... Podpora ... About X2Go Client O X2Go Client Started X2Go Client. X2Go Client spuštěn. Translator: Překladač: found. nalezen. Can't load translator: Nelze nahrát překladač: Non-fatal: can't load translator: Nepodařilo se nahrát překlad: Trying to load language with lower preference, if existent. Probíhá pokus o načtení jazykového souboru s nižší prioritou. Session: Relace: &Quit &Ukončit Ctrl+Q Ctrl+Q Quit Ukončit &New session ... Nová &relace ... Ctrl+N Ctrl+N Session management ... Správa relací ... Ctrl+E Ctrl+E &Create session icon on desktop ... Vytvořit &zástupce na ploše ... &Set broker password ... Nastavit &heslo zprostředkovatele ... &Connectivity test ... &Test připojení ... Show toolbar Zobrazit lištu nástrojů About Qt O Qt &Session &Relace &Options &Možnosti &Help &Nápověda Login: Přihlašovací účet: Error Chyba Operation failed Operace selhala Password changed Heslo změněno Wrong password! Chybné heslo! Connecting to broker Připojování ke zprostředkovateli <b>Authentication</b> <b>Ověření</b> Restore Obnovit Not connected Nepřipojeno Multimedia Multimédia Development Vývoj Education Výuka Game Hry Graphics Grafika Network Síť Office Kancelář Settings Nastavení System Systém Utility Nástroje Other Ostatní Share folder ... Sdílet složku ... Suspend Pozastavit Terminate Ukončit A click displays the context menu. Kliknutím zobrazíte kontextové menu. A left click hides or restores the window. A right click displays the context menu. Levé tlačítko skryje nebo obnoví okno, pravé tlačítko zobrazí místní nabídku. Closing X2Go Client ... Ukončování X2Go Client ... Finished X2Go Client closing hooks. X2Go Client ukončil volané služby. Broker authentication failed! Přihlášení ke zprostředkovateli se nezdařilo! Please check LDAP settings Zkontrolujte nastavení LDAP no X2Go Server found in LDAP Nenalezen žádný X2Go Server v LDAP No X2Go sessions found, closing. Nenalezena žádná X2Go relace, ukončuji. KDE KDE RDP connection RDP relace XDMCP XDMCP Connection to local desktop Lokální relace on na Starting connection to server: Vytvářím připojení k serveru: Connection error: Chyba připojení: Couldn't find an SSH connection. Nepovedlo se najít SSH relaci. Enter passphrase to decrypt a key Zadejte heslo pro odemčení klíče Verification code: Ověřovací kód: Enter user account password: Zadejte heslo uživatelského účtu: Host key for server changed. It is now: Klíč serveru byl změněn. Aktuální klíč: This can be an indication of a man-in-the-middle attack. Somebody might be eavesdropping on you. For security reasons, it is recommended to stop the connection attempt. Do you want to terminate the connection? Může se jednat o útok typu man-in-the-middle. Někdo se možná pokouší odpooslouchávat vaši komunikaci se serverem. Z bezpečnostních důvodů doporučujeme pokus o spojení ukončit. Přejete si přerušit spojení? Host key verification failed. Ověření klíče serveru se nezdařilo. If you accept the new host key the security of your connection may be compromised. Do you want to update the host key? Přijetím nového klíče serveru můžete ohrozit bezpečnost vaší relace. Chcete přijmout nový klíč serveru? The host key for this server was not found but another type of key exists. An attacker might have changed the default server key to trick your client into thinking the key does not exist yet. For security reasons, it is recommended to stop the connection attempt. Do you want to terminate the connection? Klíč serveru nebyl nalezen, existuje ovšem jiný typ klíče. Je možné, že někdo změnil výchozí klíč serveru, aby zmátl váš klientský program. Z bezpečnostních důvodů doporučujeme pokus o spojení ukončit. Přejete si přerušit spojení? Could not find known hosts file. If you accept the host key here, the file will be automatically created. Nelze nalézt soubor known_hosts. Přijetím klíče serveru, bude tento soubor automaticky vytvořen. The server is unknown. Do you trust the host key? Public key hash: Neznámý server. Důvěřujete tomuto serverovému klíči? Hodnota hash veřejného klíče: Authentication failed: Ověření se nezdařilo: Authentication failed. Ověření se nezdařilo. XDM XDM RDP RDP Enter password for SSH proxy Zadejte heslo pro SSH proxy <b>Connection failed.</b> <b>Připojení se nezdařilo.</b> <b>Wrong password!</b><br><br> <b>Chybné heslo!</b><br><br> Connection failed: Připojení se nezdařilo: - Wrong password. - chybné heslo. unknown neznámý No server available. Není k dispozici žádný server. Server not available. Server není k dispozici. Select session: Vyberte relaci: running spuštěno suspended pozastaveno Desktop Plocha single application samostatná aplikace shadow session zrcadlená relace X2GoKDrive session X2GoKDrive relace Information Informace No accessible desktop found. Nelze nalézt dostupnou plochu. Filter Filtr Select desktop: Vyberte plochu: Warning Varování Your current color depth is different from the session's color depth. This may cause problems reconnecting to this session and in most cases <b>you will lose the session</b> and have to start a new one! Aktuální nastavení barevné hloubky se liší od barevné hloubky relace. To způsobí problémy při opětovném připojení k této relaci. Ve většině případů to způsobí <b>ztrátu relace</b>! It's highly recommended to change the color depth of your display to %n bit(s) and restart your X.Org Server before you reconnect to this X2Go session. %n will be replaced with a number Důrazně se doporučuje změnit barevnou hloubku na %n bit a restart X.Org serveru než se pokusíte o opětovné připojení k této X2Go relaci. Důrazně se doporučuje změnit barevnou hloubku na %n bity a restart X.Org serveru než se pokusíte o opětovné připojení k této X2Go relaci. Důrazně se doporučuje změnit barevnou hloubku na %n bitů a restart X.Org serveru než se pokusíte o opětovné připojení k této X2Go relaci. <br />Do you want to resume this session anyway? <br />Přejete si přesto obnovit tuto relaci? Yes Ano No Ne suspending pozastavování terminating ukončování <b>Wrong Password!</b><br><br> <b>Chybné heslo!</b><br><br> PulseAudio is not running PulseAudio neběží Sound output will be disabled for this session. Please enable PulseAudio in the configuration dialog or disable sound in the session settings Zvukový výstup v této relaci bude zakázán. Buď povolte PulseAudio v nastavení X2Go Client nebo vypněte podporu zvuku v nastavení relace New session started Spuštěna nová relace Session resumed Relace obnovena Unable to create folder: Nelze vytvořit složku: Unable to write file: Nelze zapisovat do souboru: Attach X2Go window Připojit X2Go okno Unable to create SSH tunnel for X2Go session (NX) startup: Nepoařilo se vytvořit SSH tunel pro načtení X2Go relace (NX): Unable to create SSH tunnel for audio data: Nepoařilo se vytvořit SSH tunel pro přenos zvuku: failed to start. se nespustil. This likely means the binary is not available. The current search path is: Spustitelný soubor pravděpodobně neexistuje. Aktuální obsah proměnné PATH: returned a non-zero exit code or crashed otherwise. vrátil nenulový návratový kód a nebo selhal. Execution failed, exit code was: Spuštění příkazu se nezdařilo, kód chyby: didn't start up in time. se nespustil v časovém limitu. This error shouldn't come up. Tato chyba by se neměla vůbec zobrazit. didn't accept a write operation. nepovolil operaci zápisu. It is probably not running correctly or crashed in-between. Buď neběží nebo selhal. Unable to read from xmodmap. Nelze číst z xmodmap. encountered an unknown error during start up or execution. zjistil neznámou chybu při spouštění nebo za běhu. experienced an undefined error. zjistil nedefinovanou chybu. X2Go Client will now terminate. File a bug report as outlined on the <a href="http://wiki.x2go.org/doku.php/wiki:bugs">bugs wiki page</a>. X2Go Client bude nyní ukončen. Nahlašte chybu jak je popsáno na stránce <a href="http://wiki.x2go.org/doku.php/wiki:bugs">bugs wiki</a>. Failed to start RDP or XDMCP client Spuštění RDP nebo XDMCP klienta se nezdařilo Check session settings and ensure that selected client is installed on your system. Zkontrolujte nastavení relace a ujistěte se, že je vybraný klient nainstalovaný ve vašem systému. Emergency exit. Nouzové ukončení. Waiting for proxy to exit. Čekání na ukončení proxy. Proxy didn't terminate after 3 seconds. Killing the proxy. Proxy relace se neukončila do 3 vteřin. Ukončuji proces. Closing X2Go Client because it was started in hidden mode. Ukončování X2Go Client protože byl spuštěný ve skrytém režimu. Closing X2Go Client because the --close-disconnect parameter was passed. Ukončování X2Go Client protože byl spuštěn s parametrem --close-disconnect. Finished Dokončeno starting spouštění resuming obnovování Connection timeout, aborting Vypršel časový limit připojení, ukončuji aborting ukončování Are you sure you want to terminate this session? Unsaved documents will be lost. Opravdu chcete tuto relaci ukončit? Všechna neuložená data budou ztracena. Session Relace Display Obrazovka Creation time Čas vytvoření <b>Connection failed.</b> : <b>Připojení se nezdařilo</b> : (can't open file) (soubor nelze otevřít) (file does not exist) (soubor neexistuje) (directory does not exist) (složka neexistuje) Invalid value for parameter "--link". Neplatná hodnota parametru "--link". Invalid value for parameter "--clipboard". Neplatná hodnota parametru "--clipboard". Invalid value for parameter "--sound". Neplatná hodnota parametru "--sound". Invalid value for parameter "--geometry". Neplatná hodnota parametru "--geometry". Invalid value for parameter "--set-kbd". Neplatná hodnota parametru "--set-kbd". Invalid value for parameter "--ldap". Neplatná hodnota parametru "--ldap". Invalid value for parameter "--ldap1". Neplatná hodnota parametru "--ldap1". Invalid value for parameter "--ldap2". Neplatná hodnota parametru "--ldap2". Invalid value for parameter "--pack". Neplatná hodnota parametru "--pack". Wrong parameter: Chybný parametr: Help Nápověda Available pack methods: Dostupné kompresní metody: Pack Methods Metody komprese Option is not available in this build. Parametr není v tomto sestavení podporován. Changelog Seznam změn Git Info Informace z Git Unable to create directory: Nelze vytvořit složku: Support Podpora <br>(C) 2005-2023 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> Translators, feel free to add a localized version of your translation including a copyright notice and your name(s). Remember to keep a <br> at the end, though. English example for a potential translation: <br>(C) 2005-2023 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br>English version: (C) 20AB-20CD Trans Lator <trans@la.tor><br> <br>(C) 2005-2023 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> <br>This is a client to access the X2Go network-based computing environment. This client will be able to connect to X2Go Server(s) and start, stop, resume and terminate (running) desktop sessions. X2Go Client stores different server connections and may automatically request authentication data from LDAP directories. Furthermore, it can be used as a fullscreen login screen (replacement for login managers like XDM). Please visit <a href="http://www.x2go.org">the project home page at x2go.org</a> for further information. <br>X2Go Client je program pro vzdálený přístup k X2Go terminálovým serverům. Po připojení k X2Go serveru umožňuje vytvářet, pozastavovat, obnovovat a ukončovat relace. X2Go Client umí vytvářet spojení s různými servery a může také automaticky ověřovat uživatele v LDAP. Navíc jej lze použít i jako celoobrazovkovou přihlašovací obrazovku (nahrada za správce relací jako např XDM). Více informací můžete zjistit na <a href="http://www.x2go.org">webových stránkách projektu x2go.org</a>. <b>X2Go Client v. <b>X2Go Client v. Please check LDAP Settings. Zkontrolujte nastavení LDAP. Check whether the package providing "pcsc_scan" is installed. The current search path is: Zkontrolujte zda je nainstalovaný "pcsc_scan". Aktuální cesta: didn't start yet. se ještě nespustil. Unable to read from scdaemon. Nelze číst z scdaemon. No valid card found. Platná karta nenalezena. Card not configured. GPG Smart Card není nakonfigurovaná. This card is unknown to the X2Go system. X2Go systém tuto kartu nezná. Can't start X.Org Server. Please check your installation. Nelze spustit X.Org Server. Prosím zkontrolujte svou instalaci. Unable to execute: Nelze spustit: Remote server does not support file system exports through SSH tunnels. Please update your x2goserver package. Vzdálený server nepodporuje sdílení souborů přes SSH tunel. Prosím zaktualizujte X2Go Server. Unable to create SSH tunnel for Folder Sharing and Printing support: Nepoařilo se vytvořit SSH tunel pro sdílení složek a podporu tisku: Unable to read: Nelze načíst: Unable to create or append to file: Nelze vytvořit nebo zapisovat do souboru: Unable to change the permissions of file: Nelze změnit oprávnění souboru: This is an error because sshd would deny such a file. SSHD by tento soubor odmítl použít. Unable to change the permissions of directory: Nelze změnit oprávnění složky: This is an error because sshd would deny such a directory. SSHD by tuto složku odmítl použít. WINDOWS-1252 WINDOWS-1252 ISO8859-1 ISO8859-1 Can't start X.Org Server. Nelze spustit X.Org Server. Please check your installation. Prosím zkontrolujte vaši instalaci. X.Org Server did not launch correctly after %n tries. %n will be substituted with the current number of tries Nepodařilo se spustit X.Org server po %n pokusu. Nepodařilo se spustit X.Org server po %n pokusech. Nepodařilo se spustit X.Org server po %n pokusech. Unable to find the sftp-server binary. Neither bundled, nor found in $PATH nor additional directories. Nepodařilo se nalézt program sftp-server v $PATH, ani v dalších adresářích. If you are using a Linux-based operating system, please ask your system administrator to install the package containing the sftp-server binary. Common names are <b>openssh</b>, <b>openssh-server</b> or <b>openssh-sftp-server</b> depending upon distribution. If the sftp-server binary is installed on your system, please report a bug mentioning its path on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Používáte-li systém Linux, požádejte svého administrátora o instalaci balíčku poskytujícího program sftp-server. V závislosti na použité distribuci se může jednat o <b>openssh</b>, <b>openssh-server</b> nebo <b>openssh-sftp-server</b>. Je-li program sftp-server ve vašem systému nainstalován, vytvořte prosím chybové hlašení vč. aktuální cesty k sftp-server: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> SSH key type selection error Chyba při výběru typu klíče Unknown SSH key selected. Byl vybrán neznámý SSH klíč. Terminating application. Ukončování aplikace. SSH key base directory creation error Chyba při vytváření výchozí složky s SSH klíči Unable to create SSH key base directory '%1'. Nepodařilo se vytvořit výchozí složku s SSH klíči '%1'. ssh-keygen launching error Chyba při spuštění ssh-keygen Unable to start the ssh-keygen binary. Nelze spustit ssh-keygen. ssh-keygen crashed ssh-keygen selhal The ssh-keygen binary crashed. Program ssh-keygen selhal. ssh-keygen program error Chyba programu ssh-keygen The ssh-keygen binary did not exit cleanly. Program ssh-keygen nebyl řádně ukončen. It was probably called with unknown arguments. Pravděpodobně byly zadány neplatné parametry. Unable to open newly generated %1 public host key file. Nepodařilo se otevřít nově vytvořený soubor s veřejným %1 klíčem. %1 public host key file empty. Soubor s veřejným %1 klíčem je prázdný. Cannot open key: Nelze otevřít klíč: Error getting window geometry. (Did you close the window?) Nepodařilo se načíst vlastnosti okna. (Zavřeli jste okno?) Detach X2Go window Odpojit X2Go okno X2Go Session X2Go relace Invalid value for argument "speed" Neplatná hodnota parametru "speed" Password: Heslo: Keyboard layout: Rozložení klávesnice: Ok OK Cancel Storno <b>Session ID:<br>Server:<br>Username:<br>Display:<br>Creation time:<br>Status:</b> <b>ID relace:<br>Server:<br>Uživatelské jméno:<br>Obrazovka:<br>Čas vytvoření:<br>Stav:</b> Applications ... Aplikace ... Abort Přerušit Show details Zobrazit podrobnosti Resume Obnovit New Nový Full access Úplný přístup View only Pouze prohlížet Status Stav Command Příkaz Type Typ Server Server Client IP IP adresa klienta Session ID ID relace User Uživatel Only my desktops Pouze moje plochy SSH daemon could not be started. Nepodařilo se spustit službu SSH. You have enabled Remote Printing or File Sharing. These features require a running and functioning SSH server on your computer. <b>Printing and File Sharing will be disabled for this session.</b> Je povolený vzdálený tisk nebo sdílení složek. Tyto funkce vyžadují spuštěný a funkční SSH server na místním počítači. <b>Tisk a sdílení složek bude v této relaci zakázan.</b> Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server. If you see this message, please report a bug on: Toto by nemělo nastat, jelikož X2Go Client pro Windows je dodáván s interním SSH serverem. Prosím vytvořte chybové hlášení na: The SSH server failed to start. Please report a bug on: Chyba při spouštění SSH serveru. Prosíme nahlašte chybu na: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Disabling Remote Printing or File Sharing support in the session settings will get rid of this message. Vypnutím podpory vzdáleného tisku nebo sdílení souborů v nastavení relace se zbavíte této hlášky. SSH daemon failed to open its public host key. SSH službě se nezdařilo otevřít soubor s veřejným klíčem serveru. Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server and automatically generates the required keys. If you see this message, please report a bug on: Toto by nemělo nastat, jelikož X2GoClient pro Windows je dodáván s interním SSH serverem a klíč generuje automaticky, Prosím vytvořte chybové hlášení na: X2Go Client was unable to create SSH host keys. Please report a bug on: X2Go Client nemohl vytvořit složku s SSH klíči. Prosím nahlašte chybu na: SSH Error Chyba SSH SSH daemon failed to open the application's public key used for exporting folders and printers. SSH službě se nezdařilo otevřít soubor s veřejným klíčem používaným pro sdílení složek a tiskáren. SSH daemon failed to open the application's authorized_keys file. SSH službě se nezdařilo otevřít soubor autorizovanými klíči. Restore toolbar Obnovit panel nástrojů Minimize toolbar Minimalizovat panel nástrojů <br><b>&nbsp;&nbsp;&nbsp;Click this button&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;to restore toolbar&nbsp;&nbsp;&nbsp;</b><br> <br><b>&nbsp;&nbsp;&nbsp;Pro obnovení panelu nástrojů&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;klikněte na toto tlačítko&nbsp;&nbsp;&nbsp;</b><br> libssh initialization failure Chyba inicializace libssh Unable to initialize libssh. Nelze inicializovat libssh. PrintDialog Print - X2Go Client Tisk - X2Go Client Print Tisk You've deactivated the X2Go Client printing dialog. Dialogové okno tisku v X2Go Client je zakázané. You may reactivate this dialog using the X2Go Client settings dialog. To do so, follow this path in the menu bar: Options -> Settings Můžete jej znovu povolit v nastavení X2Go Client, v nabídce Možnosti -> Nastavení PrintProcess Save File Uložit soubor PDF Document (*.pdf) Dokument PDF (*.pdf) Failed to execute command: Nepodařilo se spustit příkaz: Printing error. Chyba tisku. PrintWidget Form Form Print Tisk View as PDF Vytvořit PDF Print settings Nastavení tisku Printer: Název tiskárny: Print using default Windows PDF Viewer (Viewer application needs to be installed) Tisknout pomocí výchozího PDF prohlížeče ve Windows (prohlížeč již musí být nainstalovaný) Printer command: Tiskový příkaz: ... ... Viewer settings Nastavení PDF Open in viewer application Zobrazit v prohlížeči PDF Command: Příkaz: Save to disk Uložit na disk Show this dialog before start printing Vždy zobrazit tento dialog před tiskem Please configure your client side printing settings.<br><br>If you want to print the created file, you'll need an external application. Typically you can use <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> and <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>You can find further information <a href="http://www.x2go.org/index.php?id=49">here</a>. Prosím nstavte možnost tisku na straně klienta.<br><br>Chcete-li vytvořený soubor vytisknout, budete k tomu potřebovat externí aplikaci. Můžete k tomu použít <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> a <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a>.<br>Další informace naleznete na <a href="http://www.x2go.org/index.php?id=49">stránkách X2Go</a>. PrinterCmdDialog Printer command Nastavení tisku Command Příkaz pro tisk Please enter your customized or individual printing command. Examples: kprinter lpr -P hp_laserjet Prosím nastavte příkaz pro tisk. Příklady: kprinter lpr -P hp_laserjet Output format Výstupní formát Please choose the printing file format (regarding to your printing environment - if you use CUPS you may use PDF) Nastavte formát tiskového souboru podporovaný vaším tiskovým prostředím (při použití CUPS můžete zvolit PDF) PDF PDF PS PS Data structure Způsob předání dat Please choose the method of printing file input (some commands accepting printing files as program options, some are awaiting data on standard input): Vyberte způsob předání dat příkazu pro tisk (některé příkazy očekávají data na standardním vstupu, jiné jako parametr příkazového řádku): standard input (STDIN) Standardní vstup (STDIN) Specify path as program parameter Parametr na příkazovém řádku Please enter your customized or individual printing command. Example: Prosím nastavte příkaz pro tisk Příklady: <Path to gsprint.exe> -query -color <Cesta k gsprint.exe> -query -color PulseManager Could not allocate buffer for getting current working directory! Nebylo možné přidělit paměť pro zjištění aktuální složky! getcwd() failed! Chyba getcwd()! Error fetching PulseAudio version number! Nepodařilo se zjistit verzi PulseAudio! Unexpected character found when parsing version string for major version number Nalezen neočekávaný znak při analýze hlavního čísla verze Unexpected character found when parsing version string for minor version number Nalezen neočekávaný znak při analýze doplňkového čísla verze Unexpected character found when parsing version string for micro version number Nalezen neočekávaný znak při analýze čísla podverze Supposed to skip major version number. Something is wrong. This code block should never be executed I think... || Yes, but please translate either way. Just because it should never be executed doesn't mean it WON't. Think stack corruptions and the like - that' why this message is included here. Něco se pokazilo. Unable to convert major version number string to integer. Nepodařilo se převést hlavní číslo verze na integer. Unable to convert minor version number string to integer. Nepodařilo se převést doplňkové číslo verze na integer. Unable to convert micro version number string to integer. Nepodařilo se převést číslo podverze na integer. Unexpected format encountered. Neočekávaný formát. Unable to start PulseAudio binary. Nelze spustit PulseAudio. Unable to play startup sound. Nelze přehrát znělku při spuštění. PulseAudio failed to start! Nepodařilo se spustit PulseAudio! Sound support will not be available. Zvuk nebude k dispozici. If you downloaded the bundled, pre-compiled version from the official home page or the upstream Linux packages, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Pokud je váš X2Go Client stažený z oficiální webové stránky nebo oficiálního distribučního repozitáře vaší Linuxové distribuce, vytvořte prosím Bug-report na: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> QObject No response received from the remote server. Do you want to terminate the current session? Nebyla přijata žádná odpověď od vzdáleného serveru. Chcete aktuální relaci ukončit? X2Go Client could not find any suitable X11 server. Nepodařilo se nalézt vhodný X11-Server. X2Go Client could not start X11 server. Nelze spustit X11-Server. X2Go Client requires XQuartz to be installed. If XQuartz is already installed on your system, please select the correct path in the now upcoming dialog. Refer to the end of this message for path examples, in case you do not know the exact location yourself. Should you have <b>not</b> installed XQuartz yet, please follow the outlined steps: X2Go Client vyžaduje nainstalovaný XQuartz. Pokud je XQuartz na vašem systému nainstalovaný, zadejte správnou cestu v následujícím okně. Pro případ, že neznáte správné umístění, jsou na konci této zprávy uvedeny příklady možných cest. Pokud XQuartz <b>nemáte</b> nainstalovaný, postupujte následovně: MacPorts users, please install either the port <b>xorg-server</b> or the port <b>xorg-server-devel</b>. Upon successful installation, please follow the instructions printed by the port utility to autostart/load the server. All other users, please obtain and install XQuartz from: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> Afterwards, restart X2Go Client and select the correct path to the X11 application in the general X2Go Client settings. This will most likely be <center><b>/Applications/MacPorts/X11.app</b></center> or <center><b>/Applications/Utilities/XQuartz.app</b></center> Pokud používáte MacPorts instalujte prosím port <b>xorg-server</b> nebo port <b>xorg-server-devel</b>. Po úspěšné instalaci postupujte podle instrukcí nástroje port pro nastavení automatického spouštění. Můžete také XQuartz nainstalovat ručně po stažení z: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> Po instalaci restartujte X2Go Client a nastavte správnou cestu k X11 na záložce Obecné v nastavení X2GO Client. Správná cesta bude pravděpodobně <center><b>/Applications/MacPorts/X11.app</b></center> nebo <center><b>/Applications/Utilities/XQuartz.app</b></center> SessionButton Session preferences ... Nastavení relace ... Create session icon on desktop ... Vytvořit zástupce na ploše ... Delete session Smazat relaci Session actions Akce relace Select type Typ relace Select resolution Rozlišení relace Toggle sound support Podpora zvuku New Session Nová relace running spuštěna suspended pozastavena KDE KDE RDP connection RDP připojení XDMCP XDMCP Connection to local desktop Připojení k lokální ploše Published applications Sdílené aplikace fullscreen Celá obrazovka Display Obrazovka window Okno Maximum Maximální velikost Enabled Povoleno Disabled Zakázáno SessionExplorer Back Zpět Create session icon on desktop. Vytvořit zástupce na ploše. Desktop icons can be configured not to show X2Go Client (hidden mode.) If you like to use this feature you'll need to configure login via a GPG key or GPG Smart Card. Use X2Go Client's hidden mode? Zástupce na ploše lze přepnout do skrytého režimu (X2Go Client nebude zobrazován). Chcete-li tuto vlastnost použít, musíte nastavit přihlášení pomocí GPG klíče nebo GPG Smart Card. Přepnout X2Go Client do skrytého režimu? Show session tray icon when running Zobrazit ikonu běžící relace v oznamovací oblasti hlavního panelu New Session Nová relace X2Go Link to session Zástupce X2Go relace Are you sure you want to delete this session? Opravdu chcete smazat tuto relaci? SessionManageDialog E&xit &Zavřít &New session Nová &relace &Session preferences &Nastavení relace &Delete session &Smazat relaci &Create session icon on desktop ... Vytvořit zástupce na &ploše ... Delete Delete Smazat Session management Správa relací SessionWidget Session name: Název relace: << change icon << změnit ikonu Path: Cesta: &Server &Server Values ranging from <b>0</b> to <b>65535</b> are allowed.<br />A value of <b>0</b> will either use the port specified in the SSH configuration file belonging to a host or shortname, or use the default of <b>22</b>. Povolený rozsah hodnot: <b>0</b> až <b>65535</b>.<br />Hodnota <b>0</b> použije buď port nastavený pro cílový server v konfiguraci SSH klienta nebo výchozí port <b>22</b>. Host: Hostitel: Login: Přihlašovací účet: SSH port: SSH port: Use RSA/DSA key for ssh connection: Pro ověření použít SSH klíč: Try auto login (via SSH Agent or default SSH key) Automatické přihlášení (SSH Agent nebo výchozí SSH klíč) Kerberos 5 (GSSAPI) authentication Ověřování protokolem Kerberos 5 (GSSAPI) Delegation of GSSAPI credentials to the server Předat přihlašovací údaje přihlašovacímu serveru Use Proxy server for SSH connection Použít proxy server pro SSH připojení Proxy server Proxy server SSH SSH HTTP HTTP Same login as on X2Go Server Použít stejný přihlašovací účet jako pro X2Go Server Same password as on X2Go Server Použít stejné heslo jako pro X2Go Server RSA/DSA key: Remind me to change this in the source code, please. Since libssh now supports other types than RSA and DSA, we should probably rename this. SSH klíč: SSH Agent or default SSH key Automatické přihlášení (SSH Agent nebo výchozí SSH klíč) Type: Typ: Port: Port: &Session type &Typ relace Session type: Typ relace: Run in X2GoKDrive (experimental) Spustit v X2GoKDrive (experimentální) Connect to Windows Terminal Server RDP relace XDMCP XDMCP relace X2Go/X11 Desktop Sharing X2Go/X11 Desktop Sharing Connect to local desktop Lokální relace Custom desktop Vlastní relace Single application Konkrétní aplikace Published applications Sdílené aplikace Command: Příkaz: Advanced options... Rozšířené možnosti... Path to executable Cesta ke spustitelnému souboru Direct RDP connection Přímé RDP připojení Open key file Otevření souboru s klíčem All files Všechny typy souborů Error Chyba X2Go Client is running in portable mode. You should use a path on your USB device to be able to access your data wherever you are. X2Go Client je spuštěný v přenosném režimu. Použijte cestu na vašem USB zařízení abyste měli svá data k dispozici odkudkoliv. Direct XDMCP connection Přímé XDMCP spojení RDP port: RDP port: Open picture Otevření souboru s obrázkem Pictures Obrázky Server: Server: XDMCP server: XDMCP server: direct XDMCP connection Přímé XDMCP připojení rdesktop command line options: Parametry příkazu rdesktop: New session Nová relace SettingsWidget &Display &Zobrazení &Keyboard &Klávesnice &Clipboard mode S&dílení schránky Fullscreen Celá obrazovka Custom Vlastní okno Window Okno Use whole display Použít celou obrazovku Maximum available Maximální velikost Set display DPI Nastavit DPI obrazovky Xinerama extension (support for two or more physical displays) Použít Xinerama (podpora dvou a více obrazovek) Width: Šířka: Height: Výška: &Display: &Obrazovka: &Identify all displays &Identifikovat obrazovky Bidirectional copy and paste Obousměrné Copy and paste from client to server Od klienta na server Copy and paste from server to client Od serveru na klienta Disable clipboard completely Zakázané Auto-detect keyboard settings Automaticky detekovat nastavení klávesnice Do not configure keyboard Neměnit nastavení klávesnice Configure keyboard Nastavit klávesnici Model: Model: Layout: Rozložení: Variant: Varianta: RDP client RDP klient FreeRDP/X11 (pre-2.x style options) FreeRDP/X11 (verze starší než 2.x) FreeRDP/X11 (2.x style options) FreeRDP/X11 (verze 2.x a novější) Additional parameters: Další parametry: Command line: Příkazový řádek: XDMCP client XDMCP klient us cz password heslo ShareWidget &Folders &Složky Path Cesta Automount Automatické připojení Add Přidat Delete Smazat Path: Cesta: Filename encoding Kódování názvů souborů local: Lokální: remote: Vzdálené: Use SSH port forwarding to tunnel file system connections through firewalls Tunelovat připojení k souborovým systémům skrz SSH Select folder Vybrat složku Error Chyba X2Go Client is running in portable mode. You should use a path on your USB device to be able to access your data wherever you are. X2Go Client je spuštěn v přenosném režimu. Měli byste zvolit složku na vašem USB disku, abyste měli svá data vždy k dispozici. WINDOWS-1252 WINDOWS-1252 ISO8859-1 ISO8859-1 SshMasterConnection Cannot create SSH session. Nelze vytvořit SSH relaci. Using environment-provided username. Uživatelské jméno z proměnné prostředí. Cannot connect to Nelze se připojit k SSH proxy connection error. Chyba připojení k SSH proxy. SSH proxy connection error: Chyba připojení k SSH proxy: Failed to create SSH proxy tunnel. Vytvoření SSH proxy tunelu se nezdařilo. Cannot connect to proxy server. Nelze vytvořit připojení s proxy serverem. Authentication failed. Ověření se nezdařilo. Failed to start SSH client. Please check your installation and GSSApi configuration. Spuštění SSH klienta se nezdařilo. Prosím zkontrolujte instalaci a konfiguraci GSSApi. Check your GSSApi configuration or choose another authentication method. Zkontrolujte nastavení GSSApi nebo vyberte jiný způsob ověření. %1 failed. Argument in this context will be a function name. Funkce %1 selhala. Reconnect session Znovu připojit relaci Cannot open file Nelze otevřít soubor Cannot create remote file Nelze vytvořit vzdálený soubor Cannot write to remote file Nelze zapisovat do vzdáleného souboru Error writing to socket. Chyba zápisu do soketu. Error reading channel. Chyba čtení z kanálu. Error reading from TCP socket. Chyba čtení z TCP soketu. SshProcess Error creating socket. Při vytváření soketu došlo k chybě. Error binding Chyba při vytváření vazby na XSettingsWidget Open File Otevřít soubor Executable (*.exe) Spustitelné soubory (*.exe) XSettingsWidgetUI Form Form You must restart the X2Go Client for the changes to take effect Změny se projeví až po restartování X2Go Client use integrated X-Server Použít integrovaný X-Server do not use primary clipboard Nepoužívat primární schránku use custom X-Server Použít vlastní X-Server custom X-Server Vlastní X-Server executable: Příkaz: start X-Server on X2Go Client start Spustit X-Server při startu X2Go Client command line options: Parametry: X-Server command line options Parametry X-Serveru window mode: Režim okna: fullscreen mode: Režim celé obrazovky: single application: Samostatná aplikace: whole display: Celý monitor: x2goclient-4.1.2.3/res/i18n/x2goclient_da.ts0000644000000000000000000063042214447111613015276 0ustar AppDialog Published Applications Not sure if this is the best name for it. Udgivet Programmer Search: Søg: &Start &Start &Close &Luk Multimedia Multimedie Development Udvikling Education Undervisning Game Spil Graphics Grafik Network Netværk Office Kontor Settings Indstillinger System System Utility Tilbehør Other Andet BrokerPassDialogUi Dialog Dialog Old password: Nuværende kodeord: New password: Nyt kodeord: Confirm password: Bekræft kodeord: TextLabel TekstMærkat BrokerPassDlg Passwords do not match Kodeord er ikke ens CUPSPrintWidget Form Formular Name: Navn: Properties Egenskaber State: Tilstand: Accepting jobs: Accepterer jobs: Type: Type: Location: Placering: Comment: Kommentar: Idle Inaktiv Printing Printer Stopped Stoppet Yes Ja No Nej CUPSPrinterSettingsDialog No option selected Ingen indstilling valgt This value is in conflict with another option. Options conflict. This value is in conflict with other option Denne værdi er I strid med en anden indstilling Options conflict Indstillings konflikt ConTest Connectivity test Forbindelses test HTTPS connection: HTTPS forbindelse: SSH connection: SSH forbindelse: Connection speed: Forbindelseshastighed: Failed Mislykket 0 Kb/s 0 Kb/s OK OK Socket operation timed out. Failed: Mislykkedes: ConfigDialog General Generelt Display icon in system tray Vis ikon i ikon bakke Hide to system tray when minimized Minimer til ikon bakke Hide to system tray when closed Skjul i ikon bakke når programmet lukkes Hide to system tray after connection is established Minimer til ikon bakke efter forbindelse til server Restore from system tray after session is disconnected Vis hovedvindue fra ikon bakke efter forbindelse er afbrudt Use LDAP Brug LDAP Server URL: Server URL: BaseDN: BaseDN: Failover server 1 URL: Failover server 1 URL: Failover server 2 URL: Failover server 2 URL: X.Org Server settings PulseAudio settings Disable PulseAudio Disable sound input Your XQuartz version is too old. Your are using XQuartz (X Window System Server for OS X) version %1. This version causes problems with X applications in 24bit color mode. You should update your X11 environment. MacPorts users please follow the steps outlined on: <center><a href="https://guide.macports.org/chunked/using.common-tasks.html">https://guide.macports.org/chunked/using.common-tasks.html</a></center> Users who have installed XQuartz via the installer package can find updated versions on: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> No valid XQuartz application selected. You did not select a valid XQuartz application. Please try again. Some standard installation locations may be: <center><b>/Applications/Utilities/X11.app</b></center> <center><b>/Applications/Utilities/XQuartz.app</b></center> <center><b>/Applications/MacPorts/X11.app</b></center> X-Server settings X-server indstillinger X11 application: X11 applikation: X11 version: X11 version: Find X11 application Find X11 applikation Clientside SSH port for file system export usage: Klienten's SSH port til filsystem-eksportering: Start session embedded inside website Start session indlagt i et website Advanced options Avanceret indstillinger Defaults Standardindstillinger &OK &OK &Cancel &Annuller Settings Indstillinger Printing Udskrift Warning Advarsel x2goclient could not find any suitable X11 Application. Please install Apple X11 or select the path to the application x2goclient kunne ikke finde nogen brugbar X11 Applikationer. Installer venligtst Apple X11 eller specificer stien til applikationen Your are using X11 (Apple X-Window Server) version Du bruger X11 (Apple X Window Server) version . This version causes problems with X-application in 24bit color mode. You should update your X11 environment (http://trac.macosforge.org/projects/xquartz). . Denne version forårsager problemer med X applikationer i 24bit farver. Du bør opdatere dit X11 miljø (http://trac.macosforge.org/projects/xquartz). No suitable X11 application found in selected path Der blev ikke fundet en X11 applikation i den specificerede sti &Connection &Forbindelse &Input/Output &Input/Output &Media &Medie &Settings &Indstillinger ConnectionWidget &Connection speed &Forbindelseshastighed Connection speed: Forbindelseshastighed: C&ompression K&omprimering Method: Metode: Compression method: Komprimerings metode: Image quality: Billed kvalitet: CupsPrinterSettingsDialog Dialog Dialog General Generelt Page size: Side størrelse: Paper type: Papir type: Paper source: Papir kilde: Duplex Printing Duplex Udskrivning None Intet Long side Lang side Short side Kort side Driver settings Driver indstillinger Option Indstilling Value Værdi No option selected Ingen mulighed valgt text tekst EditConnectionDialog &Session &Session &Connection &Forbindelse &Input/Output &Input/Output &Media &Medie &Shared folders &Delte mapper &OK &OK &Cancel &Annuller Defaults Standard Session preferences - Session's indstillinger ExportDialog &Cancel &Annuller &share &del &Preferences ... &Præferencer ... &Custom folder ... &Brugerspecificeret mappe ... Delete Delete Fjern Share Folders share folders del mapper Select folder Vælg mappe FolderButton Sessions folder Find Din Sessions Mappe Sessions mappe FolderExplorer Folders Mapper Create New Folder Tryk her for at lave en ny mappe. Lav Ny Mappe Rename Folder... Tryk her for at give et nyt navn til mappe. Omdøb Mappe... Change Icon... Tryk her for at skifte ikon. Skift Ikon... Delete Folder... Tryk her for at slette en mappe Fjern Mappe... Rename Folder ... Change Icon ... Delete Folder ... Open picture Tryk her for at åbne et billede Åben billede Pictures Billeder X2Go Client X2Go Klient Folder Name: Angiv mappe navn Mappe Navn: Error Fejl Unable to remove " Var ikke muligt at fjerne Kan ikke fjerne " ". Folder is not empty. Please remove the contents of this directory and try again. ". Folder is not empty. Please remove content of folder and try again. Alle filer skal være fjernet fra den valge mappe. for at kunne fjerne den valgte mappe. Denne mappe er ikke tom. Venligst slet eller fjern alle filer i denne mappe og prøv igen. Delete folder " Tryk her for at fjerne denne mappe FJern mappe New Folder Ny Mappe Help Shows this message. Prints version information. Shows the changelog. Shows git information as used at compile time. [Deprecated: please use --version.] Shows available pack methods. Do not resume sessions automatically. Hides menu bar. Disables session editing. Starts maximized. Starts hidden (minimized to system tray where available.) Starts in "portable" mode. Forces OpenPGP smart card authentication. Disable PulseAudio. Disable sound input. Enables Xinerama by default. Allows client side printing in LDAP mode. Enables thinclient mode. Starts without a window manager. Enables shutdown button. Adds RSA key fingerprint to ".ssh/known_hosts" if authenticity of the server can't be determined. Starts with LDAP support. Example: --ldap=ldapserver:389:o=organization,c=de Defines the first LDAP failover server. Defines the second LDAP failover server. Defines the remote SSH server port. Default: 22. Defines the local machine's SSH server port. Needed for Client-Side Printing and File Sharing support. Default: 22. Sets the default command. Default: 'KDE' (Desktop Session) Starts the session named "session". Sets the user name for connecting to the remote SSH server to "username". Sets the default window geometry. Default: 800x600. Sets the remote X2Go Agent's DPI value to "dpi". Default: same as local display. Sets the default link type. Default: "adsl". Sets default pack method. Default: "16m-jpeg-9". Sets the default clipboard mode. Default: "both". Sets the default keyboard layout to "layout". "layout" may be a comma-separated list. Sets the default keyboard type. Sets the user's home directory. Enables or disables overwriting the current keyboard settings. Automatically launches the application(s) "app", "app2", ... on session start in Published Applications mode. Defines an alternative session config file path. Force-enables session system tray icon. Automatically closes X2Go Client after a disconnect. Hides all Folder-Sharing-related options. Sets the broker name to display in X2Go Client. This parameter is optional. Sets the path to an SSH key to use for authentication against an SSH session broker. The client's behavior is undefined if this flag is used for non-SSH session brokers. Enables the use of the default SSH key or SSH agent for authentication against an SSH session broker. The client's behavior is undefined if this flag is used for non-SSH session brokers. Does not ask for user credentials during session broker authentication. This can be useful if you are using an HTTP(S) session broker without authentication. If you run an HTTP(S) server without authentication, but with user-specific profiles, then put the user name into the broker URL (refer to --broker-url.) The user name then will be extracted from the broker URL and be sent to the session broker. The client's behavior is undefined if this flag is used for non-HTTP(S) session brokers. Use broker credentials as session user/password credentials when using broker mode with broker authentication. Currently only affects direct RDP sessions. Enables broker logout button. Use a custom/branded background image (SVG format) for X2Go Client's main window. If a directory is given, will randomly pick an SVG file inside of it. Use a custom icon (SVG format) for additional branding to replace the default in the lower left corner of X2Go Client's main window. Disables X2Go Client's UNIX cleanup helper. This will prevent X2Go Client from terminating spawned processes after the main program terminates or crashes. Use with care and when in doubt, do not use this parameter at all. HelpDialog Options Indstillinger HttpBrokerClient us us pc105/us pc105/us Error Fejl Login failed!<br>Please try again Login fejlede!<br>Prøv venligst igen Your session was disconnected. To get access to your running session, please return to the login page or use the "reload" function of your browser. Din session blev frakoblet. For at få adgang til din igangværende session, skal du gå til login siden eller trykke på "opdater" i din browser. Host key for server changed. It is now: Host nøgle for serveren er skiftet. Den er nu: For security reasons, connection will be stopped Af sikkerhedsmæssige årsager, bliver denne forbindelse lukket The host key for this server was not found but an othertype of key exists.An attacker might change the default server key toconfuse your client into thinking the key does not exist Host nøglen for denne server var ikke fundet, men en anden type nøgle eksistere. en ukendt person har muligt skiftet den standard server nøgle for at forvirre din klient til at tro at nøglen ikke findes Could not find known host file.If you accept the host key here, the file will be automatically created Kunne ikke finde kendte host fil. Hvis du accepterer serverens host nøgle, vil filen automatisk blive skabt The server is unknown. Do you trust the host key? Public key hash: Serveren er ukendt. Stoler du på denne host nøgle? offentlig nøgle hash: Host key verification failed Host nøgle bekræftelsen fejlede Yes Ja No Nej Verification code: Godkendelses kode: Enter passphrase to decrypt a key Indtast kodeord for at dekryptere en nøgle Authentication failed Autentificering fejlede <br><b>Server uses an invalid security certificate.</b><br><br> <br><b>Serveren bruger et ugyldigt sikkerheds certifikat</b><br><br> <p style='background:#FFFFDC;'>You should not add an exception if you are using an internet connection that you do not trust completely or if you are not used to seeing a warning for this server.</p> <p style='background:#FFFFDC;'>Du bør ikke tilføje en undtagelse hvis du bruger en internet forbindelse som du ikke fuldstændig stoler på eller som du ikke er vant til at se advarsler for denne server.</p> Secure connection failed Sikker forbindelse fejlede For security reasons, the connection attempt will be aborted. The host key for this server was not found but another type of key exists. An attacker might have changed the default server key to trick your client into thinking the key does not exist yet. Could not find known hosts file. If you accept the host key here, the file will be automatically created. Host key verification failed. Enter user account password: Authentication failed. Login failed!<br>Please try again. Secure connection failed. Issued to: Udstedt til: Common Name(CN) Fælles Navn(CN) Organization(O) Organisation(O) Organizational Unit(OU) Organisations Enhed(OU) Serial Number Serie nummer Issued by: Udstedt af: Validity: Gyldighed: Issued on Udstedt den expires on udløber den Fingerprints: Fingeraftryk: SHA1 SHA1 MD5 MD5 Exit X2Go Client Luk X2Go-Klienten Add exception Tilføj undtagelse InteractionDialog Terminal output: Cancel Annuller Reconnect Genoptag MediaWidget Sound Lyd Enable sound support Aktiver lyd support Start sound daemon Start lyd daemon Use running sound daemon Brug kørende Lyd daemon Use SSH port forwarding to tunnel sound system connections through firewalls brug SSH port forwarding til at føre lydsystemets forbindelse igennem firewalls Use default sound port Brug standard lyd port Sound port: Lyd port: Client side printing support Support til udskrifter på klientsiden Deprecation Warning ARTS support is scheduled to be removed soon. Please upgrade to PulseAudio. ESounD support is scheduled to be removed soon. Please upgrade to PulseAudio. ONMainWindow Starting x2goclient... Starter x2goclient... us us pc105/us pc105/us X2Go Client X2Go Klient connecting forbinder Internet browser Internet browser Email client Email klient OpenOffice.org OpenOffice.org Terminal Terminal Starting x2goclient in portable mode... data directory is: Starter x2goclient i flyttebar tilstand... data filsti er: &Settings ... &Indstillinger ... Support ... Support ... About X2GO client Om X2GO klient Started x2goclient. Startede x2goclient. Can't load translator: Kan ikke åbne oversætter: Translator: Oversætter: installed. Installeret. Share folder... Del mappe... Suspend Suspender Terminate Afbryd Reconnect Genoptag Detach X2Go window Løsriv X2Go vinduet Minimize toolbar Minimere værktøjslinie Session: Session: &Quit &Afslut Ctrl+Q Ctrl+Q Quit Afslut &New session ... &Ny session ... Ctrl+N Ctrl+N Session management... Sessionshåndtering... Ctrl+E Ctrl+E &Create session icon on desktop... &Opret sessions ikon på skrivebordet... &Set broker password... &Sæt broker kodeord... &Connectivity test... &forbindelses test... Show toolbar Vis værktøjslinie About Qt Om Qt Ctrl+Q exit Ctrl+Q &Session &Session &Options &Indstillinger &Help &Hjælp Login: Login: Error Fejl Operation failed Handling fejlede Password changed Kodeord er ændret Wrong password! Forkert kodeord! Connecting to broker Forbinder til broker <b>Authentication</b> <b>Autentifikation</b> Restore Gendan Not connected Ikke forbundet Multimedia Multimedia Development Udvikling Education Undervisning Game Spil Graphics Grafik Network Netværk Office Kontor Settings Indstillinger System System Utility Værktøj Other Andet Left mouse button to hide/restore - Right mouse button to display context menu Venstre musknap for at skjule/gendanne - Højre musknap for at vise kontekst menu Closing x2goclient... Lukker x2goclient... Closed x2goclient. Lukket x2goclient. Please check LDAP settings Venligst undersøg LDAP indstillinger no X2Go server found in LDAP ingen X2Go server fundet i LDAP Create session icon on desktop Opret sessionsikon på skrivebord Desktop icons can be configured not to show x2goclient (hidden mode). If you like to use this feature you'll need to configure login by a gpg key or gpg smart card. Use x2goclient hidden mode? Skrivebordsikoner kan indstilles til ikke at vise x2goklienten (skjult tilstand). Hvis du vil bruge denne feature skal du konfigurere login med gpg nøgle eller gpg smart card. Slå skjult tilstand til? Show session tray icon when running Vis session meddelelses ikon når programmer køre New Session Ny Session X2Go Link to session X2Go Link til session No X2Go sessions found, closing. Ingen X2Go sessioner Fundet, Lukker. wrong value for argument"--clipboard" Ugyldig værdi for "--clipboard" argumentet SSH Error SSH Fejl SSH daemon could not be started. You'll need SSH daemon for printing and file sharing. Normally, this should not happen as X2Go Client for Windows ships its internal sshd.exe. If you see this message, please report a bug against the X2Go bugtracker. SSH daemon kunne ikke blive started Du skal bruge SSH daemon for at kunne udskrive og dele filer Normalt, burde dette ikke ske da X2Go Klienten for Windows kommer med programmet sshd.exe. Vis du ser denne besked. send venlight en fejl rapport til X2Go bugtracker. SSH daemon is not running. You'll need SSH daemon for printing and file sharing Please ask your system administrator to provide the SSH service on your computer. SSH daemon køre ikke. Du skal bruge SSH daemon for at kunne printe og dele filer Venligst forsprøg din system administrater i at give dig adgang til SSH servicen på din computer. SSH daemon failed to open the application's public host key. SSH daemon fejlede i at åbne programmet's offentlig vært's nøgle. SSH daemon failed to open the application's public key used for exporting folders and printers. SSH daemon fejlede i at åbne programmet's offentlig nøgle til brug for at eksporter mapper og printer. SSH daemon failed to open the application's authoized_keys file. SSH daemon fejlede i at åbne programmet's autoriseret_nøgler filen. X2Go sessions not found X2Go sessioner blev ikke fundet Are you sure you want to delete this session? Er du sikker på at du vil slette denne session? KDE KDE RDP connection RDP forbindelse XDMCP XDMCP Connection to local desktop Forbindelse til lokalt skrivebord on Starting connection to server: Starter forbindelse til server: to til Connection Error( Forbindelses Fejl( Couldn't find a SSH connection. Kunne ikke finde en SSH forbindelse. Enter passphrase to decrypt a key Indtast kodeord for at dekryptere en nøgle Host key for server changed. It is now: Værts nøgle for serveren er ændret. Den er nu: For security reasons, connection will be stopped Forbindelsen afbrydes af sikkerhedsårsager The host key for this server was not found but an othertype of key exists.An attacker might change the default server key toconfuse your client into thinking the key does not exist Serverens host key blev fundet, men en anden type nøgle eksisterer. En angriber kan ændre standardnøglen på serveren for at narre din klient til at tro at nøglen ikke eksisterer Could not find known host file.If you accept the host key here, the file will be automatically created Kunne ikke finde kendt host fil. Hvis du accepterer serverens host nøgle, vil filen automatisk blive skabt The server is unknown. Do you trust the host key? Public key hash: Serveren er ukendt. Stoler du på denne værts nøgle? Offentlig nøgle hash: Host key verification failed Værts nøgle bekræftelse fejlede Verification code: Godkendelses kode: This can be an indication of a man-in-the-middle attack. Somebody might be eavesdropping on you. For security reasons, it is recommended to stop the connection. Do you want to terminate the connection? Dette kan være en indikation af mand i midten angreb. Det er muligt nogen lytter med på din forbindelse. Af sikkerheds grunde anbefaler vi du stopper forbindelsen. Vil du afslutte forbindelsen? Yes Ja No Nej If you accept the new host key the security of your connection may be compromised. Do you want to update the host key? Hvis du acceptere den nye vært nøgle, er sikkerheden på din forbindelse muligt blevet kompromitteret. Vil du gerne opdatere værts nøglen? The host key for this server was not found but an othertype of key exists. An attacker might change the default server key to confuse your client into thinking the key does not exist. For security reasons, it is recommended to stop the connection. Do you want to terminate the connection? Værts nøglen for denne server blev ikke fundet, men en anden type af nøglen eksistere. En angreber kan ske at ændre standard nøglen for at forvirre din klient til at tro nøglen ikke eksistere. Af sikkerhedsmæssige årsager, er det anbefalet at du stopper forbindelsen. Vil du afslutte forbindelsen? Authentication failed: Godkendelse Fejlede: Authentication failed Godkendelse fejlede Enter password for SSH proxy Indtast kodeord til SSH proxy <b>Connection failed</b> <b>Forbindelsen mislykkedes</b> <b>Wrong password!</b><br><br> <b>Forkert kodeord!</b><br><br> Connection failed: Forbindelse Fejlede: - Wrong password. Forkert kodeord. unknown ukendt No server availabel Ingen server tilgængelig Server not availabel Server er ikke tilgængelig Select session: Vælg session: running kører suspended suspenderet Desktop Skrivebord single application enkelt applikation shadow session skygge session Information Information No accessible desktop found Intet tilgængeligt skrivebord fundet Filter Filtrer Select desktop: Vælg skrivebord: Warning Advarsel Your current color depth is different to the color depth of your x2go-session. This may cause problems reconnecting to this session and in most cases <b>you will loose the session</b> and have to start a new one! It's highly recommended to change the color depth of your Display to Din nuværende farvedybde er anderledes end din x2go sessions farvedybde. Dette kan skabe problemer med at genoptage sessionen og i de fleste tilfælde <b>vil du miste din session</b> og være nødt til at starte en ny! det anbefales kraftigt at skifte farvedybden på dit Skærmbillede til 24 or 32 24 eller 32 bit and restart your X-server before you reconnect to this x2go-session.<br>Resume this session anyway? bit og genstart din X server før du genoptager din x2go session.<br>Vil du fortsætte alligevel? suspending suspenderer terminating afbryder <b>Wrong Password!</b><br><br> <b>Forkert Kodeord!</b><br><br> New session started Ny session er startet Session resumed Session genoptaget Unable to create folder: Ikke i stand til at lave mappe: Unable to write file: Kunne ikke skrive filen: Emergency exit. Nødudgang. Waiting for proxy to exit. Venter på at proxy afslutter. Failed, killing the proxy. Fejlede med at afslutte proxy. Wrong parameter: Forkerte parameter: Help Hjælp Pack Methodes Pakke Metoder Option is not availabel in this build Denne mulighed er ikke til tilgængelig i denne version Changelog Opdaterings Log Ændringslog Git Info Git Information Unable to create folder: Kunne ikke oprette mappe: Unable to write file: Kunne ikke skrive fil: Attach X2Go window Tilkobl X2Go vindue Unable to create SSL tunnel: Kunne ikke oprette SSL tunnel: Unable to create SSL Tunnel: Kunne ikke oprette SSL Tunnel: Finished Afsluttet starting starter resuming fortsætter Connection timeout, aborting Forbindelse fik timeout, afbryder aborting afbryder Are you sure you want to terminate this session? Unsaved documents will be lost Er du sikker på du vil afbryde denne session? Ugemte dokumenter vil gå tabt Session Session Display Skærmbillede Creation time Skabelsestid <b>Connection failed</b> : <b>Forbindelse mislykkedes</b> : (can't open file) (filen kan ikke åbnes) (file not exists) (filen eksisterer ikke) (directory not exists) (stien findes ikke) wrong value for argument"--link" Ugyldig værdi for "--link" argumentet wrong value for argument"--sound" Ugyldig værdi for "--sound" argumentet wrong value for argument"--geometry" Ugyldig værdi for "--geometry" argumentet wrong value for argument"--set-kbd" Ugyldig værdi for "--set-kbd" argumentet wrong value for argument"--ldap" Ugyldig værdi for "--ldap" argumentet wrong value for argument"--ldap1" Ugyldig værdi for "--ldap1" argumentet wrong value for argument"--ldap2" Ugyldig værdi for "--ldap2" argumentet wrong value for argument"--pack" Ugyldig værdi for "--pack" argumentet wrong parameter: Forkert parameter: Options Indstillinger Available pack methodes: Tilgængelige pakke metoder: RSA file empty. RSA filen er tom. Can not open key: Kan ikke åbne nøgle: Support Support </b><br> (C. 2005-2016 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br> </b><br> (C. 2005-2016 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br> <br>x2goplugin mode was sponsored by <a href="http://www.foss-group.de/">FOSS-Group GmbH(Freiburg)</a><br> <br>x2goplugin mode blev sponsoreret af <a href="http://www.foss-group.de/">FOSS-Group GmbH(Freiburg)</a><br> <br>Client for use with the X2Go network based computing environment. This Client will be able to connect to X2Go server(s) and start, stop, resume and terminate (running) desktop sessions. X2Go Client stores different server connections and may automatically request authentication data from LDAP directories. Furthermore it can be used as fullscreen loginscreen (replacement for loginmanager like xdm). Please visit x2go.org for further information. <br>Klient til brug med X2Go's netværksbaserede computer miljø. Denne klient vil kunne forbinde til X2Go servere og starte, stoppe, fortsætte og afslutte (igangværende) skrivebord's sessioner. X2Go-Klienten lagrer forskellige server forbindelser og kan automatisk lave forespørgsler til LDAP tjenester om autentificeringsdata. Den kan desuden bruges som fuldskærmslogin (erstatning for loginmanagers som xdm) Besøg venligst x2go.org for yderligere information. <b>X2Go Client V. <b>X2Go Client V. Please check LDAP Settings Venligst undersøg LDAP indstillinger No valid card found Intet gyldigt kort fundet Card not configured. Kort er ikke konfigureret. This card is unknown by X2Go system Denne kort er ukendt af X2Go systemet Unable to create file: Ikke i stand til at lave fil: Can't connect to X server Please check your settings Kan ikke forbinde til x server Undersøg venligst dine indstillinger Can't start X server Please check your settings Kan ikke starte X server Undersøg venligst dine indstillinger Can't start X Server Please check your installation Kan ikke starte X Server Undersøg venligst din installation Unable to execute: Kunne ikke udføre handling: Remote server does not support file system export through SSH Tunnel Please update to a newer x2goserver package Fjernserveren understøtter ikke fil system eksportering igennem en SSH Tunnel Venligst opdater til en nyere version af x2goserver pakken Unable to read : Kunne ikke læses : Unable to write : Kunne ikke skrive : WINDOWS-1252 WINDOWS-1252 ISO8859-1 ISO8859-1 Error getting window geometry (window closed)? Fejl ved hentning af vindue geomatri (vinduet lukkede)? X2Go Session X2Go Session wrong value for argument"speed" Ugyldig værdi for "speed" argumentet Password: Kodeord: Keyboard layout: Tastatur layout: Ok Ok Cancel Annuller <b>Session ID:<br>Server:<br>Username:<br>Display:<br>Creation time:<br>Status:</b> <b>Sessions ID:<br>Server:<br>Brugernavn:<br>Skærmbillede:<br>Skabelsestid:<br>Status:</b> Applications... Applikationer... Starting X2Go Client %1... Starting X2Go Client in portable mode. Data directory is: About X2Go Client Started X2Go Client. found. Non-fatal: can't load translator: Trying to load language with lower preference, if existent. Session management ... &Create session icon on desktop ... &Set broker password ... &Connectivity test ... Share folder ... A click displays the context menu. A left click hides or restores the window. A right click displays the context menu. Closing X2Go Client ... Finished X2Go Client closing hooks. Broker authentication failed! no X2Go Server found in LDAP Connection error: Couldn't find an SSH connection. Enter user account password: This can be an indication of a man-in-the-middle attack. Somebody might be eavesdropping on you. For security reasons, it is recommended to stop the connection attempt. Do you want to terminate the connection? Host key verification failed. The host key for this server was not found but another type of key exists. An attacker might have changed the default server key to trick your client into thinking the key does not exist yet. For security reasons, it is recommended to stop the connection attempt. Do you want to terminate the connection? Could not find known hosts file. If you accept the host key here, the file will be automatically created. Authentication failed. XDM RDP <b>Connection failed.</b> No server available. Server not available. X2GoKDrive session No accessible desktop found. PulseAudio is not running Sound output will be disabled for this session. Please enable PulseAudio in the configuration dialog or disable sound in the session settings Unable to create SSH tunnel for X2Go session (NX) startup: Unable to create SSH tunnel for audio data: failed to start. This likely means the binary is not available. The current search path is: returned a non-zero exit code or crashed otherwise. Execution failed, exit code was: didn't start up in time. This error shouldn't come up. didn't accept a write operation. It is probably not running correctly or crashed in-between. Unable to read from xmodmap. encountered an unknown error during start up or execution. experienced an undefined error. X2Go Client will now terminate. File a bug report as outlined on the <a href="http://wiki.x2go.org/doku.php/wiki:bugs">bugs wiki page</a>. Failed to start RDP or XDMCP client Check session settings and ensure that selected client is installed on your system. Proxy didn't terminate after 3 seconds. Killing the proxy. Closing X2Go Client because it was started in hidden mode. Closing X2Go Client because the --close-disconnect parameter was passed. Are you sure you want to terminate this session? Unsaved documents will be lost. <b>Connection failed.</b> : (file does not exist) (directory does not exist) Invalid value for parameter "--link". Invalid value for parameter "--clipboard". Invalid value for parameter "--sound". Invalid value for parameter "--geometry". Invalid value for parameter "--set-kbd". Invalid value for parameter "--ldap". Invalid value for parameter "--ldap1". Invalid value for parameter "--ldap2". Invalid value for parameter "--pack". Available pack methods: Pack Methods Option is not available in this build. Unable to create directory: <br>(C) 2005-2023 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> Translators, feel free to add a localized version of your translation including a copyright notice and your name(s). Remember to keep a <br> at the end, though. English example for a potential translation: <br>(C) 2005-2023 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br>English version: (C) 20AB-20CD Trans Lator <trans@la.tor><br> Check whether the package providing "pcsc_scan" is installed. The current search path is: Unable to create or append to file: Unable to change the permissions of file: This is an error because sshd would deny such a file. Unable to change the permissions of directory: This is an error because sshd would deny such a directory. Can't start X.Org Server. Please check your installation. X.Org Server did not launch correctly after %n tries. %n will be substituted with the current number of tries Unable to find the sftp-server binary. Neither bundled, nor found in $PATH nor additional directories. If you are using a Linux-based operating system, please ask your system administrator to install the package containing the sftp-server binary. Common names are <b>openssh</b>, <b>openssh-server</b> or <b>openssh-sftp-server</b> depending upon distribution. If the sftp-server binary is installed on your system, please report a bug mentioning its path on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> SSH key type selection error Unknown SSH key selected. Terminating application. SSH key base directory creation error Unable to create SSH key base directory '%1'. ssh-keygen launching error Unable to start the ssh-keygen binary. ssh-keygen crashed The ssh-keygen binary crashed. ssh-keygen program error The ssh-keygen binary did not exit cleanly. It was probably called with unknown arguments. Unable to open newly generated %1 public host key file. %1 public host key file empty. Cannot open key: You have enabled Remote Printing or File Sharing. These features require a running and functioning SSH server on your computer. <b>Printing and File Sharing will be disabled for this session.</b> Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server. If you see this message, please report a bug on: The SSH server failed to start. Please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server and automatically generates the required keys. If you see this message, please report a bug on: X2Go Client was unable to create SSH host keys. Please report a bug on: libssh initialization failure Unable to initialize libssh. Your current color depth is different from the session's color depth. This may cause problems reconnecting to this session and in most cases <b>you will lose the session</b> and have to start a new one! It's highly recommended to change the color depth of your display to %n bit(s) and restart your X.Org Server before you reconnect to this X2Go session. %n will be replaced with a number <br />Do you want to resume this session anyway? <br>This is a client to access the X2Go network-based computing environment. This client will be able to connect to X2Go Server(s) and start, stop, resume and terminate (running) desktop sessions. X2Go Client stores different server connections and may automatically request authentication data from LDAP directories. Furthermore, it can be used as a fullscreen login screen (replacement for login managers like XDM). Please visit <a href="http://www.x2go.org">the project home page at x2go.org</a> for further information. <b>X2Go Client v. Please check LDAP Settings. didn't start yet. Unable to read from scdaemon. No valid card found. This card is unknown to the X2Go system. Can't start X.Org Server. Please check your installation. Remote server does not support file system exports through SSH tunnels. Please update your x2goserver package. Unable to create SSH tunnel for Folder Sharing and Printing support: Unable to read: Error getting window geometry. (Did you close the window?) Invalid value for argument "speed" Applications ... Abort Afbryd Show details Vis detaljer Resume Fortsæt New Ny Full access Fuld adgang View only Kun synlig Status Status Command Kommando Type Type Server Server Client IP Klient IP Session ID Sessions ID User Bruger Only my desktops Kun mine skrivebord SSH daemon could not be started. Disabling Remote Printing or File Sharing support in the session settings will get rid of this message. SSH daemon failed to open its public host key. SSH daemon failed to open the application's authorized_keys file. sshd not started, you'll need sshd for printing and file sharing you can install sshd with <b>sudo apt-get install openssh-server</b> sshd er ikke startet, du får brug for sshd til udskrifter og fildeling du kan installere sshd med <b>sudo apt-get install openssh-server</b> Restore toolbar Gendan værktøjslinie <br><b>&nbsp;&nbsp;&nbsp;Click this button&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;to restore toolbar&nbsp;&nbsp;&nbsp;</b><br> <br><b>&nbsp;&nbsp;&nbsp;Klik på denne knap&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;for at gendanne værktøjslinien&nbsp;&nbsp;&nbsp;</b><br> PrintDialog Print - X2Go Client Udskrift - X2Go Klient Print Udskrift You've deactivated the X2Go Client printing dialog. You may reactivate this dialog using the X2Go Client settings dialog. To do so, follow this path in the menu bar: Options -> Settings You've deactivated the x2go client printing dialog. Du har deaktiveret x2go klientens udskrifts dialog. You may reactivate this dialog using the x2goclient settings dialog (Menu -> Options -> Settings) Du kan genaktivere denne dialog i x2goclient indstillings dialogen (Menu -> Indstilinger -> Indstil PrintProcess Save File Gem Filen PDF Document (*.pdf) PDF Dokument (*.pdf) Failed to execute command: Udføring af kommando fejlede: Printing error. Printing error Udskriftsfejl PrintWidget Form Formel Print Udskriv View as PDF Se som PDF Print settings Printer indstillinger Printer: Printer: Print using default Windows PDF Viewer (Viewer application needs to be installed) Print med Windows standard PDF Viewer (Viewer applikationen skal være installeret) Printer command: Printer kommando: ... ... Viewer settings Fremviser indstillinger Open in viewer application Åben i fremviser applikationen Command: Kommando: Save to disk Gem til disk Show this dialog before start printing Vis denne dialog før udskrivning starter Please configure your client side printing settings.<br><br>If you want to print the created file, you'll need an external application. Typically you can use <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> and <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>You can find further information <a href="http://www.x2go.org/index.php?id=49">here</a>. Venligst konfiguere dine printerindstillinger på klientsiden.<br><br>Hvis du vil udskrive den skabte fil, vil du få brug for en ekstern applikation. Du kan typisk bruge <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> og <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>Du kan finde yderligere informationer <a href="http://www.x2go.org/index.php?id=49">her</a>. Please configure your client side printing settings.<br><br>If you want to print the created file, you'll need an external application. Typically you can use <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> and <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>You can find further information <a href="http://www.x2go.org/index.php?id=49">here</a>. PrinterCmdDialog Printer command Printer kommando Command Kommando Please enter your customized or individual printing command. Examples: kprinter lpr -P hp_laserjet Indtast din brugerdefineret printer kommando. f.eks.: kprinter lpr -P hp_laserjet Output format Output format Please choose the printing file format (regarding to your printing environment - if you use CUPS you may use PDF) Vælg venligst det rette format til udskriftsfil (i forhold til dit udskrifts miljø - Hvis du bruger CUPS kan du bruge PDF) PDF PDF PS PS Data structure Data struktur Please choose the method of printing file input (some commands accepting printing files as program options, some are awaiting data on standard input): vælg venligst den rette metode til udskriftsfilinput (nogle kommandoer accepterer udskriftsfiler som program muligheder, nogle venter på data fra standard input): standard input (STDIN) standard input (STDIN) Specify path as program parameter Specificer sti som program parameter Please enter your customized or individual printing command. Example: Indtaste venligst din brugerdefineret eller individuelle udskriftskommando f.eks: <Path to gsprint.exe> -query -color ? <Path to gsprint.exe> -query -color PulseManager Could not allocate buffer for getting current working directory! getcwd() failed! PulseAudio failed to start! Error fetching PulseAudio version number! Unexpected character found when parsing version string for major version number Unexpected character found when parsing version string for minor version number Unexpected character found when parsing version string for micro version number Supposed to skip major version number. Something is wrong. Unable to convert major version number string to integer. Unable to convert minor version number string to integer. Unable to convert micro version number string to integer. Unexpected format encountered. Unable to start PulseAudio binary. Unable to play startup sound. Sound support will not be available. If you downloaded the bundled, pre-compiled version from the official home page or the upstream Linux packages, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> QObject No response received from the remote server. Do you want to terminate the current session? Ingen svar modtaget fra fjern server. Vil du afslutte den nuværende session? X2Go Client could not find any suitable X11 server. X2Go Client could not start X11 server. X2Go Client requires XQuartz to be installed. If XQuartz is already installed on your system, please select the correct path in the now upcoming dialog. Refer to the end of this message for path examples, in case you do not know the exact location yourself. Should you have <b>not</b> installed XQuartz yet, please follow the outlined steps: MacPorts users, please install either the port <b>xorg-server</b> or the port <b>xorg-server-devel</b>. Upon successful installation, please follow the instructions printed by the port utility to autostart/load the server. All other users, please obtain and install XQuartz from: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> Afterwards, restart X2Go Client and select the correct path to the X11 application in the general X2Go Client settings. This will most likely be <center><b>/Applications/MacPorts/X11.app</b></center> or <center><b>/Applications/Utilities/XQuartz.app</b></center> SessionButton Session preferences... Sessions præferencer... Create session icon on desktop... Opret sessions ikon på skrivebordet... Session preferences ... Create session icon on desktop ... Delete session Fjern session Session actions Sessions handlinger Select type Vælg type Select resolution Vælg opløsning Toggle sound support Til/fravælg lyd understøttelse New Session Ny Session running kører suspended suspenderet KDE KDE RDP connection RDP forbindelse XDMCP XDMCP Connection to local desktop Forbindelse til lokalt skrivebord Published applications Udgivet Programmer fullscreen Fuldskærm Display Skærmbillede window vindue Maximum Maksimum Enabled Aktiveret Disabled Deaktiveret SessionExplorer Back Tilbage Create session icon on desktop Opret sessions ikon på skrivebordt Desktop icons can be configured not to show x2goclient (hidden mode). If you like to use this feature you'll need to configure login by a gpg key or gpg smart card. Use x2goclient hidden mode? Skrivebords ikoner kan indstilles til ikke at vise x2goklienten (skjult tilstand). Hvis du vil bruge denne funktion skal du konfigurere login med gpg nøgle eller gpg smart card. Brug x2goclient skjult tilstand? Create session icon on desktop. Desktop icons can be configured not to show X2Go Client (hidden mode.) If you like to use this feature you'll need to configure login via a GPG key or GPG Smart Card. Use X2Go Client's hidden mode? Show session tray icon when running Vis session ikon i ikon bakke når programmet køre New Session Ny Session X2Go Link to session X2Go Link til session Are you sure you want to delete this session? Er du sikker på at du vil fjerne denne session? SessionManageDialog E&xit E&xit &New session &Ny session &Session preferences &Sessions præferencer &Delete session &Fjern session &Create session icon on desktop ... &Create session icon on desktop... &Opret sessions ikon på skrivebordet... Delete Delete Fjern Session management Sessions håndtering SessionWidget Session name: Sessions navn: << change icon << skift ikon Path: Sti: &Server &Server Values ranging from <b>0</b> to <b>65535</b> are allowed.<br />A value of <b>0</b> will either use the port specified in the SSH configuration file belonging to a host or shortname, or use the default of <b>22</b>. Host: Vært: Login: Login: SSH port: SSH port: Use RSA/DSA key for ssh connection: Brug RSA/DSA nøgle til ssh forbindelse: Try auto login (ssh-agent or default ssh key) Prøv automatisk login (ssh-agent eller standard ssh nøgle) Kerberos 5 (GSSAPI) authentication Kerberos 5 (GSSAPI) autentificering Delegation of GSSAPI credentials to the server Delegation af GSSAPI legitimations oplysninger til serveren Use Proxy server for SSH connection Brug Proxy Server til SSH-forbindelse Proxy server Proxy server SSH SSH HTTP HTTP Same login as on X2Go Server Samme login som på X2Go Server Same password as on X2Go Server Samme kodeord som på X2Go Server RSA/DSA key: RSA/DSA nøgle: Run in X2GoKDrive (experimental) X2Go/X11 Desktop Sharing X2Go Client is running in portable mode. You should use a path on your USB device to be able to access your data wherever you are. Direct XDMCP connection ssh-agent or default ssh key ssh-agent eller standard ssh nøgle Type: Type: Port: Port: &Session type &Sessions type Session type: Sessions type: Connect to Windows terminal server Forbind til Windows terminal server XDMCP XDMCP Connect to local desktop Forbind til lokalt skrivebord Custom desktop Brugerdefineret skrivebord Single application Enkelt applikation Published applications Udgivet applikationer Command: Kommando: Advanced options... Avancerede indstillinger... Path to executable Sti til Program Direct RDP Connection Direkt RDP Forbindelse RDP port: RDP port: Open picture Åben billede Pictures Billeder Open key file Åben nøglefil Try auto login (via SSH Agent or default SSH key) SSH Agent or default SSH key Connect to Windows Terminal Server Direct RDP connection All files Alle filer Error Fejl x2goclient is running in portable mode. You should use a path on your usb device to be able to access your data whereever you are x2go klienten kører i bærbar tilstand. Du bør bruge en sti på din usb enhed så du kan få adgang til dine data uanset hvor du er Server: Server: XDMCP server: XDMCP server: direct XDMCP connection rdesktop command line options: rdesktop kommandolinie parametre: New session Ny session SettingsWidget &Display &Skærmbillede &Keyboard &Tastatur Sound Lyd &Clipboard Mode &Clipboard Tilstand Bidirectional copy and paste tovejs kopier og indsæt Copy and paste from client to server Kopier og indsæt fra klient til server Copy and paste from server to client Kopier og indsæt fra server til klient Disable clipboard completely Deaktivere clipboard fuldstendigt Auto detect keyboard settings Auto opdage tastetur instillinger Do not configure keyboard Konfigurer ikke tasteturet Configure keyboard Konfigurer tasteturet Model: model: Layout: Opsætning: Variant: Variant: RDP Client RDP Klient &Clipboard mode Fullscreen Fuldskærm Custom Tilpasset Window Vindue Use whole display Bruge hele skærmbilledet Maximum available Maximalt tilgængelige Set display DPI Sæt Skærmbillede DPI Xinerama extension (support for two or more physical displays) Xinerama udvidelse (understøtter to eller flere fysiske displays) Width: Bredde: Height: Højde: &Display: &Skærmbillede: &Identify all displays &Identificer alle skærme Auto-detect keyboard settings RDP client FreeRDP/X11 (pre-2.x style options) FreeRDP/X11 (2.x style options) Keep current keyboard Settings Behold nuværende tastaturindstillinger Keyboard layout: Tastatur layout: Keyboard model: Tastaturmodel: Enable sound support Aktiver lyd support Start sound daemon Start lyd daemon Use running sound daemon Brug kørende Lyd daemon Use SSH port forwarding to tunnel sound system connections through firewalls brug SSH port forwarding til at føre lydsystemets forbindelse igennem firewalls Use default sound port Brug standard lyd port Sound port: Lyd port: Client side printing support Support til udskrifter på klientsiden Additional parameters: Yderligere paramentre: Command line: Kommandolinje: XDMCP client us us pc105/us pc105/us password kodeord ShareWidget &Folders &Mapper Path Sti Automount Automonter Add Tilføj Delete Fjern Path: Sti: Filename encoding Encodning af filnavne local: Lokalt: remote: Fjern: Use SSH port forwarding to tunnel file system connections through firewalls X2Go Client is running in portable mode. You should use a path on your USB device to be able to access your data wherever you are. Use ssh port forwarding to tunnel file system connections through firewalls Brug ssh port forwarding til at føre filsystemsforbindelser igennem firewalls Select folder Vælg mappe Error Fejl x2goclient is running in portable mode. You should use a path on your usb device to be able to access your data whereever you are x2go klienten kører i bærbar tilstand. Du bør bruge en sti på din usb enhed så du kan få adgang til dine data uanset hvor du er WINDOWS-1252 WINDOWS-1252 ISO8859-1 ISO8859-1 SshMasterConnection SSH proxy connection error SSH proxy forbindelses fejl SSH proxy connection error. SSH proxy connection error: SSH proxy forbindelses fejl: Failed to create SSH proxy tunnel. Cannot create SSH session. Using environment-provided username. Cannot connect to proxy server. Authentication failed. Failed to start SSH client. Please check your installation and GSSApi configuration. Check your GSSApi configuration or choose another authentication method. Reconnect session Cannot open file Cannot create remote file Cannot write to remote file %1 failed. Argument in this context will be a function name. %1 fejlede. Error writing to socket. Error reading channel. Error reading from TCP socket. Failed to create SSH proxy tunnel kunne ikke skabe SSH proxy tunnel Can not initialize libssh Kunne ikke starte libssh Can not create ssh session Kunne ikke skabe ssh session Can not connect to proxy server Kan ikke forbinde til proxy server Can not connect to Kunne ikke forbinde til Authentication failed Autentificering fejlede channel_forward_listen failed channel_forward_listen fejlede Failed to start SSH Client. Please check your installation and GSSApi configuration kunne ikke starte SSH Klient. Venligst tjek din installation og GSSApi konfiguration Check your GSSApi configuration or choose another authentication method Tjek din GSSApi konfiguration eller vælg en anden godkendelses metode Can not open file Kan ikke åbne fil Can not create remote file Kan ikke skabe fjern fil Can not write to remote file Kan ikke skrive til fjern fil Cannot connect to kan ikke forbinde til channel_open_forward failed channel_open_forward fejlede channel_open_session failed channel_open_sesion fejlede channel_request_exec failed channel_request_exec fejlede error writing to socket Fejl ved skrivning til socket error reading channel fejl ved læsning af kanal channel_write failed channel_write fejlede error reading tcp socket fejl i læsning af tcp socket SshProcess Error creating socket Fejl i skabelse af socket Error creating socket. Error binding Fejl i binding XSettingsWidget Open File Åben Fil Executable (*.exe) eksekverbar (*.exe) XSettingsWidgetUI Form Formel You must restart the X2Go Client for the changes to take effect Du skal genstarte X2Go klienten før ændringerne træder i kraft use integrated X-Server brug integreret X-Server do not use primary clipboard brug ikke den primær udklipsholder use custom X-Server brug tilpasset X-Server custom X-Server tilpas X-Server executable: eksekverbar: start X-Server on X2Go Client start start X-Server sammen med X2Go klient command line options: Kommandolinje parametre: X-Server command line options X-Server Kommandolinje parametre window mode: Vindue tilstand: fullscreen mode: Fuldskærms tilstand: single application: Enkelt applikation: whole display: x2goclient-4.1.2.3/res/i18n/x2goclient_de.ts0000644000000000000000000102456614447111613015311 0ustar AppDialog Published Applications Veröffentlichte Anwendungen Search: Suche: &Start &Starten &Close S&chließen Multimedia Unterhaltungsmedien Development Entwicklung Education Bildung Game Spiele Graphics Grafik Network Internet Office Büroprogramme Settings Einstellungen System Systemwerkzeuge Utility Dienstprogramme Other Sonstige BrokerPassDialogUi Dialog Dialog Old password: Altes Kennwort: New password: Neues Kennwort: Confirm password: Kennwort wiederholen: TextLabel TextLabel BrokerPassDlg Passwords do not match Kennwörter stimmen nicht überein CUPSPrintWidget Idle Inaktiv Printing Druckt Stopped Angehalten Yes Ja No Nein Form Form Name: Name: Properties Eigenschaften State: Status: Accepting jobs: Aufträge werden angenommen: Type: Typ: Location: Adresse: Comment: Kommentar: CUPSPrinterSettingsDialog No option selected Keine Einstellung ausgewählt This value is in conflict with another option. Dieser Wert erzeugt einen Konflikt mit einer anderen Option. Options conflict. Einstellungskonflikt. This value is in conflict with other option Dieser Wert erzeugt einen Konflikt mit einer anderen Option Options conflict Einstellungskonflikt ConTest Connectivity test Verbindungstest HTTPS connection: HTTPS-Verbindung: SSH connection: SSH-Verbindung: Connection speed: Verbindungsgeschwindigkeit: Failed Fehlgeschlagen 0 Kb/s 0 Kb/s OK Ok Socket operation timed out. Zeitüberschreibung bei Socket-Operation. Socket operation timed out Zeitüberschreibung bei Socket-Operation Failed: Fehlgeschlagen: ConfigDialog Use LDAP Benutze LDAP LDAP Settings LDAP Einstellungen Server URL: Server URL: BaseDN: BaseDN: &OK &OK &Cancel A&bbrechen Failover Server 1 URL: Failover Server 1 URL: Failover Server 2 URL: Failover Server 2 URL: X-Server Settings X-Server Konfiguration Custom X-Server Eigener X-Server Reset to defaults Voreinstellungen Command: Befehl: Display: Displaynummer: Settings Konfiguration Applications (*.exe);;All Files (*.*) Anwendungen (*.exe);;Alle Dateien (*.*) Arguments: Argumente: Working directory: Arbeitsverzeichnis: X11 Application: X11 Applikation: X11 Version: X11 Version: Find X11 Application Suche X11 Applikation Warning Warnung x2goclient could not find any suitable X11 Application. Please install Apple X11 or select the path to the application x2goclient konnte keine passende X11 Installation finden. Bitte Installieren Sie Apple X11 oder wählen Sie den Pfad zu einer gültigen Installation Your are using X11 (Apple X-Window Server) version Sie verwenden die Apple X11 Umgebung in der Version . This version causes problems with X-application in 24bit color mode. You should update your X11 environment (http://trac.macosforge.org/projects/xquartz). . Es ist bekannt, dass bei dieser Version Darstellungsprobleme bei 24 Farbtiefe auftreten. Wir empfehlen Ihnen ein Update auf eine neuere Version (http://trac.macosforge.org/projects/xquartz). No suitable X11 application found in selected path Unter dem angegebenden Pfad konnte keine gültige X11 Installation gefunden werden Clientside SSH Port For File System Export Usage: SSH-Port für die Dateisystemfreigabe auf Clientseite: LDAP settings LDAP Einstellungen Failover server 1 URL: URL von Failover-Server 1: Failover server 2 URL: URL von Failover-Server 2: X-Server settings X-Server Konfiguration X11 application: X11 Applikation: X11 version: X11-Version: Find X11 application Suche X11-Applikation Clientside SSH port for file system export usage: SSH-Port für die Dateisystemfreigabe auf Clientseite: General Allgemein Printing Druck Start session embedded inside website Sitzung innerhalb einer Webseite anzeigen Display icon in system tray Symbol im Systemabschnitt der Kontrolleiste anzeigen Hide to system tray when minimized In den Systemabschnitt der Kontrolleiste minimieren Hide to system tray when closed Statt Schließen in den Systemabschnitt der Kontrollleiste minimieren Hide to system tray after connection is established Bei Verbindung in den Systemabschnitt der Kontrollleiste minimieren Restore from system tray after session is disconnected Nach Verbindungsende wiederherstellen X.Org Server settings X.Org-Server-Konfiguration Clientside (local) SSH daemon port for file system export usage: (lokaler) SSH-Daemon-Port für die Dateisystemfreigabe auf Clientseite: Advanced options Erweiterte Einstellungen Defaults Voreinstellungen Pulseaudio settings Pulseaudio-Einstellungen Disable audio input Audio-Eingang deaktivieren <font size="5">You must restart the X2Go Client for the changes to take effect</font><br><br> <font size="5">Sie müssen den X2GoClient neu starten, um die Änderungen zu aktivieren</font><br><br> PulseAudio settings PulseAudio-Einstellungen Disable PulseAudio PulseAudio deaktivieren Disable sound input Audio-Eingang deaktivieren Your XQuartz version is too old. Die Version von XQuartz ist zu alt. Your are using XQuartz (X Window System Server for OS X) version %1. Sie verwenden XQuartz (X-Window-System-Server für OS X) in der Version %1. This version causes problems with X applications in 24bit color mode. You should update your X11 environment. MacPorts users please follow the steps outlined on: <center><a href="https://guide.macports.org/chunked/using.common-tasks.html">https://guide.macports.org/chunked/using.common-tasks.html</a></center> Users who have installed XQuartz via the installer package can find updated versions on: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> Diese Version verursacht Probleme mit X-Anwendungen, wenn 24-Bit-Farbtiefe gesetzt sind. Sie sollten Ihre X11-Umgebung aktualisieren. MacPorts-Benutzer gehen bitte gemäß der folgenden Anleitung vor: <center><a href="https://guide.macports.org/chunked/using.common-tasks.html">https://guide.macports.org/chunked/using.common-tasks.html</a></center> Benutzer, die XQuartz über das Installationspaket installiert haben, können aktualisierte Versionen hier herunterladen: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> No valid XQuartz application selected. Keine gültige XQuartz-Anwendung ausgewählt. You did not select a valid XQuartz application. Please try again. Some standard installation locations may be: <center><b>/Applications/Utilities/X11.app</b></center> <center><b>/Applications/Utilities/XQuartz.app</b></center> <center><b>/Applications/MacPorts/X11.app</b></center> Sie haben keine gültige XQuartz-Anwendung ausgewählt. Bitte versuchen Sie es erneut. Übliche Installationspfade sind zum Beispiel: <center><b>/Programme/Dienstprogramme/X11.app</b></center> <center><b>/Programme/Dienstprogramme/XQuartz.app</b></center> <center><b>/Programme/MacPorts/X11.app</b></center> &Connection &Verbindung &Input/Output E&in-/Ausgabe &Media &Medien &Settings &Einstellungen ConnectionWidget &Connection speed &Verbindungsgeschwindigkeit Connection speed: Verbindungsgeschwindigkeit: C&ompression K&ompression Method: Methode: Compression method: Komprimierungsmethode: Image quality: Bildqualität: CupsPrinterSettingsDialog Dialog Dialog General Allgemein Page size: Seitenformat: Paper type: Papiertyp: Paper source: Papiereinzug: Duplex Printing Beidseitiger Druck None Kein Duplexdruck Long side Lange Seite Short side Kurze Seite Driver settings Treiber-Einstellungen Option Option Value Wert No option selected Keine Einstellung ausgewählt text text EditConnectionDialog &Session &Sitzung &Connection &Verbindung &Input/Output E&in-/Ausgabe &Media &Medien &OK &OK &Cancel Ab&brechen Defaults Voreinstellungen Session Name: Sitzungsname: << change Icon << Symbol ändern &Server &Server Host: Host: Use RSA/DSA key for ssh connection: RSA-/DSA-Schlüssel verwenden (ssh): &Desktop Session &Desktop Sitzung Custom Eigener Command: Befehl: &Connection Speed &Verbindungsgeschwindigkeit C&ompression K&ompression Method: Methode: Image Quality: Bildqualität: &Display &Display Fullscreen Vollbild Width: Breite: Height: Höhe: &Keyboard &Tastatur Keep current Keyboard Settings Tastaturlayout behalten Keyboard Layout: Tastaturlayout: Keyboard Model: Tastatur: Sound Audio Enable Sound Support Audiounterstützung aktivieren Automount automatisch verbinden Add Hinzufügen Delete Löschen New Session Neue Sitzung Session Preferences - Sitzungsvoreinstellungen - Open Key File Öffne Schlüssel All Files alle Dateien us de pc105/us pc105/de &Shared Folders &freigegebene Ordner Login: Login: &Folders &Ordner Path Pfad Path: Pfad: Open Picture Öffne Bild Pictures Bilder Select Folder wähle Ordner SSH Port: SSH-Port: Path to executable Pfad zum Programm Window Fenster &Shared folders &freigegebene Ordner Session name: Sitzungsname: << change icon << Symbol ändern SSH port: SSH-Port: &Session type &Sitzungsart Session type: Sitzungsart: Custom desktop Andere Desktopumgebung Single application Anwendung &Connection speed &Verbindungsgeschwindigkeit Connection speed: Verbindungsgeschwindigkeit: Compression method: Methode: Image quality: Bildqualität: Keep current keyboard Settings Tastaturlayout behalten Keyboard layout: Tastaturlayout: Keyboard model: Tastatur: Enable sound support Audiounterstützung aktivieren Start sound daemon Starte Sound Server Use running sound daemon Benutze existierenden Sound Server Use SSH port forwarding to tunnel sound system connections through firewalls Benutze Port-Weiterleitung über Tunnel um Audiosignale über Firewalls zu verbinden Use default sound port Benutze standard Audio Port Sound port: Audio Port: Use ssh port forwarding to tunnel file system connections through firewalls Benutze SSH-Port-Weiterleitung über Tunnel um Dateisysteme über Firewalls zu verbinden New session Neue Sitzung Session preferences - Sitzungsvoreinstellungen - Open picture Öffne Bild Open key file Öffne Schlüssel All files Alle Dateien Select folder Wähle Ordner Client side printing support Clientseitige Druckunterstützung Connect to Windows terminal server Verbindung mit Windows Terminalserver herstellen Advanced options... Erweiterte Einstellungen... Server: Server: rdesktop command line options: rdesktop Kommandozeilenoptionen: ExportDialog &Cancel A&bbrechen &Preferences ... &Voreinstellungen ... Delete Delete lösche Share Folders Ordner freigeben &share &Freigeben &Custom Folder ... &Anderer Ordner ... share Folders Ordner freigeben Select Folder wähle Ordner &Custom folder ... &Anderer Ordner ... share folders Ordner freigeben Select folder Ordner auswählen FolderButton Sessions folder Sitzungsordner FolderExplorer Folders Ordner Create New Folder Neuen Ordner erstellen Rename Folder... Ordner umbenennen... Change Icon... Symbol ändern... Delete Folder... Ordner löschen... Rename Folder ... Ordner umbenennen ... Change Icon ... Symbol ändern ... Delete Folder ... Ordner löschen ... Open picture Öffne Bild Pictures Bilder X2Go Client X2Go Client Folder Name: Ordnername: Error Fehler Unable to remove " Kann den Ordner " ". Folder is not empty. Please remove the contents of this directory and try again. " nicht entfernen. Der Ordner ist nicht leer. Bitte löschen Sie den Inhalt des Ordners und versuchen Sie es erneut. ". Folder is not empty. Please remove content of folder and try again. ". nicht löschen. Der Ordner ist nicht leer. Bitte löschen Sie den Inhalt des Ordners und versuchen Sie es erneut. Delete folder " Lösche Ordner " New Folder Neuer Ordner Help Shows this message. Zeigt diese Nachricht an. Prints version information. Zeigt die Versionsinformationen an. Shows the changelog. Zeigt das Changelog an. Shows git information as used at compile time. [Deprecated: please use --version.] Zeigt Git-Informationen an, die zur Compile-Zeit benutzt wurden. [Veraltet: bitte --version benutzen.] Shows available pack methods. Zeigt verfügbare Komprimierungsmethoden an. Do not resume sessions automatically. Sitzungen nicht automatisch wiederverbinden. Hides menu bar. Blendet die Menüleiste aus. Disables session editing. Verhindert das Bearbeiten der Sitzungseinstellungen. Starts maximized. Maximiert starten. Starts hidden (minimized to system tray where available.) Versteckt starten (In den Systray minimieren, wenn verfügbar) Starts in "portable" mode. Im "portablen" Modus starten. Forces OpenPGP smart card authentication. OpenPGP-Smartcard-Authentisierung erzwingen. Disable PulseAudio. PulseAudio deaktivieren. Disable sound input. Audio-Eingang deaktivieren. Enables Xinerama by default. Xinerama standardmäßig aktivieren. Allows client side printing in LDAP mode. Clientseitige Druckerunterstützung im LDAP-Modus erlauben. Enables thinclient mode. Starts without a window manager. Aktiviert den Thinclient-Modus. Start erfolgt ohne Window-Manager. Enables shutdown button. Shutdown-Knopf darstellen. Adds RSA key fingerprint to ".ssh/known_hosts" if authenticity of the server can't be determined. Fügt den Fingerabdruck des RSA-Schlüssels in die ".ssh/known_hosts"-Datei ein, wenn die Authentizität des Hosts nicht bestimmt werden kann. Starts with LDAP support. Example: --ldap=ldapserver:389:o=organization,c=de Mit LDAP-Unterstützung starten. Beispiel: --ldap=ldapserver:389:o=organisation,c=de Defines the first LDAP failover server. Legt den ersten LDAP-Failover-Server fest. Defines the second LDAP failover server. Legt den zweiten LDAP-Failover-Server fest. Defines the remote SSH server port. Default: 22. Legt den entfernten SSH-Server-Port fest. Standard: 22. Defines the local machine's SSH server port. Needed for Client-Side Printing and File Sharing support. Default: 22. Legt den SSH-Server-Port des lokalen Systems fest. Wird für clientseitiges Drucken und Dateiaustausch benötigt. Standard: 22. Sets the default command. Default: 'KDE' (Desktop Session) Setzt das Standardkommando. Standard: 'KDE' (Bildschirmsitzung) Starts the session named "session". Startet die Sitzung mit dem Namen "session". Sets the user name for connecting to the remote SSH server to "username". Setzt den für die Verbindung zum entfernten SSH-Server genutzten Benutzernamen auf "username". Sets the default window geometry. Default: 800x600. Setzt die zu verwendende Fenstergröße. Standard: 800x600. Sets the remote X2Go Agent's DPI value to "dpi". Default: same as local display. Setzt den DPI-Wert für den entfernten X2Go-Agent auf "dpi". Standard: Gleicher Wert wie das lokale Display. Sets the default link type. Default: "adsl". Setzt den Verbindungstyp. Standard: "adsl". Sets default pack method. Default: "16m-jpeg-9". Setzt die zu verwendende Komprimierungsmethode. Standard: "16m-jpeg-9". Sets the default clipboard mode. Default: "both". Setzt den zu verwendenden Zwischenablage-Modus. Standard: "both". Sets the default keyboard layout to "layout". "layout" may be a comma-separated list. Setzt das Tastaturlayout auf "layout". "layout" darf eine kommagetrennte Liste sein. Sets the default keyboard type. Setzt den Standardtastaturtyp. Sets the user's home directory. Setzt das Benutzerverzeichnis. Enables or disables overwriting the current keyboard settings. Aktiviert oder deaktiviert das Überschreiben der aktuellen Tastatureinstellungen. Automatically launches the application(s) "app", "app2", ... on session start in Published Applications mode. Startet im Veröffentlichte-Anwendungen-Modus beim Sitzungsstart automatisch die Anwendung(en) "app", "app2", ... Defines an alternative session config file path. Definiert einen alternativen Pfad/Dateinamen zur Sitzungskonfigurationsdatei. Force-enables session system tray icon. Erzwingt die Darstellung des Sitzungssymbols im Systray. Automatically closes X2Go Client after a disconnect. Schließt X2GoClient automatisch, wenn eine Sitzung getrennt/beendet wird. Hides all Folder-Sharing-related options. Blendet alle Dateiaustausch-Optionen aus. Sets the broker name to display in X2Go Client. This parameter is optional. Zeigt den Namen des Brokers im X2GoClient an. Dieser Parameter ist optional. Sets the path to an SSH key to use for authentication against an SSH session broker. The client's behavior is undefined if this flag is used for non-SSH session brokers. Gibt den Pfad/Dateinamen zu einem SSH-Key an, der zur Authentisierung an einem SSH-Session-Broker genutzt wird. Das Verhalten des Clients, wenn dieser Parameter bei einem nicht-SSH-Session-Broker verwendet wird, ist nicht definiert. Enables the use of the default SSH key or SSH agent for authentication against an SSH session broker. The client's behavior is undefined if this flag is used for non-SSH session brokers. Aktiviert, dass der Standard-SSH-Key oder der SSH-Agent zur Authentisierung an einem SSH-Session-Broker genutzt wird. Das Verhalten des Clients, wenn dieser Parameter bei einem nicht-SSH-Session-Broker verwendet wird, ist nicht definiert. Does not ask for user credentials during session broker authentication. This can be useful if you are using an HTTP(S) session broker without authentication. If you run an HTTP(S) server without authentication, but with user-specific profiles, then put the user name into the broker URL (refer to --broker-url.) The user name then will be extracted from the broker URL and be sent to the session broker. The client's behavior is undefined if this flag is used for non-HTTP(S) session brokers. Fragt keine Benutzerdaten für die Authentisierung am Session-Broker ab. Das kann nützlich sein, wenn man einen HTTP(S)-Session-Broker verwendet, der keine Authentisierung nutzt. Bei der Verwendung eines HTTP(S)-Servers ohne Authentisierung, aber mit benutzerspezifischen Profilen bitte den Benutzernamen in die Broker-URL einfügen (siehe --broker-url). Der Benutzername wird dann aus der Broker-URL extrahiert und an den Session-Broker übergeben. Das Verhalten des Clients, wenn dieser Parameter bei einem nicht-HTTP(S)-Session-Broker verwendet wird, ist nicht definiert. Use broker credentials as session user/password credentials when using broker mode with broker authentication. Currently only affects direct RDP sessions. Broker-Anmeldedaten als Anmeldedaten (Benutzer/Passwort) für die Sitzung verwenden, wenn im Broker-Modus die Broker-Authentisierung benutzt wird. Betrifft derzeit nur Direkt-RDP-Sitzungen. Enables broker logout button. Broker-Logout-Knopf darstellen. Use a custom/branded background image (SVG format) for X2Go Client's main window. If a directory is given, will randomly pick an SVG file inside of it. Ein eigenes Hintergrundbild (im SVG-Format) für das Hauptfenster des X2GoClients verwenden. Wenn ein Verzeichnis angegeben wird, wird zufällig eine SVG-Datei aus diesem Verzeichnis ausgewählt. Use a custom icon (SVG format) for additional branding to replace the default in the lower left corner of X2Go Client's main window. Ein eigenes Symbolbild (im SVG-Format) als zusätzliche Branding-Möglichkeit in der linken unteren Ecke des Hauptfensters des X2GoClients verwenden (ersetzt das dort befindliche Standard-Symbolbild). Disables X2Go Client's UNIX cleanup helper. This will prevent X2Go Client from terminating spawned processes after the main program terminates or crashes. Use with care and when in doubt, do not use this parameter at all. Deaktiviert den UNIX-Aufräum-Helfer des X2GoClients. Dies verhindert, dass X2GoClient Kindsprozesse töten kann, nachdem sich das Hauptprogramm beendet hat oder abgestürzt ist. Bitte mit Vorsicht verwenden, und im Zweifelsfall diesen Parameter nicht benutzen. HelpDialog Options Einstellungen HttpBrokerClient us de pc105/us pc105/de Host key for server changed. It is now: Host-Key des Servers hat sich geändert. Er lautet jetzt: For security reasons, connection will be stopped Aus Sicherheitsgründen wird der Verbindungsaufbau abgebrochen The host key for this server was not found but an othertype of key exists.An attacker might change the default server key toconfuse your client into thinking the key does not exist Der Hostkey des Servers konnte nicht gefunden werden aber ein anderer Schlüsseltyp existiert. Ein Angreifer kann den Schlüssel verändert haben, um dem Client vorzutäuschen, dass der Schlüssel nicht existiert Could not find known host file.If you accept the host key here, the file will be automatically created Die ,,Known Host''-Datei konnte nicht gefunden werden. Wenn Sie den Host-Key hier akzeptieren, dann wird die Datei automatisch erstellt. The server is unknown. Do you trust the host key? Public key hash: Der Server ist unbekannt. Vertrauen Sie diesem Host-Key? Öffentlicher Schlüssel: Host key verification failed Hostkey Überprüfung fehlgeschlagen Yes Ja No Nein Verification code: Bestätigungscode: Enter passphrase to decrypt a key Bitte Kennwort eingeben, um den Key zu entschlüsseln Authentication failed Anmeldung fehlgeschlagen Error Fehler Login failed!<br>Please try again Anmeldung fehlgeschlagen!<br>Bitte noch einmal versuchen <br><b>Server uses an invalid security certificate.</b><br><br> <br><b>Server benutzt ein ungültiges Zertifikat.</b><br><br> <p style='background:#FFFFDC;'>You should not add an exception if you are using an internet connection that you do not trust completely or if you are not used to seeing a warning for this server.</p> <p style='background:#FFFFDC;'>Sie sollten keine Ausnahme setzen, wenn Sie sich in einem Netzwerk befinden, dem sich nicht vertrauen oder wenn Sie für diese Verbindung bereits eine Ausnahme akzeptiert haben.</p> Secure connection failed Sichere Verbindung fehlgeschlagen For security reasons, the connection attempt will be aborted. Aus Sicherheitsgründen wird der Verbindungsversuch abgebrochen. The host key for this server was not found but another type of key exists. An attacker might have changed the default server key to trick your client into thinking the key does not exist yet. Der Host-Key des Servers konnte nicht gefunden werden, aber ein anderer Schlüsseltyp existiert. Ein Angreifer kann den Schlüssel verändert haben, um dem Client vorzutäuschen, dass der Schlüssel nicht existiert. Could not find known hosts file.If you accept the host key here, the file will be automatically created. Die „Known Hosts“-Datei konnte nicht gefunden werden. Wenn Sie den Host-Key hier akzeptieren, dann wird die Datei automatisch erstellt. Could not find known hosts file. If you accept the host key here, the file will be automatically created. Die „Known Hosts“-Datei konnte nicht gefunden werden. Wenn Sie den Host-Key hier akzeptieren, dann wird die Datei automatisch erstellt. Host key verification failed. Host-Key-Überprüfung fehlgeschlagen. Enter user account password: Passwort des Benutzerkontos eingeben: Authentication failed. Authentisierung fehlgeschlagen. Login failed!<br>Please try again. Anmeldung fehlgeschlagen!<br>Bitte noch einmal versuchen. Secure connection failed. Sichere Verbindung fehlgeschlagen. Issued to: Ausgestellt für: Common Name(CN) Common Name(CN) Organization(O) Organization(O) Organizational Unit(OU) Organizational Unit(OU) Serial Number Serial Number Issued by: Ausgestellt von: Validity: Validity: Issued on Issued on expires on expires on Fingerprints: Fingerabdrücke: SHA1 SHA1 MD5 MD5 Exit X2Go Client X2GoClient beenden Add exception Ausnahme hinzufügen Your session was disconnected. To get access to your running session, please return to the login page or use the "reload" function of your browser. Die aktuelle Sitzung wurde unterbrochen. Um erneut Zugriff auf ihre Sitzung zu erhalten, kehren Sie zur Startseite zurück oder aktualisieren Sie die aktuelle Seite über den Browserbefehl "Aktuelle Seite neu laden". InteractionDialog Terminal output: Terminal-Ausgabe: Cancel Abbrechen Reconnect Neu verbinden MediaWidget Sound Audio Enable sound support Audiounterstützung aktivieren Start sound daemon Starte Sound-Server Use running sound daemon Benutze existierenden Sound-Server Use SSH port forwarding to tunnel sound system connections through firewalls Benutze Port-Weiterleitung über Tunnel um Audiosignale über Firewalls zu verbinden Use default sound port Benutze Standard-Audio-Port Sound port: Audio-Port: Client side printing support Clientseitige Druckunterstützung Deprecation Warning Abkündigungswarnung ARTS support is scheduled to be removed soon. Please upgrade to PulseAudio. Die Unterstützung für ARTS wird in Kürze aus X2Go entfernt. Bitte auf PulseAudio aktualisieren. ESounD support is scheduled to be removed soon. Please upgrade to PulseAudio. Die Unterstützung für ESounD wird in Kürze aus X2Go entfernt. Bitte auf PulseAudio aktualisieren. ONMainWindow us de pc105/us pc105/de Support ... Support ... Session: Sitzung: &Quit &Beenden Ctrl+Q Strg+Q Quit Beenden &New Session ... &Neue Sitzung ... Ctrl+N Strg+N Session Management... Sitzungsverwaltung... Ctrl+E Strg+E LDAP &Settings ... LDAP &Konfiguration ... Restore toolbar Werkzeugleiste wieder anzeigen About X2GO Client Über X2GoClient About Qt Über Qt Session Sitzung Ctrl+Q exit Strg +Q &Session &Sitzung &Options &Einstellungen &Help &Hilfe Verification code: Bestätigungscode: This can be an indication of a man-in-the-middle attack. Somebody might be eavesdropping on you. For security reasons, it is recommended to stop the connection. Do you want to terminate the connection? Das kann ein Anzeichen für einen Man-in-the-Middle-Angriff sein. Vielleicht werden Sie gerade von jemandem belauscht. Aus Sicherheitsgründen ist es angeraten, die Verbindung zu beenden. Möchten Sie die Verbindung abbrechen? If you accept the new host key the security of your connection may be compromised. Do you want to update the host key? Wenn Sie den neuen Host-Key akzeptieren, kann das die Sicherheit Ihrer Verbindung gefährden. Wollen Sie den Host-Key aktualisieren? The host key for this server was not found but an othertype of key exists. An attacker might change the default server key to confuse your client into thinking the key does not exist. For security reasons, it is recommended to stop the connection. Do you want to terminate the connection? Der Host-Key dieses Servers konnte nicht gefunden werden, aber eine anderer Schlüsseltyp für ihn ist bereits vorhanden. Ein Angreifer könnte den Standard-Key des Servers geändert haben, um Ihren Client glauben zu machen, der Key wäre noch nicht vorhanden. Aus Sicherheitsgründen ist es angeraten, die Verbindung zu beenden. Möchten Sie die Verbindung abbrechen? New session started Neue Sitzung gestartet Session resumed Sitzung fortgesetzt Unable to create folder: Ordner kann nicht erstellt werden: Unable to write file: Datei kann nicht geschrieben werden: Emergency exit. Notbeendung. Waiting for proxy to exit. Darauf warten, dass der Proxy sich beendet. Failed, killing the proxy. Fehlgeschlagen, töte Proxy. wrong value for argument"--clipboard" unerwarteter Wert "--clipboard" Wrong parameter: Falscher Parameter: Help Hilfe Pack Methodes Packmethoden Option is not availabel in this build Option in diesem Build nicht verfügbar Changelog Changelog Git Info Git-Info RSA file empty. RSA-Datei leer. Can not open key: Schlüssel kann nicht geöffnet werden: Card not configured. Smartcard nicht konfiguriert. Error getting window geometry (window closed)? Fehler beim Ermitteln der Fenstergeometrie. (Fenster geschlossen?) Password: Passwort: Keyboard layout: Tastaturlayout: Ok Ok Cancel Abbrechen Applications... Anwendungen... Invalid reply from broker Ungültige Antwort vom Session-Broker Error Fehler KDE KDE on auf Login: Benutzername: Select session: Wähle Sitzung: Resume Fortfahren Suspend Anhalten Terminate Beenden New Neu Display Display Status Status Server Server Creation Time Startzeit Client IP Client-IP running aktiv suspended angehalten Unable to create Folder: Ordner kann nicht erzeugt werden: Unable to write File: Datei kann nicht geschrieben werden: Unable to create SSL Tunnel: SSL Tunnel kann nicht erzeugt werden: Warning Warnung connecting verbinde Starting X2Go Client %1... X2GoClient %1 wird gestartet ... Starting X2Go Client in portable mode. Data directory is: Portabler X2GoClient wird gestartet. Datenverzeichnis ist: About X2Go Client Über X2GoClient Started X2Go Client. X2GoClient wurde gestartet. found. gefunden. English language requested, not loading translator. Sounds like something you wouldn't want translated. English language requested, not loading translator. Non-fatal: can't load translator: Kann Übersetzer nicht laden (nicht fatal): Trying to load language with lower preference, if existent. Versuche eine Sprache niedrigerer Präferenz zu laden, falls vorhanden. Session management ... Sitzungsverwaltung ... &Create session icon on desktop ... &Desktopsymbol erzeugen ... &Set broker password ... &Kennwort für Session-Broker setzen ... &Connectivity test ... &Verbindungstest ... Share folder ... Ordner freigeben ... A click displays the context menu. Ein Klick aktiviert das Kontextmenü. A left click hides or restores the window. A right click displays the context menu. Klick mit der linken Maustaste, um das Fenster zu verstecken und wiederherzustellen. Klick mit der rechten Maustaste zeigt das Kontextmenü. Closing X2Go Client ... X2GoClient wird geschlossen ... Finished X2Go Client closing hooks. Alle Hooks, die beim Beenden von X2GoClient abgearbeitet werden sollten, wurden abgearbeitet. Broker authentication failed! Broker-Authentisierung fehlgeschlagen! Connection error: Verbindungsfehler: Couldn't find an SSH connection. Konnte keine SSH Verbindung finden. This can be an indication of a man-in-the-middle attack. Somebody might be eavesdropping on you. For security reasons, it is recommended to stop the connection attempt. Do you want to terminate the connection? Das kann ein Anzeichen für einen Man-in-the-Middle-Angriff sein. Vielleicht werden Sie gerade von jemandem belauscht. Aus Sicherheitsgründen ist es angeraten, die Verbindung zu beenden. Möchten Sie die Verbindung abbrechen? Host key verification failed. Host-Key-Überprüfung fehlgeschlagen. The host key for this server was not found but another type of key exists. An attacker might have changed the default server key to trick your client into thinking the key does not exist yet. For security reasons, it is recommended to stop the connection attempt. Do you want to terminate the connection? Der Host-Key dieses Servers konnte nicht gefunden werden, aber ein anderer Schlüsseltyp für ihn ist bereits vorhanden. Ein Angreifer könnte den Standard-Key des Servers geändert haben, um Ihren Client glauben zu machen, der Key wäre noch nicht vorhanden. Aus Sicherheitsgründen ist es angeraten, die Verbindung zu beenden. Möchten Sie die Verbindung abbrechen? Could not find known hosts file. If you accept the host key here, the file will be automatically created. Die „Known Hosts“-Datei konnte nicht gefunden werden. Wenn Sie den Host-Key hier akzeptieren, dann wird die Datei automatisch erstellt. Authentication failed. Authentisierung fehlgeschlagen. <b>Connection failed.</b> <b>Verbindung fehlgeschlagen.</b> No server available. Es konnte kein Server gefunden werden. Server not available. Server nicht verfügbar. No accessible desktop found. Kein freigegebener Desktop gefunden. Your current color depth is different from the session's color depth. This may cause problems reconnecting to this session and in most cases <b>you will loose the session</b> and have to start a new one! It's highly recommended to change the color depth of your display to Die aktuell verwendete Farbtiefe unterscheidet sich von der der wiederherzustellenden Sitzung. Der Versuch, die Sitzung fortzuführen kann zu Fehlern führen, inbesondere dem <b>Verlust der ganzen Sitzung</b>. Um Fehler zu vermeiden wird empfohlen, die aktuelle Farbtiefe auf bits and restart your X.Org Server before you reconnect to this X2Go session.<br />Do you want to resume this session anyway? bit zu ändern und den verwendeten X.Org-Server neu zu starten, bevor Sie sich mit der Sitzung verbinden.<br />Trotzdem versuchen, die Sitzung fortzuführen? Unable to create SSH tunnel for X2Go session (NX) startup: Kann keinen SSH-Tunnel für den Start der X2Go-Sitzung (NX) erstellen: Unable to create SSH tunnel for audio data: Kann keinen SSH-Tunnel für Audiodaten erstellen: failed to start. konnte nicht gestartet werden. This likely means the binary is not available. The current search path is: Das bedeutet sehr wahrscheinlich, dass die ausführbare Datei nicht verfügbar ist. Der aktuelle Suchpfad lautet: returned a non-zero exit code or crashed otherwise. lieferte einen von null abweichenden Exit-Code zurück oder ist auf andere Weise abgestürzt. Execution failed, exit code was: Ausführung fehlgeschlagen, der Exit-Code lautete: didn't start up in time. startete nicht rechtzeitig. This error shouldn't come up. Dieser Fehler sollte nie auftreten. didn't accept a write operation. hat eine Schreiboperation nicht akzeptiert. It is probably not running correctly or crashed in-between. Es läuft vermutlich nicht richtig, oder ist zwischendurch abgestürzt. Unable to read from xmodmap. Kann nicht von xmodmap lesen. encountered an unknown error during start up or execution. ist ein unbekannter Fehler während des Starts oder während der Ausführung aufgetreten. experienced an undefined error. trat ein undefinierter Fehler auf. X2Go Client will now terminate. File a bug report as outlined on the <a href="http://wiki.x2go.org/doku.php/wiki:bugs">bugs wiki page</a>. X2GoClient wird sich nun beenden. Bitte melden Sie den Fehler wie auf der <a href="http://wiki.x2go.org/doku.php/wiki:bugs">Wikiseite zur Fehlerberichterstattung</a> beschrieben. Failed to start RDP or XDMCP client Konnte RDP oder XDMCP-Client nicht starten Check session settings and ensure that selected client is installed on your system. Bitte die Sitzungseinstellungen überprüfen und sicherstellen, dass der ausgewählte Client auch auf dem System installiert ist. Proxy didn't terminate after 3 seconds. Killing the proxy. Der Proxy hat sich nicht nach 3 Sekunden beendet. Proxy wird nun zwangsbeendet. Closing X2Go Client because it was started in hidden mode. Schließe den X2GoClient, weil er im versteckten Modus gestartet wurde. Closing X2Go Client because the --close-disconnect parameter was passed. Schließe den X2GoClient, weil der Parameter --close-disconnect angegeben wurde. starting starte resuming aktiviere Connection timeout, aborting Zeitüberschreitung, breche ab aborting breche ab <br>(C) 2005-2023 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> Translators, feel free to add a localized version of your translation including a copyright notice and your name(s). Remember to keep a <br> at the end, though. English example for a potential translation: <br>(C) 2005-2023 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br>English version: (C) 20AB-20CD Trans Lator <trans@la.tor><br> <br>(C) 2005-2023 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> Check whether the package providing "pcsc_scan" is installed. The current search path is: Bitte überprüfen Sie, ob das Paket, das "pcsc_scan" bereitstellt, installiert ist. Der aktuelle Suchpfad lautet: Unable to create or append to file: Datei konnte nicht angelegt oder zum Anhängen geöffnet werden: Unable to change the permissions of file: Kann Dateirechte nicht ändern: This is an error because sshd would deny such a file. Dies ist ein Fehler, weil sshd sich weigern würde, so eine Datei zu verwenden. Unable to change the permissions of directory: Kann Verzeichnisrechte nicht ändern: This is an error because sshd would deny such a directory. Dies ist ein Fehler, weil sshd sich weigern würde, so ein Verzeichnis zu verwenden. Can't start X.Org Server. Kann X.Org-Server nicht starten. Please check your installation. Bitte überprüfen Sie Ihre Installation. X.Org Server did not launch correctly after %n tries. %n will be substituted with the current number of tries Der X.Org-Server ist trotz eines Versuches nicht erfolgreich gestartet. Der X.Org-Server ist trotz %n Versuchen nicht erfolgreich gestartet. Unable to find the sftp-server binary. Neither bundled, nor found in $PATH nor additional directories. Kann das sftp-server-Binary nicht finden. Es ist weder im Paket, noch im $PATH, noch in zusätzlichen Verzeichnissen enthalten. If you are using a Linux-based operating system, please ask your system administrator to install the package containing the sftp-server binary. Common names are <b>openssh</b>, <b>openssh-server</b> or <b>openssh-sftp-server</b> depending upon distribution. If the sftp-server binary is installed on your system, please report a bug mentioning its path on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Wenn Sie ein Linux-basiertes Betriebssystem verwenden, bitten Sie Ihren Systemadministrator, das Paket mit dem sftp-server-Binary zu installieren. Übliche Namen hierfür sind <b>openssh</b>, <b>openssh-server</b> oder <b>openssh-sftp-server</b>, je nach Distribution. Falls das sftp-server-Binary auf Ihrem System installiert ist, melden Sie den Fehler bitte unter Angabe des Pfads zum Binary unter: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> SSH key type selection error Fehler bei der Auswahl des SSH-Key-Typs Unknown SSH key selected. Unbekannter SSH-Key ausgewählt. Terminating application. Anwendung wird beendet. SSH key base directory creation error Fehler beim Erstellen des Basisverzeichnisses für den SSH-Key Unable to create SSH key base directory '%1'. Kann SSH-Key-Basisverzeichnis '%1' nicht anlegen. ssh-keygen launching error Fehler beim Start von ssh-keygen Unable to start the ssh-keygen binary. Kann das ssh-keygen-Binary nicht starten. ssh-keygen crashed ssh-keygen ist abgestürzt The ssh-keygen binary crashed. Das ssh-keygen-Binary ist abgestürzt. ssh-keygen program error Programmfehler, ssh-keygen betreffend The ssh-keygen binary did not exit cleanly. Das ssh-keygen-Binary wurde nicht sauber beendet. It was probably called with unknown arguments. Es wurde vermutlich mit unbekannten Parametern aufgerufen. Unable to open newly generated %1 public host key file. Kann die neu erstellte %1-Public-Host-Key-Datei nicht öffnen. %1 public host key file empty. Die %1-Public-Host-Key-Datei ist leer. You have enabled Remote Printing or File Sharing. These features require a running and functioning SSH server on your computer. <b>Printing and File Sharing will be disabled for this session.</b> Sie haben die clientseitige Druckerunterstützung oder den Dateiaustausch aktiviert. Diese Funktionen setzen einen gestarteten und funktionstüchtigen SSH-Server auf Ihrem Client voraus. <b>Die clientseitige Druckerunterstützung und der Dateiaustausch werden für diese Sitzung deaktiviert.</b> Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server. If you see this message, please report a bug on: Dies sollte normalerweise nicht passieren, das X2GoClient für Windows seinen eigenen internen SSH-Server mitbringt. Wenn Sie diese Fehlermeldung sehen, senden Sie bitte einen Fehlerbericht: The SSH server failed to start. Please report a bug on: Der SSH-Server konnte nicht gestartet werden. Bitte senden Sie einen Fehlerbericht: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server and automatically generates the required keys. If you see this message, please report a bug on: Dies sollte normalerweise nicht passieren, das X2GoClient für Windows seinen eigenen internen SSH-Server mitbringt und automatisch die benötigten Schlüssel generiert. Wenn Sie diese Fehlermeldung sehen, senden Sie bitte einen Fehlerbericht: X2Go Client was unable to create SSH host keys. Please report a bug on: X2GoClient konnte keine SSH-Host-Keys erstellen. Bitte senden Sie einen Fehlerbericht: SSH daemon failed to open the application's authorized_keys file. Der SSH-Dienst konnte die authorized_keys-Datei der Anwendung nicht öffnen. libssh initialization failure libssh-Initialisierungsfehler Unable to initialize libssh. Kann libssh nicht initialisieren. <b>Session ID:<br>Server:<br>Username:<br>Display:<br>Creation Time:<br>Status:</b> <b>Sitzungs ID:<br>Server:<br>Login:<br>Display:<br>Startzeit:<br>Status:</b> Abort Abbruch Show Details Zeige Details (can't open file) (kann Datei nicht öffnen) (file not exists) (Datei existiert nicht) (directory not exists) (Verzeichnis existiert nicht) wrong value for argument"--link" unerwarteter Wert "--link" wrong value for argument"--sound" unerwarteter Wert "--sound" wrong value for argument"--geometry" unerwarteter Wert "--geometry" wrong value for argument"--set-kbd" unerwarteter Wert "--set-kbd" wrong value for argument"--ldap" unerwarteter Wert "--ldap" wrong value for argument"--pack" unerwarteter Wert "--pack" wrong parameter: unerwarteter Wert: Available pack methodes: Liste aller Packmethoden: Support Support </b><br> (C. 2005-2016 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br> </b><br> (C. 2005-2016 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br> Please check LDAP Settings Bitte überprüfen Sie die LDAP Einstellungen no X2Go Server found in LDAP LDAP enthält keinen X2GoServer Are you sure you want to delete this Session? Sind Sie sicher, dass Sie die Sitzung löschen wollen? <b>Connection failed</b> <b>Verbindung fehlgeschlagen</b> No Server availabel es konnte kein Server gefunden werden Session ID Sitzungs-ID suspending anhalten terminating beende <b>Connection failed</b> : <b>Verbindung fehlgeschlagen</b> : Share Folder... Ordner freigeben... Usage: x2goclient [Options] Options: --help Print this message --help-pack Print availabel pack methods --no-menu Hide menu bar --maximize Start maximized --add-to-known-hosts Add RSA key fingerprint to .ssh/known_hosts if authenticity of server can't be established --ldap=<host:port:dn> Start with LDAP Support. Example: --ldap=ldapserver:389:o=organization,c=de --command=<cmd> Set default command, default value 'KDE' --sound=<0|1> Enable sound, default value '1' --geomerty=<W>x<H>|fullscreen Set default geometry, default value '800x600' --link=<modem|isdn|adsl|wan|lan> Set default link type, default 'lan' --pack=<packmethod> Set default pack method, default '16m-jpeg-9' --kbd-layout=<layout> Set default keyboard layout, default 'us' --kbd-type=<typed> Set default keyboard type, default 'pc105/us' --set-kbd=<0|1> Overwrite current keyboard settings, default '0' Usage: x2goclient [Options] Options: --help Print this message --help-pack Print availabel pack methods --no-menu Hide menu bar --maximize Start maximized --add-to-known-hosts Add RSA key fingerprint to .ssh/known_hosts if authenticity of server can't be established --ldap=<host:port:dn> Start with LDAP Support. Example: --ldap=ldapserver:389:o=organization,c=de --command=<cmd> Set default command, default value 'KDE' --sound=<0|1> Enable sound, default value '1' --geomerty=<W>x<H>|fullscreen Set default geometry, default value '800x600' --link=<modem|isdn|adsl|wan|lan> Set default link type, default 'lan' --pack=<packmethod> Set default pack method, default '16m-jpeg-9' --kbd-layout=<layout> Set default keyboard layout, default 'us' --kbd-type=<typed> Set default keyboard type, default 'pc105/us' --set-kbd=<0|1> Overwrite current keyboard settings, default '0' Unable to read : Lesefehler: Unable to write : Schreibfehler: <b>X2Go Client V. 2.0.1</b><br> (C. 2006-2007 Oleksandr Shneyder, Heinz-Markus Graesing)<br><br>Client for use with the X2Go network based computing environment. This Client will be able to connect to X2Go server(s) and start, stop, resume and terminate (running) desktop sessions. X2Go Client stores different server connections and may automatically request authentication data from LDAP directories. Furthermore it can be used as fullscreen loginscreen (replacement for loginmanager like xdm). Please visit x2go.org for further information. <b>X2GoClient V. 2.0.1</b><br> (C. 2006-2007 Oleksandr Shneyder, Heinz-Markus Graesing)<br><br>Ein Client für den Zugriff auf die serverbasierende Anwendungsumgebung X2Go. Mit Hilfe dieser Anwendung können Sie Sitzungen eines X2GoServers starten, stoppen, laufende Sitzungen fortführen oder anhalten und verschiedene Sitzungskonfigurationen verwalten. Die Authentifizierung kann über LDAP erfolgen und das Programm kann im Vollbildmodus (als Ersatz für XDM) gestartet werden. Weitere Informationen erhalten Sie auf x2go.org. <b>Wrong Password!</b><br><br> <b>Falsches Passwort!</b><br><br> wrong value for argument"--ldap1" unerwarteter Wert "--ldap1" wrong value for argument"--ldap2" unerwarteter Wert "--ldap2" Usage: x2goclient [Options] Options: --help Print this message --help-pack Print availabel pack methods --no-menu Hide menu bar --maximize Start maximized --add-to-known-hosts Add RSA key fingerprint to .ssh/known_hosts if authenticity of server can't be established --ldap=<host:port:dn> Start with LDAP Support. Example: --ldap=ldapserver:389:o=organization,c=de --ldap1=<host:port> LDAP Failover Server #1 --ldap2=<host:port> LDAP Failover Server #2 --command=<cmd> Set default command, default value 'KDE' --sound=<0|1> Enable sound, default value '1' --geomerty=<W>x<H>|fullscreen Set default geometry, default value '800x600' --link=<modem|isdn|adsl|wan|lan> Set default link type, default 'lan' --pack=<packmethod> Set default pack method, default '16m-jpeg-9' --kbd-layout=<layout> Set default keyboard layout, default 'us' --kbd-type=<typed> Set default keyboard type, default 'pc105/us' --set-kbd=<0|1> Overwrite current keyboard settings, default '0' Usage: x2goclient [Options] Options: --help Print this message --help-pack Print availabel pack methods --no-menu Hide menu bar --maximize Start maximized --add-to-known-hosts Add RSA key fingerprint to .ssh/known_hosts if authenticity of server can't be established --ldap=<host:port:dn> Start with LDAP Support. Example: --ldap=ldapserver:389:o=organization,c=de --ldap1=<host:port> LDAP Failover Server #1 --ldap2=<host:port> LDAP Failover Server #2 --command=<cmd> Set default command, default value 'KDE' --sound=<0|1> Enable sound, default value '1' --geomerty=<W>x<H>|fullscreen Set default geometry, default value '800x600' --link=<modem|isdn|adsl|wan|lan> Set default link type, default 'lan' --pack=<packmethod> Set default pack method, default '16m-jpeg-9' --kbd-layout=<layout> Set default keyboard layout, default 'us' --kbd-type=<typed> Set default keyboard type, default 'pc105/us' --set-kbd=<0|1> Overwrite current keyboard settings, default '0' Unable to create file: Datei konnte nicht erzeugt werden: No valid card found Es wurde keine gültige Karte gefunden This card is unknown by X2Go System Diese Karte ist dem X2Go-System unbekannt &Settings ... &Konfiguration ... Options Einstellungen Can't read host rsa key: RSA Schlüssel konnte nicht gelesen werden: Can't connect to X-Server Verbindung zu X-Server konnte nicht hergestellt werden Can't connect to X server Please check your settings Can't connect to X-Server Please check your settings Verbindung zu X-Server konnte nicht hergestellt werden Bitte überprüfen Sie Ihre Einstellungen Can't start X-Server X-Server konnte nicht gestartet werden Can't start X Server Please check your settings X-Server konnte nicht gestartet werden Überprüfen Sie Ihre Einstellungen Your current color depth is different to the color depth of your x2go-session. This may cause problems reconnecting to this session and in most cases <b>you will loose the session</b> and have to start a new one! It's highly recommended to change the color depth of your Display to Die aktuell verwendete Farbtiefe unterscheidet sich von der der wiederherzustellenden Sitzung. Der Versuch, die Sitzung fortzuführen kann zu Fehlern führen, inbesondere dem <b>Verlust der ganzen Sitzung</b>. Um Fehler zu vermeiden wird empfohlen, die aktuelle Farbtiefe auf 24 or 32 24 oder 32 bit and restart your X-server before you reconnect to this x2go-session.<br>Resume this session anyway? bit zu ändern und den verwendeten X-server neu zu starten, bevor Sie sich mit der Sitzung verbinden. Trotzdem versuchen die Sitzung fortzuführen? Yes Ja No Nein <b>X2Go Client V. <b>X2GoClient V. </b><br> (C. 2006-2007 Oleksandr Shneyder, Heinz-Markus Graesing)<br><br>Client for use with the X2Go network based computing environment. This Client will be able to connect to X2Go server(s) and start, stop, resume and terminate (running) desktop sessions. X2Go Client stores different server connections and may automatically request authentication data from LDAP directories. Furthermore it can be used as fullscreen loginscreen (replacement for loginmanager like xdm). Please visit x2go.org for further information. </b><br> (C. 2006-2007 Oleksandr Shneyder, Heinz-Markus Graesing)<br><br>Ein Client für den Zugriff auf die serverbasierende Anwendungsumgebung X2Go. Mit Hilfe dieser Anwendung können Sie Sitzungen eines X2GoServers starten, stoppen, laufende Sitzungen fortführen oder anhalten und verschiedene Sitzungskonfigurationen verwalten. Die Authentifizierung kann über LDAP erfolgen und das Programm kann im Vollbildmodus (als Ersatz für XDM) gestartet werden. Weitere Informationen erhalten SIe auf x2go.org. </b><br> (C. 2006-2008 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br><br>Client for use with the X2Go network based computing environment. This Client will be able to connect to X2Go server(s) and start, stop, resume and terminate (running) desktop sessions. X2Go Client stores different server connections and may automatically request authentication data from LDAP directories. Furthermore it can be used as fullscreen loginscreen (replacement for loginmanager like xdm). Please visit x2go.org for further information. </b><br> (C. 2006-2008 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br><br>Ein Client für den Zugriff auf die serverbasierende Anwendungsumgebung X2Go. Mit Hilfe dieser Anwendung können Sie Sitzungen eines X2GoServers starten, stoppen, laufende Sitzungen fortführen oder anhalten und verschiedene Sitzungskonfigurationen verwalten. Die Authentifizierung kann über LDAP erfolgen und das Programm kann im Vollbildmodus (als Ersatz für XDM) gestartet werden. Weitere Informationen erhalten SIe auf x2go.org. OpenOffice.org Terminal Eingabeaufforderung unknown unbekannt Command Befehl Type Typ Desktop Desktopumgebung single application Anwendung shadow session Shadow Session <br>Sudo configuration error <br>Fehler in der Sudo Konfiguration Unable to execute: Befehl konnte nicht ausgeführt werden: X2Go Client X2GoClient Internet browser Webbrowser Email client E-Mail-Programm &New session ... &Neue Sitzung ... Session management... Sitzungsverwaltung... Show toolbar Zeige Werkzeugleiste About X2GO client Über X2GoClient Please check LDAP settings Bitte überprüfen Sie die LDAP Einstellungen no X2Go server found in LDAP LDAP enthält keinen X2GoServer Are you sure you want to delete this session? Sind Sie sicher, dass Sie die Sitzung löschen wollen? <b>Wrong password!</b><br><br> <b>Falsches Passwort!</b><br><br> No server availabel es konnte kein Server gefunden werden Not connected Active connection Nicht verbunden Creation time Startzeit Unable to create folder: Ordner kann nicht erzeugt werden: Enter passphrase to decrypt a key Bitte Kennwort eingeben, um den Schlüssel zu öffnen No X2Go sessions found, closing. Keine X2Go Sitzung gefunden, Programm wird geschlossen. Starting connection to server: Verbindung mit Server wird gestartet: to auf Connection Error( Verbindungsfehler( Couldn't find a SSH connection. Konnte keine SSH Verbindung finden. Host key for server changed. It is now: Host-Key des Servers hat sich geändert. Er lautet jetzt: For security reasons, connection will be stopped Aus Sicherheitsgründen wird der Verbindungsaufbau abgebrochen The host key for this server was not found but an othertype of key exists.An attacker might change the default server key toconfuse your client into thinking the key does not exist Der Host-Key des Servers konnte nicht gefunden werden aber ein anderer Schlüsseltyp existiert. Ein Angreifer kann den Schlüssel verändert haben, um dem Client vorzutäuschen, dass der Schlüssel nicht existiert Could not find known host file. If you accept the host key here, the file will be automatically created Die ,,Known Host''-Datei konnte nicht gefunden werden. Wenn Sie den Host-Key hier akzeptieren, dann wird die Datei automatisch erstellt. The server is unknown. Do you trust the host key? Public key hash: Der Server ist unbekannt. Vertrauen Sie diesem Host-Key? Hash des öffentlichen Schlüssels: Host key verification failed Die Überprüfung des Host-Keys schlug fehl Authentication failed: Anmeldung fehlgeschlagen: Authentication failed Anmeldung fehlgeschlagen Enter password for SSH proxy Kennwort für SSH Proxy eingeben Connection failed: Verbindung fehlgeschlagen: - Wrong password. - Falsches Kennwort. Server not availabel Server nicht verfügbar Unable to write file: Datei kann nicht geschrieben werden: Unable to create SSL tunnel: SSL Tunnel kann nicht erzeugt werden: <b>Session ID:<br>Server:<br>Username:<br>Display:<br>Creation time:<br>Status:</b> <b>Sitzungs-ID:<br>Server:<br>Login:<br>Display:<br>Startzeit:<br>Status:</b> Share folder... Ordner freigeben... Show details Zeige Details This card is unknown by X2Go system Diese Karte ist dem X2Go-System unbekannt Can't start X server Please check your settings X-Server lässt sich nicht starten. Bitte überprüfen Sie Ihre Installation Remote server does not support file system export through SSH Tunnel Please update to a newer x2goserver package Der gewählte server unterstützt kein Dateisystemexport via SSH Tunnel Bitte installieren sie eine neuere Version von x2goserver &Create session icon on desktop... &Desktopsymbol erzeugen... Starting x2goclient... X2Go Client wird gestartet... Starting x2goclient in portable mode... data directory is: Portable X2Go Client wird gestartet... Datenverzeichnis ist: Started x2goclient. X2Go Client ist gestartet. Can't load translator: Kann Übersetzer nicht laden: Translator: Übersetzung: installed. installiert. &Set broker password... &Kennwort für Session-Broker setzen... &Connectivity test... &Verbindungstest... Operation failed Operation fehlgeschlagen Password changed Das Kennwort wurde geändert Wrong password! Falsches Kennwort! <b>Authentication</b> <b>Authentifizierung</b> Restore Wiederherstellen Multimedia Unterhaltungsmedien Development Entwicklung Education Bildung Game Spiele Graphics Grafik Network Internet Office Büroprogramme Settings Einstellungen System Systemwerkzeuge Utility Dienstprogramme Other Sonstige Left mouse button to hide/restore - Right mouse button to display context menu Left click to open the X2GoClient window or right click to get the context menu. Linke Maustaste: verstecken/wiederherstellen - rechte Maustaste: Kontextmenü Closing x2goclient... X2Go Client wird geschlossen... Closed x2goclient. X2Go Client wurde geschlossen. Create session icon on desktop Desktopsymbol erzeugen Desktop icons can be configured not to show x2goclient (hidden mode). If you like to use this feature you'll need to configure login by a gpg key or gpg smart card. Use x2goclient hidden mode? Der Aufruf über Desktopsymbole kann erfolgen, ohne dass der X2GoClient sichtbar wird (versteckter Modus). Diesen Modus können Sie nutzen, wenn Sie den Loginvorgang über einen GPG-Schlüssel oder eine GPG-Smartcard konfiguriert haben. Wollen Sie den versteckten Modus nutzen? Show session tray icon when running Sitzungssymbol während Verbindung in der Taskleiste anzeigen New Session Neue Sitzung X2Go sessions not found Keine X2Go-Sitzungen gefunden RDP connection RDP-Verbindung Detach X2Go window Fenster abkoppeln Attach X2Go window Fenster einbetten Finished Beendet Are you sure you want to terminate this session? Unsaved documents will be lost Die Sitzung wird beendet. Sind Sie sicher?<br>Ungespeicherte Dokumente gehen verloren </b><br> (C. 2006-2010 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br><br>Client for use with the X2Go network based computing environment. This Client will be able to connect to X2Go server(s) and start, stop, resume and terminate (running) desktop sessions. X2Go Client stores different server connections and may automatically request authentication data from LDAP directories. Furthermore it can be used as fullscreen loginscreen (replacement for loginmanager like xdm). Please visit x2go.org for further information. </b><br> (C. 2006-2009 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br><br>Ein Client für den Zugriff auf die serverbasierende Anwendungsumgebung X2Go. Mit Hilfe dieser Anwendung können Sie Sitzungen eines X2GoServers starten, stoppen, laufende Sitzungen fortführen oder anhalten und verschiedene Sitzungskonfigurationen verwalten. Die Authentifizierung kann über LDAP erfolgen und das Programm kann im Vollbildmodus (als Ersatz für XDM) gestartet werden. Weitere Informationen erhalten SIe auf x2go.org. Can't start X Server Please check your installation X-Server lässt sich nicht starten. Bitte überprüfen Sie Ihre Installation X2Go Session X2Go-Sitzung Minimize toolbar Symbole verstecken SSH daemon could not be started. SSH-Daemon konnte nicht gestartet werden. SSH daemon is not running. SSH-Daemon läuft nicht. You have enabled Remote Printing or File Sharing. These features require a running and functioning SSH server on your computer. <b>Printing and File Sharing will be disabled for this session.</b> Please also check the <b>Clientside SSH port</b> in the general settings. Sie haben Die Druck- oder Dateifreigabe aktiviert. Für diese Funktionen muss auf Ihrem Client ein funktionierender und laufender SSH-Server vorhanden sein. <b>Druck- und Dateifreigaben werden für diese Sitzung deaktiviert.</b> Bitte überprüfen Sie auch den <b>clientseitigen SSH-Port</b> in den allgemeinen Einstellungen. Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server. If you see this message, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Normalerweise sollte diese Meldung nicht auftreten, da X2GoClient für Windows seinen eigenen, internen SSH-Server mitbringt. Wenn Sie diese Meldung sehen, bitten wir um einen Bugreport über: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> The SSH server failed to start. SSH-Server konnte nicht gestartet werden. X2Go Client did not detect a globally running SSH server on your machine and was unable to start its own. Please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> X2GoClient konnte keinen globalen, laufenden SSH-Server auf Ihrem System finden, und konnte auch nicht seinen eigenen starten. Bitte melden Sie den Fehler über: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> The SSH server is currently not started. Der SSH-Server läuft derzeit nicht. On OS X, please follow the following steps to enable SSH service:<ul><li>Open <b>System Preferences</b> (Applications -> System Preferences)</li><li>Go to <b>Sharing</b></li><li>Tick the checkbox besides <b>Remote Login</b></li><li>Check that <b>Allow access for:</b> is set to either:<ul><li>All users: <b>no further steps necessary</b></li><li>Only these users <b>and your user name is included in the list</b></li></ul><li>Optionally, add your user name to the allowed list via the <b>Plus Button</b></li></ul><b>Warning: enabling SSH access will allow any user on the network to connect to your machine. It is your responsibility to set a strong password for every user that is allowed to log in via SSH.</b> Für OS X befolgen Sie bitte die nachfolgenden Schritte, um den SSH-Service zu starten:<ul><li>Öffnen Sie die <b>Systemeinstellungen</b> (Programme -> Systemeinstellungen)</li><li>Wählen Sie <b>Freigaben</b></li><li>Setzen Sie einen Haken neben <b>Entfernte Anmeldung</b></li><li>Prüfen Sie, dass <b>Zugriff erlauben für:</b> auf einem der beiden folgenden Werte steht:<ul><li>Alle Benutzer: <b>keine weiteren Maßnahmen erforderlich</b></li><li>Nur diese Benutzer <b>, wobei Ihr Benutzername in der Liste aufgeführt ist</b></li></ul><li>Fügen Sie optional Ihren Benutzernamen durch einen Klick auf den<b>Plus-Knopf</b> der Liste hinzu.</li></ul><b>Warnung: den SSH-Zugriff zu aktivieren erlaubt es jedem Benutzer im Netzwerk, sich mit ihrem Computer zu verbinden. Es liegt in Ihrer Verantwortung, sicherzustellen, dass alle Benutzerkonten, die sich per SSH einloggen dürfen, auch mit sicheren Passworten geschützt sind.</b> Please ask your system administrator to provide the SSH service on your computer. Bitten Sie Ihren Systemadministrator, dass er Ihnen den SSH-Dienst auf dem Computer einrichtet. Disabling Remote Printing or File Sharing support in the session settings will get rid of this message. Die Druck- und/oder Dateifreigabe in den Sitzungseinstellungen zu deaktivieren, wird diese Meldung verschwinden lassen. SSH daemon failed to open its public host key. Der SSH-Daemon konnte seinen öffentlichen Host-Schlüssel nicht öffnen. You have enabled Remote Printing or File Sharing. These features require a running and functioning SSH server on your computer. <b>Printing and File Sharing will be disabled for this session.</b> The SSH server is currently not configured correctly. Please ensure that the server's public exists. Sie haben die Druck- oder Dateifreigabe aktiviert. Für diese Funktionen muss auf Ihrem Client ein funktionierender und laufender SSH-Server vorhanden sein. <b>Druck- und Dateifreigaben werden für diese Sitzung deaktiviert.</b> Der SSH-Server ist momentan nicht korrekt konfiguriert. Bitte stellen Sie sicher, dass der öffentliche Schlüssel des Servers existiert. Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server and automatically generates the required keys. If you see this message, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Normalerweise sollte diese Meldung nicht auftreten, da X2GoClient für Windows seinen eigenen, internen SSH-Server mitbringt und die benötigten Schlüssel automatisch generiert. Wenn Sie diese Meldung sehen, bitten wir um einen Bugreport über: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> X2Go Client was unable to create SSH host keys. Please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> X2GoClient konnte keine SSH-Host-Keys erstellen. Wenn Sie diese Meldung sehen, bitten wir um einen Bugreport über: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> On OS X, please follow these steps to generate the required keys:<ul><li>Open a <b>Terminal Window</b> (Applications -> Utilities -> Terminal)</li><li>Run this command: <b>ssh -p OS-X-Benutzer befolgen bitte diese Anleitung, um die benötigten Keys zu erstellen:<ul><li>Öffnen Sie ein <b>Terminal-Fenster</b> (Programme -> Dienstprogramme -> Terminal)</li><li>Führen Sie diesen Befehl aus: <b>ssh -p Please ask your system administrator to generate the required host keys. If you are administrating this system yourself, please run: <center><b>sudo ssh-keygen -A</b></center> Bitten Sie Ihren Systemadministrator, dass er Ihnen die entsprechenden Host-Keys generiert. Wenn Sie selbst der Systemadministrator sind, führen Sie bitte folgenden Befehl aus: <center><b>sudo ssh-keygen -A</b></center> SSH Error SSH-Fehler SSH daemon could not be started. You'll need SSH daemon for printing and file sharing. Normally, this should not happen as X2Go Client for Windows ships its internal sshd.exe. If you see this message, please report a bug against the X2Go bugtracker. SSH-Dienst konnte nicht gestartet werden.\n\nDer SSH-Dienst wird für die Datei- und Druckdienste benötigt.\n\nDiese Fehlermeldung sollte nie auftreten, da der Windows-X2GoClient seinen eigenen SSH-Dienst mitbringt.\n\nWenn Sie diese Fehlermeldung sehen, melden Sie den Fehler bitte über den X2Go-Bugtracker. SSH daemon is not running. You'll need SSH daemon for printing and file sharing Please ask your system administrator to provide the SSH service on your computer. Der SSH-Dienst läuft nicht.\n\nDer SSH-Dienst wird für die Datei- und Druckdienste benötigt.\n\nBitte wenden Sie sich an Ihren Systemadministrator und bitten Sie ihn, den SSH-Dienst auf Ihrem Computer zu installieren. SSH daemon failed to open the application's public host key. Der SSH-Dienst konnte den öffentlichen Host-Schlüssel der Anwendung nicht öffnen. SSH daemon failed to open the application's public key used for exporting folders and printers. Der SSH-Dienst konnte den für Datei- und Druckfreigaben benötigten öffentlichen Host-Schlüssel der Anwendung nicht öffnen. SSH daemon failed to open the application's authoized_keys file. Der SSH-Dienst konnte die autorized_keys-Datei der Anwendung nicht öffnen. <br><b>&nbsp;&nbsp;&nbsp;Click this button&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;to restore toolbar&nbsp;&nbsp;&nbsp;</b><br> <br><b>&nbsp;&nbsp;&nbsp;zum Wiederherstellen&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;der Werkzeugleiste&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;hier klicken&nbsp;&nbsp;&nbsp;</b><br> Can't open config file: Konfigurationsdatei lässt sich nicht öffnen: sshd not started, you'll need sshd for printing and file sharing you can install sshd with <b>sudo apt-get install openssh-server</b> SSHD konnte nicht gefunden werden. SSHD wird für Dateifreigaben und Druck benötigt. Sie können SSHD über folgenden Befehl installieren: <b>sudo apt-get install openssh-server</b> Connection to local desktop Zugriff auf lokalen Desktop Enter user account password: Passwort des Benutzerkontos eingeben: XDM XDM RDP RDP X2GoKDrive session X2GoKDrive-Sitzung Information Hinweis Filter Filter Select desktop: Desktopauswahl: Your current color depth is different from the session's color depth. This may cause problems reconnecting to this session and in most cases <b>you will lose the session</b> and have to start a new one! Die aktuell verwendete Farbtiefe unterscheidet sich von der der wiederherzustellenden Sitzung. Der Versuch, die Sitzung fortzuführen kann zu Fehlern führen, inbesondere dem <b>Verlust der ganzen Sitzung</b>! It's highly recommended to change the color depth of your display to %n bit(s) and restart your X.Org Server before you reconnect to this X2Go session. %n will be replaced with a number Es wäre wahrscheinlich besser, die Farbtiefe Ihres Displays auf %n Bit zu ändern und den X.Org-Server neu zu starten, bevor Sie erneut versuchen sich zu dieser Sitzung zu verbinden. Es wäre wahrscheinlich besser, die Farbtiefe Ihres Displays auf %n Bits zu ändern und den X.Org-Server neu zu starten, bevor Sie erneut versuchen sich zu dieser Sitzung zu verbinden. <br />Do you want to resume this session anyway? <br />Wollen Sie diese Sitzung trotzdem wiederherstellen versuchen? PulseAudio is not running PulseAudio läuft nicht Sound output will be disabled for this session. Please enable PulseAudio in the configuration dialog or disable sound in the session settings Audioausgabe wird in dieser Sitzung deaktiviert. Bitte aktivieren Sie PulseAudio im Konfigurationsdialog oder deaktivieren Sie die Audiounterstützung in der Sitzungseinstellung Are you sure you want to terminate this session? Unsaved documents will be lost. Die Sitzung wird beendet. Sind Sie sicher? Ungespeicherte Dokumente gehen verloren. <b>Connection failed.</b> : <b>Verbindung fehlgeschlagen.</b> : (file does not exist) (Datei existiert nicht) (directory does not exist) (Verzeichnis existiert nicht) Invalid value for parameter "--link". Unerwarteter Wert für Parameter "--link". Invalid value for parameter "--clipboard". Unerwarteter Wert für Parameter "--clipboard". Invalid value for parameter "--sound". Unerwarteter Wert für Parameter "--sound". Invalid value for parameter "--geometry". Unerwarteter Wert für Parameter "--geometry". Invalid value for parameter "--set-kbd". Unerwarteter Wert für Parameter "--set-kbd". Invalid value for parameter "--ldap". Unerwarteter Wert für Parameter "--ldap". Invalid value for parameter "--ldap1". Unerwarteter Wert für Parameter "--ldap1". Invalid value for parameter "--ldap2". Unerwarteter Wert für Parameter "--ldap2". Invalid value for parameter "--pack". Unerwarteter Wert für Parameter "--pack". Available pack methods: Liste aller Packmethoden: Pack Methods Packmethoden Option is not available in this build. Option in diesem Build nicht verfügbar. Unable to create directory: Verzeichnis kann nicht erstellt werden: Cannot open key: Schlüssel kann nicht geöffnet werden: <br>(C) 2005-2016 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> <br> (C) 2005-2016 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> <br>X2Go Plugin mode was sponsored by <a href="http://www.foss-group.de/">FOSS-Group GmbH (Freiburg)</a><br> <br>X2GoPlugin-Modus wurde gefördert durch <a href="http://www.foss-group.de/">FOSS-Group GmbH (Freiburg)</a><br> <br>This is a client to access the X2Go network-based computing environment. This client will be able to connect to X2Go Server(s) and start, stop, resume and terminate (running) desktop sessions. X2Go Client stores different server connections and may automatically request authentication data from LDAP directories. Furthermore, it can be used as a fullscreen login screen (replacement for login managers like XDM). Please visit <a href="http://www.x2go.org">the project home page at x2go.org</a> for further information. <br>Dies ist ein Client für den Zugriff auf die netzwerkbasierte Anwendungsumgebung X2Go. Mit Hilfe dieser Anwendung können Sie Verbindungen zu einem X2GoServer starten, stoppen, laufende Sitzungen fortführen oder anhalten und verschiedene Sitzungskonfigurationen verwalten. Die Authentifizierung kann über LDAP erfolgen und das Programm kann im Vollbildmodus (als Ersatz für XDM) gestartet werden. Weitere Informationen erhalten Sie auf <a href="http://www.x2go.org">der Projektwebsite x2go.org</a>. <b>X2Go Client v. <b>X2GoClient V. Please check LDAP Settings. Bitte überprüfen Sie die LDAP-Einstellungen. Check whether the package providing "scdaemon" is installed. The current search path is: Bitte überprüfen Sie, ob das Paket, das "scdaemon" bereitstellt, installiert ist. Der aktuelle Suchpfad lautet: didn't start yet. ist bis jetzt noch nicht gestartet. Unable to read from scdaemon. Kann nicht von scdaemon lesen. No valid card found. Keine gültige Karte gefunden. This card is unknown to the X2Go system. Das X2Go-System kennt diese Karte nicht. Can't start X.Org Server. Please check your installation. X.Org-Server lässt sich nicht starten. Bitte überprüfen Sie Ihre Installation. Remote server does not support file system exports through SSH tunnels. Please update your x2goserver package. Der gewählte Server unterstützt keinen Dateisystemexport via SSH-Tunnel. Bitte installieren Sie dort eine neuere Version des X2GoServer-Pakets. Unable to create SSH tunnel for Folder Sharing and Printing support: Kann keinen SSH-Tunnel für die Druck- und Dateifreigabe erstellen: Unable to read: Lesefehler: Unable to write: Schreibfehler: Error getting window geometry. (Did you close the window?) Fehler beim Ermitteln der Fenstergeometrie. (Haben Sie das Fenster geschlossen?) Invalid value for argument "speed" Unerwarteter Wert für Parameter "speed" Applications ... Anwendungen... View only Nur betrachten User Benutzer XDMCP XDMCP No accessible desktop found Kein freigegebener Desktop gefunden Full access Vollzugriff Only my desktops Nur eigene Desktops Reconnect Neu verbinden Connecting to broker Verbinden mit Broker </b><br> (C. 2006-2010 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br> </b><br> (C. 2006-2010 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br> <br>x2goplugin mode was sponsored by <a href="http://www.foss-group.de/">FOSS-Group GmbH(Freiburg)</a><br> <br>x2goplugin Modus wurde gefördert durch <a href="http://www.foss-group.de/">FOSS-Group GmbH (Freiburg)</a><br> <br>Client for use with the X2Go network based computing environment. This Client will be able to connect to X2Go server(s) and start, stop, resume and terminate (running) desktop sessions. X2Go Client stores different server connections and may automatically request authentication data from LDAP directories. Furthermore it can be used as fullscreen loginscreen (replacement for loginmanager like xdm). Please visit x2go.org for further information. <br>Ein Client für den Zugriff auf die serverbasierende Anwendungsumgebung X2Go. Mit Hilfe dieser Anwendung können Sie Sitzungen eines X2GoServers starten, stoppen, laufende Sitzungen fortführen oder anhalten und verschiedene Sitzungskonfigurationen verwalten. Die Authentifizierung kann über LDAP erfolgen und das Programm kann im Vollbildmodus (als Ersatz für XDM) gestartet werden. Weitere Informationen erhalten SIe auf x2go.org. WINDOWS-1252 WINDOWS-1252 ISO8859-1 ISO8859-1 wrong value for argument"speed" wrong value for argument"speed" application/x2go:x2go:Configuration File for X2Go Session application/x2go:x2go:Konfigurationsdatei für eine X2Go-Sitzung PrintDialog Print Druck You've deactivated the X2Go Client printing dialog. Sie haben den clientseitigen X2Go-Druckdialog deaktiviert. You may reactivate this dialog using the X2Go Client settings dialog. To do so, follow this path in the menu bar: Options -> Settings Über die Clienteinstellungen (Menü -> Einstellungen -> Konfiguration) können Sie den Dialog wieder einblenden. You've deactivated the x2go client printing dialog. Sie haben den clientseitigen Druckdialog deaktiviert. You may reactivate this dialog using the x2goclient settings dialog (Menu -> Options -> Settings) Über die Clienteinstellungen (Menü -> Einstellungen -> Konfiguration) können Sie den Dialog wieder einblenden Print - X2Go Client Drucken - X2GoClient PrintProcess Save File Datei speichern PDF Document (*.pdf) PDF-Dokument (*.pdf) Failed to execute command: Befehl konnte nicht ausgeführt werden: Printing error. Fehler beim Drucken. Printing error Druckfehler PrintWidget Form Form Print Druck View as PDF Als PDF anzeigen Print settings Druckeinstellungen Printer command: Druckbefehl: ... ... Viewer settings Anzeigeoptionen Open in viewer application Im (PDF-) Anzeigeprogramm öffnen Command: Befehl: Save to disk Als Datei speichern Show this dialog before start printing Diesen Dialog vor Druckstart anzeigen Please configure your client side printing settings.<br><br>If you want to print the created file, you'll need an external application. Typically you can use <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> and <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>You can find further information <a href="http://www.x2go.org/index.php?id=49">here</a>. Legen Sie hier die Druckerkonfiguration für den clientseitigen Druck fest.<br><br>Um die erzeugten Dateien auf einem Drucker ausgeben zu können, wird ein externes Programm benötigt. Typischerweise wird <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">Ghostprint</a> und <a href="http://pages.cs.wisc.edu/~ghost/gsview/">Ghostview</a> verwendet<br>Weiterführende Infromationen erhalten Sie <a href="http://www.x2go.org/index.php?id=6">hier</a>. Printer: Drucker: Print using default Windows PDF Viewer (Viewer application needs to be installed) Mit Hilfe eines PDF-Anzeigeprogramms drucken (PDF-Anzeigeprogramm muss installiert sein) Please configure your client side printing settings.<br><br>If you want to print the created file, you'll need an external application. Typically you can use <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> and <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>You can find further information <a href="http://www.x2go.org/index.php?id=49">here</a>. Legen Sie hier die Druckerkonfiguration für den clientseitigen Druck fest.<br><br>Um die erzeugten Dateien auf einem Drucker ausgeben zu können, wird ein externes Programm benötigt. Typischerweise wird <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">Ghostprint</a> und <a href="http://pages.cs.wisc.edu/~ghost/gsview/">Ghostview</a> verwendet<br>Weiterführende Infromationen erhalten Sie <a href="http://www.x2go.org/index.php?id=6">hier</a>. PrinterCmdDialog Printer command Druckbefehl Command Befehl Please enter your customized or individual printing command. Examples: kprinter lpr -P hp_laserjet Bitte geben Sie einen individuellen Druckbefehl an. Beispiele: kprinter lpr -P hp_laserjet Output format Ausgabeformat Please choose the printing file format (regarding to your printing environment - if you use CUPS you may use PDF) Bitte wählen Sie ein Dateiformat für den Druck (passend zu Ihrer Druckumgebung - bei Verwendung von CUPS können Sie z.B. PDF nutzen) PDF PDF PS PS Data structure Datenstruktur Please choose the method of printing file input (some commands accepting printing files as program options, some are awaiting data on standard input): Bitte wählen Sie die Ausgabeform für die Druckübergabe (einige Druckumgebungen erwarten Dateien als Programmoptionen, andere erwarten die Ausgabe als "standard input"): standard input (STDIN) standard input (STDIN) Specify path as program parameter Geben Sie den Pfad als Programmoption an Please enter your customized or individual printing command. Example: Bitte geben Sie einen individuellen Druckbefehl an. Beispiel: <Path to gsprint.exe> -query -color <Pfad zur gsprint.exe> -query -color PulseManager Unable to find the PulseAudio binary. Neither bundled, nor found in $PATH nor additional directories. Kann das PulseAudio-Binary nicht finden. Es ist weder im Paket, noch im $PATH, noch in zusätzlichen Verzeichnissen enthalten. If you downloaded the bundled, pre-compiled version from the official home page, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Wenn Sie das Installationspaket mit der vorkompilierten Version von der offiziellen Homepage heruntergeladen haben, senden Sie bitte einen Fehlerbericht: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Could not allocate buffer for getting current working directory! Konnte keinen Puffer anlegen, um das aktuelle Arbeitsverzeichnis zu bestimmen! getcwd() failed! getcwd() schlug fehl! PulseAudio failed to start! PulseAudio konnte nicht gestartet werden! Sound support will not be available. If you downloaded the bundled, pre-compiled version from the official home page, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Sound-Unterstützung wird nicht verfügbar sein. Wenn Sie das Installationspaket mit der vorkompilierten Version von der offiziellen Homepage heruntergeladen haben, senden Sie bitte einen Fehlerbericht: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Error fetching PulseAudio version number! Konnte Versionsnummer von PulseAudio nicht ermitteln! Unexpected character found when parsing version string for major version number Beim Parsen des Versionsstrings wurde auf der Suche nach der Hauptversionsnummer ein unerwartetes Zeichen entdeckt Unexpected character found when parsing version string for minor version number Beim Parsen des Versionsstrings wurde auf der Suche nach der Unterversionsnummer ein unerwartetes Zeichen entdeckt Unexpected character found when parsing version string for micro version number Beim Parsen des Versionsstrings wurde auf der Suche nach der Unter-Unterversionsnummer ein unerwartetes Zeichen entdeckt Supposed to skip major version number. Something is wrong. Hauptversionsnummer soll übersprungen werden. Irgendetwas ist hier falsch. Unable to convert major version number string to integer. Kann Hauptversionsnummernstring nicht in Ganzzahl wandeln. Unable to convert minor version number string to integer. Kann Unterversionsnummernstring nicht in Ganzzahl wandeln. Unable to convert micro version number string to integer. Kann Unter-Unterversionsnummernstring nicht in Ganzzahl wandeln. Unexpected format encountered. Auf unerwartetes Format gestoßen. Unable to start PulseAudio binary. PulseAudio-Binary konnte nicht gestartet werden. Unable to play startup sound. Kann Start-Ton nicht abspielen. Sound support will not be available. Sound-Unterstützung wird nicht verfügbar sein. If you downloaded the bundled, pre-compiled version from the official home page or the upstream Linux packages, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Wenn Sie das Installationspaket mit der vorkompilierten Version von der offiziellen Homepage oder die Linux-Pakete von Upstream heruntergeladen haben, senden Sie bitte einen Fehlerbericht: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> QObject No response received from the remote server. Do you want to terminate the current session? Keine Antwort vom Server empfangen. Möchten Sie die Sitzung unterbrechen? X2Go Client could not find any suitable X11 server. X2GoClient konnte keinen geeigneten X11-Server finden. X2Go Client could not start X11 server. X2GoClient konnte den X11-Server nicht starten. X2Go Client requires XQuartz to be installed. If XQuartz is already installed on your system, please select the correct path in the now upcoming dialog. Refer to the end of this message for path examples, in case you do not know the exact location yourself. Should you have <b>not</b> installed XQuartz yet, please follow the outlined steps: X2GoClient setzt ein installiertes XQuartz voraus. Wenn XQuartz bereits auf Ihrem System installiert ist, wählen Sie bitte den passenden Pfad im nun erscheinenden Dialogfenster aus. Falls Sie sich nicht sicher sind, finden Sie am Ende dieses Texts ein paar gängige Pfade als Vorschlag. Falls Sie XQuartz <b>noch nicht</b> installiert haben, befolgen Sie bitte diese Anleitung: MacPorts users, please install either the port <b>xorg-server</b> or the port <b>xorg-server-devel</b>. Upon successful installation, please follow the instructions printed by the port utility to autostart/load the server. All other users, please obtain and install XQuartz from: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> Afterwards, restart X2Go Client and select the correct path to the X11 application in the general X2Go Client settings. This will most likely be <center><b>/Applications/MacPorts/X11.app</b></center> or <center><b>/Applications/Utilities/XQuartz.app</b></center> MacPorts-Benutzer installieren bitte entweder den Port <b>xorg-server</b> oder den Port <b>xorg-server-devel</b>. Nach erfolgreicher Installation befolgen Sie bitte die vom Port-Utility angezeigte Anleitung, um den Server automatisch zu laden und zu starten. Alle anderen Benutzer beziehen und installieren XQuartz bitte von: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> Starten Sie anschließend X2GoClient neu, und wählen Sie den passenden Pfad zur X11-Anwendung in den allgemeinen X2GoClient-Einstellungen. Gängige Pfade könnten sein <center><b>/Applications/MacPorts/X11.app</b></center> oder <center><b>/Applications/Utilities/XQuartz.app</b></center> SessionButton Session Preferences... Sitzungsvoreinstellungen... Delete Session... Sitzung löschen... Select Type Auswahl Select Resolution Wähle Auflösung Toggle Sound support Aktiviere Audiounterstützung New Session Neue Sitzung KDE KDE Published applications Veröffentlichte Anwendungen fullscreen Vollbild Display Anzeige Maximum Maximum Enabled aktiviert Disabled deaktiviert /usr/bin/startkde /usr/bin/startkde window Fenster Session preferences... Sitzungseinstellungen... Create session icon on desktop... Desktopsymbol erzeugen... Session preferences ... Sitzungsvoreinstellungen ... Create session icon on desktop ... Desktopsymbol erzeugen ... Delete session Sitzung entfernen Session actions Optionen Select type Typ Select resolution Auflösung Toggle sound support Sound running aktiv suspended angehalten RDP connection RDP-Verbindung Connection to local desktop Zugriff auf lokalen Desktop XDMCP XDMCP SessionExplorer Back Zurück Create session icon on desktop Desktopsymbol erzeugen Desktop icons can be configured not to show x2goclient (hidden mode). If you like to use this feature you'll need to configure login by a gpg key or gpg smart card. Use x2goclient hidden mode? Der Aufruf über Desktopsymbole kann erfolgen, ohne dass der X2Go Client sichtbar wird (versteckter Modus). Diesen Modus können Sie nutzen, wenn Sie den Login-Vorgang über einen GPG-Schlüssel oder eine GPG-Smartcard konfiguriert haben. Wollen Sie den versteckten Modus verwenden? Create session icon on desktop. Desktopsymbol erzeugen. Desktop icons can be configured not to show X2Go Client (hidden mode.) If you like to use this feature you'll need to configure login via a GPG key or GPG Smart Card. Use X2Go Client's hidden mode? Der Aufruf über Desktopsymbole kann erfolgen, ohne dass der X2Go Client sichtbar wird (versteckter Modus). Diesen Modus können Sie nutzen, wenn Sie den Login-Vorgang über einen GPG-Schlüssel oder eine GPG-Smartcard konfiguriert haben. Wollen Sie den versteckten Modus verwenden? Show session tray icon when running Sitzungssymbol während Verbindung in der Taskleiste anzeigen New Session Neue Sitzung X2Go Link to session X2Go-Verknüpfung zu einer Sitzung Are you sure you want to delete this session? Sind Sie sicher, dass Sie die Sitzung löschen wollen? SessionManageDialog E&xit Be&enden &New Session &Neue Sitzung &Session Preferences &Sitzungsvoreinstellungen &Delete Session &Sitzung löschen Delete Delete löschen Session Management Sitzungsverwaltung &New session &Neue Sitzung &Session preferences &Sitzungsvoreinstellungen &Delete session &Sitzung löschen &Create session icon on desktop ... &Desktopsymbol erzeugen ... Session management Sitzungsverwaltung &Create session icon on desktop... &Desktopsymbol erzeugen... SessionWidget Session name: Sitzungsname: << change icon << Symbol ändern Path: Pfad: &Server &Server Host: Host: Login: Login: SSH port: SSH-Port: Use RSA/DSA key for ssh connection: RSA-/DSA-Schlüssel verwenden (ssh): Try auto login (ssh-agent or default ssh key) Anmeldung über voreingestellten SSH-Schlüssel oder ssh-agent Kerberos 5 (GSSAPI) authentication Kerberos5 (GSSAPI) Authentifizierung Delegation of GSSAPI credentials to the server Übertragung der GSSAPI-Legitimation auf den Server Use Proxy server for SSH connection Proxy-Server für SSH-Verbindung verwenden Proxy server Proxy-Server SSH SSH HTTP HTTP Same login as on X2Go Server Gleiche Anmeldung wie für X2Go-Server Same password as on X2Go Server Gleiches Kennwort wie für X2Go-Server RSA/DSA key: RSA/DSA-Schlüssel: ssh-agent or default ssh key SSH-Agent oder SSH-Standardschlüssel Type: Typ: Port: Port: &Session type &Sitzungsart Session type: Sitzungsart: Connect to Windows terminal server Verbindung mit Windows Terminalserver herstellen Custom desktop Andere Desktopumgebung Single application Anwendung Published applications Veröffentlichte Anwendungen Command: Befehl: Advanced options... Erweiterte Einstellungen... Path to executable Pfad zum Programm Direct RDP Connection Direkte RDP Verbindung RDP port: RDP port: Open picture Öffne Bild Pictures Bilder Open key file Öffne Schlüssel Values ranging from <b>0</b> to <b>65535</b> are allowed.<br />A value of <b>0</b> will either use the port specified in the SSH configuration file belonging to a host or shortname, or use the default of <b>22</b>. Werte im Bereich von <b>0</b> bis <b>65535</b> sind zulässig.<br />Mit dem Wert<b>0</b> wird, wenn vorhanden, der Wert aus der SSH-Konfigurationsdatei für den angegebenen Host oder Kurznamen verwendet, ansonsten der Standardwert <b>22</b>. Try auto login (via SSH Agent or default SSH key) Anmeldung über voreingestellten SSH-Schlüssel oder ssh-agent SSH Agent or default SSH key SSH-Agent oder SSH-Standardschlüssel Run in X2GoKDrive (experimental) In X2GoKDrive starten (experimentell) Connect to Windows Terminal Server Verbindung mit Windows Terminalserver herstellen X2Go/X11 Desktop Sharing X2Go-/X11-Desktop-Sharing Direct RDP connection Direkte RDP-Verbindung All files Alle Dateien X2Go Client is running in portable mode. You should use a path on your USB device to be able to access your data wherever you are. X2Go Client wird gerade als portable Anwendung ausgeführt. Sie sollten einen Pfad auf dem USB-Medium wählen, um von überall aus auf Ihre Daten zugreifen zu können. Direct XDMCP connection Direkte XDMCP-Verbindung Server: Server: direct XDMCP connection direkte XDMCP-Verbindung rdesktop command line options: rdesktop Kommandozeilenoptionen: New session Neue Sitzung Connect to local desktop Zugriff auf lokalen Desktop XDMCP server: XDMCP-Server: XDMCP XDMCP Error Fehler x2goclient is running in portable mode. You should use a path on your usb device to be able to access your data whereever you are x2goclient wird gerade als portable Anwendung ausgeführt. Sie sollten einen Pfad auf dem USB-Medium wählen, um von überall aus auf Ihre Daten zugreifen zu können. SettingsWidget &Display &Display &Keyboard &Tastatur Sound Audio &Clipboard Mode Zwis&chenablage-Modus Bidirectional copy and paste Kopieren und Einfügen in beide Richtungen möglich Copy and paste from client to server Kopieren und Einfügen nur von Client zu Server möglich Copy and paste from server to client Kopieren und Einfügen nur von Server zu Client möglich Disable clipboard completely Zwischenablage komplett deaktivieren Auto detect keyboard settings Tastatureinstellungen automatisch erkennen Do not configure keyboard Tastatur nicht konfigurieren Configure keyboard Tastatur konfigurieren Model: Modell: Layout: Tastaturlayout: Variant: Variante: RDP Client RDP Client &Clipboard mode Zwis&chenablage-Modus Fullscreen Vollbild Custom Eigener Window Fenster Use whole display Ganzen Bildschirm verwenden Maximum available Maximal verfügbare Größe Set display DPI Auflösung festlegen (DPI) Xinerama extension (support for two or more physical displays) Xinerama-Erweiterung (unterstützt zwei oder mehr Bildschirme) Width: Breite: Height: Höhe: &Display: &Bildschirm: &Identify all displays &Alle Bildschirme identifizieren Auto-detect keyboard settings Tastatureinstellungen automatisch erkennen RDP client RDP-Client FreeRDP/X11 (pre-2.x style options) FreeRDP/X11 (Parameterformat für Versionen älter als 2.x) FreeRDP/X11 (2.x style options) FreeRDP/X11 (Parameterformat ab Version 2.x) Keep current keyboard Settings Tastaturlayout behalten Keyboard layout: Tastaturlayout: Keyboard model: Tastatur: Enable sound support Audiounterstützung aktivieren Start sound daemon Starte Sound Server Use running sound daemon Benutze existierenden Sound Server Use SSH port forwarding to tunnel sound system connections through firewalls Benutze Port-Weiterleitung über Tunnel um Audiosignale über Firewalls zu verbinden Use default sound port Benutze standard Audio Port Sound port: Audio Port: Client side printing support Clientseitige Druckunterstützung Additional parameters: Zusätzliche Parameter: Command line: Kommandozeile: XDMCP client XDMCP-Client us de pc105/us pc105/de password Kennwort ShareWidget &Folders &Ordner Path Pfad Automount automatisch verbinden Add Hinzufügen Delete Löschen Path: Pfad: Use ssh port forwarding to tunnel file system connections through firewalls Benutze SSH-Port-Weiterleitung über Tunnel um Dateisysteme über Firewalls zu verbinden Select folder Wähle Ordner Filename encoding Kodierung der Dateinamen Use SSH port forwarding to tunnel file system connections through firewalls Benutze SSH-Port-Weiterleitung, um Dateisysteme per Tunnel durch Firewalls hindurch zu verbinden X2Go Client is running in portable mode. You should use a path on your USB device to be able to access your data wherever you are. X2GoClient wird gerade als portable Anwendung ausgeführt. Sie sollten einen Pfad auf dem USB-Medium wählen, um von überall aus auf Ihre Daten zugreifen zu können. WINDOWS-1252 WINDOWS-1252 ISO8859-1 ISO8859-1 local: lokal: remote: entfernt: Error Fehler x2goclient is running in portable mode. You should use a path on your usb device to be able to access your data whereever you are x2goclient befindet sich im portablen Ausführungsmodus. Wenn Sie einen Pfad ausserhalb des USB Geräts wählen, können sie auf die Daten nicht von überall aus zugreifen SshMasterConnection SSH proxy connection error Verbindungsfehler SSH-Proxy SSH proxy connection error. SSH-Proxy-Verbindungsfehler. SSH proxy connection error: SSH-Proxy Verbindungsfehler: Failed to create SSH proxy tunnel. Aufbau des SSH-Proxy-Tunnels fehlgeschlagen. Cannot initialize libssh. Kann libssh nicht initialisieren. Cannot create SSH session. Kann SSH-Sitzung nicht erstellen. Using environment-provided username. Verwende Benutzername aus Environment. Cannot connect to proxy server. Verbindung zu Proxy-Server nicht möglich. Authentication failed. Authentisierung fehlgeschlagen. Failed to start SSH client. Please check your installation and GSSApi configuration. Konnte den SSH-Client nicht starten. Bitte überprüfen Sie Ihre Installation und die GSSApi-Konfiguration. Check your GSSApi configuration or choose another authentication method. Überprüfen Sie die GSSApi-Konfiguration oder wählen Sie eine andere Authentisierungsmethode. Reconnect session Sitzung wiederherstellen Cannot open file Kann Datei nicht öffnen Cannot create remote file Kann entfernte Datei nicht anlegen Cannot write to remote file Kann in entfernte Datei nicht schreiben %1 failed. Argument in this context will be a function name. %1 schlug fehl. channel_open_forward failed. channel_open_forward schlug fehl. channel_open_session failed. channel_open_session schlug fehl. Error writing to socket. Fehler beim Schreiben auf Socket. Error reading channel. Kann nicht aus Channel lesen. channel_write failed. channel_write schlug fehl. Error reading from TCP socket. Konnte nicht von TCP-Socket lesen. Failed to create SSH proxy tunnel Aufbau des SSH-Proxy-Tunnels fehlgeschlagen Can not initialize libssh Kann libssh nicht initialisieren Can not create ssh session Kann SSH-Sitzung nicht erstellen Can not connect to proxy server Verbindung zu Proxy-Server nicht möglich Can not connect to Verbindungsaufbau nicht möglich Authentication failed Anmeldung fehlgeschlagen channel_forward_listen failed channel_forward_listen schlug fehl Failed to start SSH Client. Please check your installation and GSSApi configuration Konnte SSH Client nicht starten. Bitte überprüfen Sie Ihre Installation und die GSSApi-Konfiguration. Check your GSSApi configuration or choose another authentication method Überprüfen Sie die GSSApi-Konfiguration oder wählen Sie eine andere Authentisierungsmethode. Can not open file Kann Datei nicht öffnen Can not create remote file Kann entfernte Datei nicht öffnen Can not write to remote file Kann entfernte Datei nicht schreiben Cannot connect to Kann Verbindung nicht herstellen zu channel_open_forward failed channel_open_forward schlug fehl channel_open_session failed channel_open_session schlug fehl channel_request_exec failed channel_request_exec schlug fehl error writing to socket Fehler beim Schreiben auf Socket error reading channel Channel Lesefehler channel_write failed Channel Schreibfehler error reading tcp socket Lesefehler TCP-Socket SshProcess Error creating socket Socket-Fehler beim Erstellen Error creating socket. Socket konnte nicht erstellt werden. Error binding Socket-Bind-Fehler XSettingsWidget Open File Datei öffnen Executable (*.exe) Ausführbare Datei (*.exe) XSettingsWidgetUI Form Formular You must restart the X2Go Client for the changes to take effect Sie müssen X2GoClient neu starten, um die Änderungen zu aktivieren use integrated X-Server integrierten X-Server verwenden do not use primary clipboard Nicht das primäre Clipboard verwenden use custom X-Server benutzerdefinierten X-Server verwenden custom X-Server benutzerdefinierter X-Server executable: Ausführbare Datei: start X-Server on X2Go Client start X-Server auf X2GoClient starten command line options: Kommandozeilenoptionen: X-Server command line options Kommandozeilenoptionen des X-Servers window mode: Fenstermodus: fullscreen mode: Vollbildmodus: single application: Einzelanwendung: whole display: Ganzer Bildschirm: sshProcess Unable to create: Erstellung fehlgeschlagen: Yes Ja No Nein Unable to write: Schreibfehler: Error Fehler Cannot create temporary file Temporäre Datei konnte nicht angelegt werden Host key verification failed Host-Key Überprüfung fehlgeschlagen x2goclient-4.1.2.3/res/i18n/x2goclient_es.ts0000644000000000000000000072722414447111613015330 0ustar AppDialog Published Applications Aplicaciones Publicadas Search: Buscar: &Start &Iniciar &Close &Cerrar Multimedia Multimedia Development Desarrollo Education Educación Game Juegos Graphics Gráficos Network Red Office Oficina Settings Preferencias System Sistema Utility Utilidades Other Otras BrokerPassDialogUi Dialog Diálogo Old password: Contraseña anterior: New password: Nueva contraseña: Confirm password: Repetir nueva contraseña: TextLabel Etiqueta BrokerPassDlg Passwords do not match Las contraseñas introducidas no coinciden CUPSPrintWidget Form Formulario Name: Nombre: Properties Propiedades State: Estado: Accepting jobs: Aceptando trabajos: Type: Tipo: Location: Ubicación: Comment: Comentarios: Idle Ocupada Printing Imprimiendo Stopped Detenida Yes Si No No CUPSPrinterSettingsDialog No option selected No se seleccionó ninguna opción This value is in conflict with another option. Esrte valor entra en conflicto con otra opción. Options conflict. Conflicto entre opciones. This value is in conflict with other option Este valor entra en conflico con otra opción Options conflict Conflicto de opciones ConTest Connectivity test Test de conexión HTTPS connection: Conexión HTTPS: SSH connection: Conexión SSH: Connection speed: Velocidad de la conexión: Failed Error 0 Kb/s 0 Kb/s OK Ok Socket operation timed out. Se agotó el tiempo de respuesta del Socket. Socket operation timed out Tiempo de espera sobrepasado en la conexión con el socket Failed: Error: ConfigDialog General General Display icon in system tray Mostrar icono de notificación en la bandeja del sistema Hide to system tray when minimized Mostrar como icono de notificación al minimizar Hide to system tray when closed Mostrar icono de notificación al cerrar Hide to system tray after connection is established Mostrar como icono de notificación cuando se establece la conexión Restore from system tray after session is disconnected Restaurar ventana al desconectar la conexión Use LDAP Usar LDAP Server URL: URL del servidor: BaseDN: BaseDN: Failover server 1 URL: URL del Servidor LDAP alternativo 1: Failover server 2 URL: URL del Servidor LDAP alternativo 2: X.Org Server settings Opciones del servidor X.Org PulseAudio settings Configuración PulseAudio Disable PulseAudio Desactivar PulseAudio Disable sound input Desactivar entrada de sonido Clientside (local) SSH daemon port for file system export usage: Uso de la exportación del puerto del demonio SSH en el lado del cliente (local): Pulseaudio settings Configuración de Pulseaudio Disable audio input Desactivar entrada de audio <font size="5">You must restart the X2Go Client for the changes to take effect</font><br><br> <font size="5">Debes reiniciar el cliente X2Go para aplicar los cambios</font><br><br> Your XQuartz version is too old. Tu versión de XQuartz es demasiado vieja. Your are using XQuartz (X Window System Server for OS X) version %1. Estás usando la versión de XQuartz (Servidor X Window de OS X) %1. This version causes problems with X applications in 24bit color mode. You should update your X11 environment. MacPorts users please follow the steps outlined on: <center><a href="https://guide.macports.org/chunked/using.common-tasks.html">https://guide.macports.org/chunked/using.common-tasks.html</a></center> Users who have installed XQuartz via the installer package can find updated versions on: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> Esta versión causa problemas con aplicaciones X en modo de color de 24bits. Deberías actualizar tu sistema X11. Los usuarios de MacPorts deben seguir las siguientes indicaciones: <center><a href="https://guide.macports.org/chunked/using.common-tasks.html">https://guide.macports.org/chunked/using.common-tasks.html</a></center> Los usuarios que han instalado XQuartz vía el paquete instalador pueden encontrar versiones acutlizadas: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> No valid XQuartz application selected. No se ha elegido una aplicaciones XQuartz válida. You did not select a valid XQuartz application. Please try again. Some standard installation locations may be: <center><b>/Applications/Utilities/X11.app</b></center> <center><b>/Applications/Utilities/XQuartz.app</b></center> <center><b>/Applications/MacPorts/X11.app</b></center> No has elegido una aplciación XQuartz válida. Inténtalo de nuevo. Algunas localizaciones habituales pueden ser: <center><b>/Applications/Utilities/X11.app</b></center> <center><b>/Applications/Utilities/XQuartz.app</b></center> <center><b>/Applications/MacPorts/X11.app</b></center> X-Server settings Configuración del servidor X X11 application: Aplicación X11: X11 version: Versión de X11: Find X11 application Encontrar aplicación X11 Clientside SSH port for file system export usage: Puerto SSH del lado del cliente para exportar el sistema de archivos: Start session embedded inside website Iniciar sesión dentro del sitio web Advanced options Opciones avanzadas Defaults Valores defecto &OK &Ok &Cancel &Cancelar Settings Propiedades Printing Impresión Warning Advertencia x2goclient could not find any suitable X11 Application. Please install Apple X11 or select the path to the application x2gocliente no puede encontrar ninguna aplicación X11. Instala Apple X11 o selecciona la ruta para la aplicación Your are using X11 (Apple X-Window Server) version Estás usando X11 (Servdio X-Windows de Apple) versión . This version causes problems with X-application in 24bit color mode. You should update your X11 environment (http://trac.macosforge.org/projects/xquartz). . Esta versión tiene problemas con aplicaciones X con 24bits de color. Deberías actualizar tu entorno X11 (http://trac.macosforge.org/projects/xquartz). No suitable X11 application found in selected path No se encontró una aplicación X11 válida en la ruta seleccionada &Connection &Conexión &Input/Output Entrada/Sal&ida &Media &Medios &Settings &Propiedades ConnectionWidget &Connection speed &Velocidad de la conexión Connection speed: Velocidad de la conexión: C&ompression C&ompresión Method: Método: Compression method: Método de compresión: Image quality: Calidad de la imagen: CupsPrinterSettingsDialog Dialog Diálogo General General Page size: Tamaño de página: Paper type: Tipo de papel: Paper source: Origen del papel: Duplex Printing Doble cara None Ninguna Long side A lo largo Short side A lo ancho Driver settings Propiedades del controlador Option Opción Value Valor No option selected No se seleccionó ninguna opción text texto EditConnectionDialog &Session &Sesión &Connection &Conexión &Input/Output Entrada/Sal&ida &Media &Medios &Shared folders C&arpetas compartidas &OK &Ok &Cancel &Cancelar Defaults Valores por defecto Session preferences - Preferencias de la sesión - ExportDialog &Cancel &Cancelar &share &compartir &Preferences ... &Preferencias ... &Custom folder ... &Carpeta personalizada ... Delete Delete Eliminar Share Folders Carpetas Compartidas share folders compartir carpetas Select folder Elegir carpeta FolderButton Sessions folder Carpeta de sesión FolderExplorer Folders Carpetas Create New Folder Crear Nueva Carpeta Rename Folder... Renombrar Carpeta... Change Icon... Cambiar Icono... Delete Folder... Eliminar Carpeta... Rename Folder ... Renombrar Carpeta ... Change Icon ... Cambiar Icono ... Delete Folder ... Eliminar Carpeta ... Open picture Abrir imagen Pictures Imágenes X2Go Client Cliente X2Go Folder Name: Nombre de la Carpeta: Error Error Unable to remove " No se puede eliminar " ". Folder is not empty. Please remove the contents of this directory and try again. ". La carpeta no está vacía. Por favor elimina el contenido de esta carpeta e inténtalo otra vez. ". Folder is not empty. Please remove content of folder and try again. " la Carpeta no está vacía. Elimina el contenido de la carpeta e inténtalo otra vez. Delete folder " Eliminar carpeta " New Folder Nueva Carpeta Help Shows this message. Muestra este mensaje. Prints version information. Imprime informacion de la versión. Shows the changelog. Muestra el registro de cambios. Shows git information as used at compile time. [Deprecated: please use --version.] Muestra la información git usada durante el compilado. [Obsoleto: mejor usar --version.] Shows available pack methods. Muestra los métodos de empaquetado disponibles. Do not resume sessions automatically. No retomar sesiones automáticamente. Hides menu bar. Oculta la barra de menú. Disables session editing. Desactiva la edición de la sesión. Starts maximized. Inica maximizado. Starts hidden (minimized to system tray where available.) Inicia oculto (minimizado en la bandeja del sistema cuando esté disponible.) Starts in "portable" mode. Inicia en modo "portable". Forces OpenPGP smart card authentication. Fuerza autenticacación OpenPGP smart card. Disable PulseAudio. Desactivar PulseAudio. Disable sound input. Desactivar entrada de sonido. Enables Xinerama by default. Activa Xinerama por defecto. Allows client side printing in LDAP mode. Permite la impresión en el lado del cliente en el modo LDAP. Enables thinclient mode. Starts without a window manager. Activa el modo thinclient. Inicia sin gestor de ventanas. Enables shutdown button. Activa el botón de apagado. Adds RSA key fingerprint to ".ssh/known_hosts" if authenticity of the server can't be determined. Añade huella de clave RSA a ".ssh/known_hosts" if la autenticidad del servidor no se puede determinar. Starts with LDAP support. Example: --ldap=ldapserver:389:o=organization,c=de Inicia con soporte LDAP. Ejempo: --ldap=ldapserver:389:o=organizacion,c=es Defines the first LDAP failover server. Define el primer servidor de reserva LDAP. Defines the second LDAP failover server. Define el segundo servidor de reserva LDAP. Defines the remote SSH server port. Default: 22. Define el puerto SSH del servidor remoto. Por defecto: 22. Defines the local machine's SSH server port. Needed for Client-Side Printing and File Sharing support. Default: 22. Define el puerto SSH del ordenador local. Es necesario para el soporte de impresión local y las carpetas compartidas. Por defecto: 22. Sets the default command. Default: 'KDE' (Desktop Session) Define el comando por defecto. Por defecto 'KDE' (Sesión de Escritorio) Starts the session named "session". Inicia la sesión llamada "sesión". Sets the user name for connecting to the remote SSH server to "username". Define el nombre de usuario para la conexión remota al servidor SSH de "usuario". Sets the default window geometry. Default: 800x600. Define la geometría de la ventana. Por defecto: 800x600. Sets the remote X2Go Agent's DPI value to "dpi". Default: same as local display. Define el valor DPI del agente X2Go al valor "dpi". Por defecto: el mismo valor que la pantalla en local. Sets the default link type. Default: "adsl". Define el tipo de enlace. Por defecto "adsl". Sets default pack method. Default: "16m-jpeg-9". Define el método de empaquetado. Por defecto "16m-jpeg-9". Sets the default clipboard mode. Default: "both". Define el modo de portapapeles. Por defecto "ambos". Sets the default keyboard layout to "layout". "layout" may be a comma-separated list. Define el mapa del teclado a "mapa". El "mapa" debe estar en formato texto separado por coma. Sets the default keyboard type. Define el tipo de teclado por defecto. Sets the user's home directory. Define la carpeta home del usuario. Enables or disables overwriting the current keyboard settings. Activa o desactiva la sobreescritura de la configuración del teclado. Automatically launches the application(s) "app", "app2", ... on session start in Published Applications mode. Abrir automáticamente la/s aplicación/es: "ap1", "ap2", ... durante el inicio de la sesión en el modo Aplicaciones Publicadas. Defines an alternative session config file path. Define una ruta de configuración de sesión alternativa. Force-enables session system tray icon. Fuerza la activación del icono en la bandeja del sistema. Automatically closes X2Go Client after a disconnect. Cierra automáticamente el cliente X2Go después de desconectar. Hides all Folder-Sharing-related options. Oculta las opciones relacionadas con la compartición de carpetas. Sets the broker name to display in X2Go Client. This parameter is optional. Define el nombre del broer a mostrar en el cliente X2Go. Este parámetro es opcional. Sets the path to an SSH key to use for authentication against an SSH session broker. The client's behavior is undefined if this flag is used for non-SSH session brokers. Define la ruta a la clave SSH usada para la autenticación SSH en el broker. Resultado indefinido si se usa este flag para brokers no SSH. Enables the use of the default SSH key or SSH agent for authentication against an SSH session broker. The client's behavior is undefined if this flag is used for non-SSH session brokers. Activa el uso de la clave SSH por defecto o el agente SSH para la autenticación sobre un broker SSH. Resultado indefinido si se usa este flag para brokers no SSH. Does not ask for user credentials during session broker authentication. This can be useful if you are using an HTTP(S) session broker without authentication. If you run an HTTP(S) server without authentication, but with user-specific profiles, then put the user name into the broker URL (refer to --broker-url.) The user name then will be extracted from the broker URL and be sent to the session broker. The client's behavior is undefined if this flag is used for non-HTTP(S) session brokers. No preguntar por las credenciales del usuario durante la autenticación con el broker. Esto puede ser útil si estás usando un servior broker HTTP(S) sin autenticación. Si usas un servidor broker HTTP(S) sin autenticación pero con perfiles de usuario específicos, debes poner el nombre de usuario dentro de la URL del broker (referido a --broker-url). El nombre de usuario debe sacarse de la URL del broker y debe ser enviada a la sesión del broker. Resultado indefinido si se usa este flag para sesiones de brokers no HTTP(S). Use broker credentials as session user/password credentials when using broker mode with broker authentication. Currently only affects direct RDP sessions. Usa las credenciales borker como credenciales de sesión usuario/contraseña cuando se use el modo broker con autenticación modo broker. En estos momentos sólo afecta a las sesiones RDP. Enables broker logout button. Use a custom/branded background image (SVG format) for X2Go Client's main window. If a directory is given, will randomly pick an SVG file inside of it. Usar una imagen de fodo personalizada (en formato SVG) para la ventana principal del cliente X2Go. Si se selecciona una carpeta con archivos SVG se elegirá uno de ellos aleatoriamente. Use a custom icon (SVG format) for additional branding to replace the default in the lower left corner of X2Go Client's main window. Usar un icono personalizado (en formato SVG) para reemplazar el original que se encuentra en la esquina inferior izquierda de la ventana principal del cliente X2Go. Disables X2Go Client's UNIX cleanup helper. This will prevent X2Go Client from terminating spawned processes after the main program terminates or crashes. Use with care and when in doubt, do not use this parameter at all. HelpDialog Options Opciones HttpBrokerClient us us pc105/us pc105/us Error Error Login failed!<br>Please try again Falló el inicio de sesión<br>Inténtalo de nuevo Your session was disconnected. To get access to your running session, please return to the login page or use the "reload" function of your browser. Tu sesión se desconectó. Para tener acceso a tu sesión en ejecución vuelve a la página de inicio de sesión o usa al función "recargar" de tu navegador. Host key for server changed. It is now: La clave del servidor ha cambiado. Ahora es: For security reasons, connection will be stopped La conexión ha finalizado por razones de seguridad The host key for this server was not found but an othertype of key exists.An attacker might change the default server key toconfuse your client into thinking the key does not exist No se ha encontrado la clave para este servidor aunque se han encontrado claves de otro tipo. Un hacker podría cambiar la clave por defecto del servidor para hacer creer al cliente que la clave no existe Could not find known host file.If you accept the host key here, the file will be automatically created No se encontró el archivos de claves conocidas en este equipo. Si aceptas se creará en nuevo archivo de claves The server is unknown. Do you trust the host key? Public key hash: Este servidor es desconocido. ¿Confiar en su clave? Hash de su clave pública: Host key verification failed Falló la comprobación de la clave del equipo Yes Si No No Verification code: Código de verificación: Enter passphrase to decrypt a key Introduce la frase de paso para desencriptar la clave Authentication failed Fallo de autenticación <br><b>Server uses an invalid security certificate.</b><br><br> <br><b>El servidor usa un certificado de seguridad no válido.</b><br><br> <p style='background:#FFFFDC;'>You should not add an exception if you are using an internet connection that you do not trust completely or if you are not used to seeing a warning for this server.</p> <p style='background:#FFFFDC;'>No deberías añadir una excepción de seguridad si estás usando una conexión a internet en la que no confías plenamente o si habitualmente no hay avisos de seguridad para este servidor.</p> Secure connection failed Fallo en la seguridad de la conexión For security reasons, the connection attempt will be aborted. Por motivos de seguridad, se cancelará la conexión actual. The host key for this server was not found but another type of key exists. An attacker might have changed the default server key to trick your client into thinking the key does not exist yet. La clave de equipo para esta servidor no se encontró o se encontró otro tipo. Un atacante podría haber cambiado la clave por defecto del servidor para engañar al cliente pensando que la clave no existe todavía. Could not find known hosts file. If you accept the host key here, the file will be automatically created. No se ha encontrado el archivo know-hosts. Si aceptas el archivo se creará automáticamente. Host key verification failed. Falló la verificación de la clave equipo. Enter user account password: Authentication failed. Falló la autenticación. Login failed!<br>Please try again. ¡Falló el inicio de sesión!<br>Inténtalo de nuevo. Secure connection failed. Falló la conexión segura. Issued to: Issued to: Common Name(CN) Common Name(CN) Organization(O) Organization(O) Organizational Unit(OU) Organizational Unit(OU) Serial Number Serial Number Issued by: Issued by: Validity: Validity: Issued on Issued on expires on expires on Fingerprints: Fingerprints: SHA1 SHA1 MD5 MD5 Exit X2Go Client Salir del cliente X2Go Add exception Añadir excepción InteractionDialog Terminal output: Salida del terminal: Cancel Cancelar Reconnect Reconectar MediaWidget Sound Sonido Enable sound support Activar soporte de sonido Start sound daemon Iniciar demonio de sonido Use running sound daemon Usar el demonio de sonido actual Use SSH port forwarding to tunnel sound system connections through firewalls Usar el tunel de puertos SSH para el sonido en conexiones a través de firewalls Use default sound port Usar el puerto para el sonido por defecto Sound port: Puerto de sonido: Client side printing support Soporte para imprimir en el cliente Deprecation Warning Adevertencia de función obsoleta ARTS support is scheduled to be removed soon. Please upgrade to PulseAudio. El soporte ARTS está previsto sea eliminado en breve. Por favor actualiza a PulseAudio. ESounD support is scheduled to be removed soon. Please upgrade to PulseAudio. El soporte ESounD está previsto sea eliminado en breve. Por favor actualiza a PulseAudio. ONMainWindow Starting x2goclient... Iniciando el cliente X2Go... us es pc105/us pc105/es X2Go Client Cliente X2Go connecting conectando Internet browser Navegador web Email client Cliente de correo OpenOffice.org OpenOffice.org Terminal Terminal Starting x2goclient in portable mode... data directory is: Iniciando x2goclint en modo portable... el directorio de los datos es: &Settings ... &Preferencias ... Support ... Soporte ... About X2GO client Acerca del cliente X2Go Started x2goclient. Cliente X2Go iniciado. Can't load translator: No se puede cargar el traductor: Translator: Traductor: installed. instalado. Share folder... Compartir carpeta... Suspend Suspender Terminate Terminar Reconnect Reconectar Detach X2Go window Abrir nueva ventana X2Go Minimize toolbar Minimizar barra de herramientas Session: Sesión: &Quit &Salir Ctrl+Q Ctrl+S Quit Salir &New session ... &Nueva sesión ... Ctrl+N Ctrl+N Session management... Gestión de sesiones... Ctrl+E Ctrl+E &Create session icon on desktop... &Crear icono de sesión en el escritorio... &Set broker password... &Seleccionar contraseña para el broker... &Connectivity test... Test de &conectividad... Show toolbar Mostrar barra de herramientas About Qt Sobre Qt Ctrl+Q exit Ctrl+S &Session &Sesión &Options &Opciones &Help &Ayuda Login: Usuario: Error Error Operation failed Falló la operación Password changed Contraseña cambiada Wrong password! ¡Contraseña errónea! Connecting to broker Conectando al broker <b>Authentication</b> <b>Autenticación</b> Restore Restaurar Not connected No conectado Multimedia Multimedia Development Desarrollo Education Educación Game Juegos Graphics Gráficos Network Redes Office Oficina Settings Ajustes System Sistema Utility Utilidades Other Otros Left mouse button to hide/restore - Right mouse button to display context menu Botón izquierdo del ratón para ocultar/restaurar - Botón derecho del ratón para mostrar el menú contextual Closing x2goclient... Cerrando x2goclient... Closed x2goclient. x2goclient finalizado. Please check LDAP settings Comprueba los datos de conexión LDAP no X2Go server found in LDAP no se encontró ningún servidor X2Go en el LDAP Create session icon on desktop Crear icono de sesión en el escritorio Desktop icons can be configured not to show x2goclient (hidden mode). If you like to use this feature you'll need to configure login by a gpg key or gpg smart card. Use x2goclient hidden mode? Los iconoes del escritorio pueden configurarse para no mostrar la ventana del cliente x2go (modo oculto). Si quieres usar esta característica tienes que configurar el inicio de sesión usando una clave gpg o una smart card. ¿Usar el cliente x2go en modo oculto? Show session tray icon when running Mostrar icono de sesión en la bandeja del sistema durante la ejecución New Session Nueva sesión X2Go Link to session Enlace a la sesión X2Go No X2Go sessions found, closing. No se han encontrado sesiones X2Go. wrong value for argument"--clipboard" valor erróneo para el argumento "--clipboard" SSH Error Error de SSH SSH daemon could not be started. You'll need SSH daemon for printing and file sharing. Normally, this should not happen as X2Go Client for Windows ships its internal sshd.exe. If you see this message, please report a bug against the X2Go bugtracker. El demonio SSH no pudo iniciarse Se necesita el demonio SSH para el sistema de impresión y compartición de archivos. Normalmente este error no debería aparecer ya que el Cliente X2Go para windows incluye su propio sshd.exe Si ves este mensaje te pedimos notifiques el error en el registro de errores de X2Go. SSH daemon is not running. You'll need SSH daemon for printing and file sharing Please ask your system administrator to provide the SSH service on your computer. El demonio SSH no pudo iniciarse Se necesita el demonio SSH para el sistema de impresión y compartición de archivos Pregunte al administrador del sistema para que suministre el servicio SSH en tu ordenador. SSH daemon failed to open the application's public host key. El demonio SSH falló al abrir la clave pública del host de la aplicación. SSH daemon failed to open the application's public key used for exporting folders and printers. El demonio SSH falló al abrir la clave pública del host de la aplicación usada para exportar carpetas e impresoras. SSH daemon failed to open the application's authoized_keys file. El demonio SSH falló al abrir el acrhivo authoized_keys de la aplicación. X2Go sessions not found No se encontró ninguna sesión X2Go Are you sure you want to delete this session? ¿Eliminar esta sesión? KDE KDE RDP connection Conexión RDP XDMCP XDMCP Connection to local desktop Conectar al escritorio local on on Starting connection to server: Iniciando conección con el servidor: to a Connection Error( Error en la conexión ( Couldn't find a SSH connection. No se pudo encontrar la conexión SSH. Enter passphrase to decrypt a key Introduce la frase de paso para desencriptar la clave Host key for server changed. It is now: La clave del servidor ha cambiado. Ahora es: For security reasons, connection will be stopped Se ha detenido la conexión por razones de seguridad The host key for this server was not found but an othertype of key exists.An attacker might change the default server key toconfuse your client into thinking the key does not exist No se ha encontrado la clave para este servidor aunque se han econtrado otras. Un hacker podría cambiar la clave por defecto del servidor para hacer creer al cliente que la clave no existe Could not find known host file.If you accept the host key here, the file will be automatically created No se encontró el archivos de claves en este equipo. Si aceptas se creará en nuevo archivo de claves The server is unknown. Do you trust the host key? Public key hash: Este servidor es desconocido. ¿Confiar en su clave? Hash de su clave pública: Host key verification failed Falló la comprobación de la clave del equipo Verification code: Código de verificación: This can be an indication of a man-in-the-middle attack. Somebody might be eavesdropping on you. For security reasons, it is recommended to stop the connection. Do you want to terminate the connection? Esto puede indicar un ataque del tipo main-in-the-middle. Alguien podría estar escuhando las comunicaciones. Por razones de seguridad se recomienda finalizar la conexión. ¿Finalizar la conexión? Yes Si No No If you accept the new host key the security of your connection may be compromised. Do you want to update the host key? Si aceptas la nueva clave de seguridad para tu conexión la seguridad en la conexión podría comprometerse. ¿Actualizar la clave del host? The host key for this server was not found but an othertype of key exists. An attacker might change the default server key to confuse your client into thinking the key does not exist. For security reasons, it is recommended to stop the connection. Do you want to terminate the connection? No se encuentra la clave del host para este servidor pero el servidor tiene otro tipo de clave disponible. Un atacante podría cambiar la clave por defecto del servidor para hacer creer al cliente x2go que la clave del servidor no existe. Por razones de seguridad se recomienda finalizar la conexión. ¿Finalizar la conexión? Authentication failed: Fallo en la autenticación: Authentication failed Falló la autenticación Enter password for SSH proxy Introduce la contraseña para el proxy SSH <b>Connection failed</b> <b>Error en la conexión</b> <b>Wrong password!</b><br><br> <b>Contraseña incorrecta</b><br><br> Connection failed: Fallo en la conexión: - Wrong password. - Contraseña incorrecta. unknown desconocido No server availabel Servidor no disponible Server not availabel Servidor no disponible Select session: Seleccionar sesión: running activa suspended suspendida Desktop Escritorio single application aplicación shadow session sesión tipo shadow Information Información No accessible desktop found No se encontró ningún escritorio al que conectarse Filter Filtro Select desktop: Elige escritorio: Warning Atención Your current color depth is different to the color depth of your x2go-session. This may cause problems reconnecting to this session and in most cases <b>you will loose the session</b> and have to start a new one! It's highly recommended to change the color depth of your Display to Tu profundidad de color actual es diferente de la profundidad de color de tu sesión de x2go. ¡Esto suele provocar problemas en la reconección y en la mayoría de los casos <b>perderás la sesión</b> y tendrás que iniciar una nueva! Te recomendamos cambiar la profundidad de color de tu pantalla a 24 or 32 24 o 32 bit and restart your X-server before you reconnect to this x2go-session.<br>Resume this session anyway? bit y reiniciar tu servidor X antes de reconectar a esta sesión x2go. <br>¿Recuperar esta sesión? suspending suspendiendo terminating terminando <b>Wrong Password!</b><br><br> <b>¡Contraseña incorrecta!</b><br><br> New session started Iniciada nueva sesión Session resumed Sesión suspendida Unable to create folder: No se ha podido crear la carpeta: Unable to write file: No se ha podido guardar el archivo: Emergency exit. Salida de emergencia. Waiting for proxy to exit. Esperando a la salida del proxy. Failed, killing the proxy. Error, finalizando el proxy. Wrong parameter: Parámetro incorrecto: Help Ayuda Pack Methodes Métodos de empaquetado Option is not availabel in this build La opción no está disponible en esta versión Changelog Registro de cambios Git Info Información Git Unable to create folder: No se ha podido crear la carpeta: Unable to write file: No se ha podido guardar el archivo: Attach X2Go window Añadir ventana X2Go Unable to create SSL tunnel: No fue posible crear el tunel SSL: Unable to create SSL Tunnel: No fue posible crear el tunel SSL: Finished Finalizada starting iniciando resuming Not sure if trying to connect to a resumed session or the running session is being resumed. Current translation is for trying to connect a resumed session. If not wil be better something like "desconectando" restaurando Connection timeout, aborting Tiempo de conexión finalizado. Cancelando aborting cancelando Are you sure you want to terminate this session? Unsaved documents will be lost ¿Seguro que quieres finalizar la sesión? Los documentos no guardados se perderán Session Sesión Display Monitor Creation time Not sure if "creation time" means the date the session was created Sesión creada en <b>Connection failed</b> : <b>Error en la conexión</b> : (can't open file) (no se puede abrir el archivo) (file not exists) (el archivo no existe) (directory not exists) (la carpeta no existe) wrong value for argument"--link" valor incorrecto para el argumento "--link" wrong value for argument"--sound" valor incorrecto para el argumento "--sound" wrong value for argument"--geometry" valor incorrecto para el argumento "--geometry" wrong value for argument"--set-kbd" valor incorrecto para el argumento "--set-kdb" wrong value for argument"--ldap" valor incorrecto para el argumento "--ldap" wrong value for argument"--ldap1" valor incorrecto para el argumento "--ldap1" wrong value for argument"--ldap2" valor incorrecto para el argumento "--ldap2" wrong value for argument"--pack" valor incorrecto para el argumento "--pack" wrong parameter: parámetro incorrecto: Options Opciones Available pack methodes: Métodos disponibles: RSA file empty. Archivo RSA vacío. Can not open key: No se puede abrir la clave: Support Soporte </b><br> (C. 2005-2016 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br> </b><br> (C. 2005-2016 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br> <br>x2goplugin mode was sponsored by <a href="http://www.foss-group.de/">FOSS-Group GmbH(Freiburg)</a><br> <br>el modo x2goplugin fue patrocinado por <a href="http://www.foss-group.de/">FOSS-Group GmbH(Freiburg)</a><br> <br>Client for use with the X2Go network based computing environment. This Client will be able to connect to X2Go server(s) and start, stop, resume and terminate (running) desktop sessions. X2Go Client stores different server connections and may automatically request authentication data from LDAP directories. Furthermore it can be used as fullscreen loginscreen (replacement for loginmanager like xdm). Please visit x2go.org for further information. <br>Cliente para usar con el sistema de acceso remoto X2Go. Este cliente es capaz de conectar con él/los servidor/es X2Go y iniciar, parar, guardar y terminar (si están en ejecucion) sesiones de escritorio. El Cliente X2Go almacena diferentes conexiones a servidores y puede recuperar de manera automática datos de autenticación desde directorios LDAP. Además puede usarse como un sistema de inicio de sesión a pantalla completa (reemplazando a gestores de inicio de sesión como xdm). Visita x2go.org para más información. <b>X2Go Client V. <b>cliente X2Go v. Please check LDAP Settings Revisa las opciones acceso a LDAP No valid card found No se encontró una semart card válida Card not configured. Tarjeta no configurada. This card is unknown by X2Go system El sistema C2Go no reconocoe esta smart card Unable to create file: Impoble crear el archivo: Can't connect to X server Please check your settings No se puede conectar con el servidor X Comprueba los datos de configuración Can't start X server Please check your settings No se puede iniciar el servidor X Comprueba los datos de configuración Can't start X Server Please check your installation No se puede iniciar el servidor X Comprueba la instalación del sistema Unable to execute: Imposible ejecutar el comando: Remote server does not support file system export through SSH Tunnel Please update to a newer x2goserver package El servidor remoto no soporta el sistema de archivos exportado a través del tunel SSH Actualiza el paquete x2goserver en el servidor Unable to read : Imposible leer: Unable to write : Imposible escribir: WINDOWS-1252 WINDOWS-1252 ISO8859-1 ISO8859-1 Error getting window geometry (window closed)? Fallo al obtener el tamaño de la ventana (¿está la ventana cerrada?) X2Go Session Sesión X2Go wrong value for argument"speed" valor incorrecto para el argumento "velocidad" Password: Contraseña: Keyboard layout: Tipo de teclado: Ok Ok Cancel Cancelar <b>Session ID:<br>Server:<br>Username:<br>Display:<br>Creation time:<br>Status:</b> <b>ID de Sesión:<br>Servidor:<br>Nombre de usuario:<br>Monitor:<br>Sesión creada en:<br>Estado:</b> Applications... Aplicaciones... Starting X2Go Client %1... Iniciando cliente X2Go %1... Starting X2Go Client in portable mode. Data directory is: Iniciando cliente X2Go en modo portable. La carpeta de datos es: About X2Go Client Acerca del cliente X2Go Started X2Go Client. Cliente X2Go iniciado. found. encontrado. English language requested, not loading translator. Lenguaje Inglés solicitado. No se carga el traductor. Non-fatal: can't load translator: Error no fatal: no se puede cargar el traductor: Trying to load language with lower preference, if existent. Intentando cargar el lenguaje con la menor preferencia si existe. Session management ... Mantenimiento de sesión ... &Create session icon on desktop ... &Crear icono de sesión en el escritorio ... &Set broker password ... &Establecer contraseña para el broker ... &Connectivity test ... Test de &conectividad ... Share folder ... Carpeta compartida ... A click displays the context menu. A left click hides or restores the window. A right click displays the context menu. Clic para ocultar o restaurar la ventana. Clic con el botón derecho para mostrar el menú contextual. Closing X2Go Client ... Cerrando el cliente X2Go ... Finished X2Go Client closing hooks. Cliente X2Go finalizado. Cerrando vínculos. Broker authentication failed! ¡Falló la autenticación del broker! no X2Go Server found in LDAP no se encontró el Servido X2Go en el entorno LDAP Connection error: Error en la conexión: Couldn't find an SSH connection. No se pudo encontrar la conexión SSH. Enter user account password: This can be an indication of a man-in-the-middle attack. Somebody might be eavesdropping on you. For security reasons, it is recommended to stop the connection attempt. Do you want to terminate the connection? Esto puede indicar un ataque del tipo hombre en el medio. Alguien podría estar espiándote. Por razones de seguridad se recomienda finalizar el intento de conexión. ¿Quieres terminar la conexión? Host key verification failed. Falló la verificación de la clave del equipo. The host key for this server was not found but another type of key exists. An attacker might have changed the default server key to trick your client into thinking the key does not exist yet. For security reasons, it is recommended to stop the connection attempt. Do you want to terminate the connection? No se encuentra la clave del host para este servidor pero el servidor tiene otro tipo de clave disponible. Un atacante podría cambiar la clave por defecto del servidor para hacer creer al cliente x2go que la clave del servidor no existe. Por razones de seguridad se recomienda finalizar la conexión. ¿Finalizar la conexión? Could not find known hosts file. If you accept the host key here, the file will be automatically created. No se ha encontrado el archivo know-hosts. Si aceptas el archivo se creará automáticamente. Authentication failed. Falló la autenticación. XDM XDM RDP RDP <b>Connection failed.</b> <b>Error en la conexión</b> No server available. Servidor no disponible. Server not available. Servidor no disponible. X2GoKDrive session No accessible desktop found. No se encontró ningún escritorio al que conectarse. Your current color depth is different from the session's color depth. This may cause problems reconnecting to this session and in most cases <b>you will loose the session</b> and have to start a new one! It's highly recommended to change the color depth of your display to Tu profundidad de color actual es diferente de la profundidad de color de tu sesión de x2go. ¡Esto suele provocar problemas en la reconección y en la mayoría de los casos <b>perderás la sesión</b> y tendrás que iniciar una nueva! Te recomendamos cambiar la profundidad de color de tu pantalla a bits and restart your X.Org Server before you reconnect to this X2Go session.<br />Do you want to resume this session anyway? bits y reiniciar tu servidor X.Org antes de reconectar a esta sesión X2Go.<br />¿Recuperar esta sesión? Your current color depth is different from the session's color depth. This may cause problems reconnecting to this session and in most cases <b>you will lose the session</b> and have to start a new one! La profundidad de color actual es diferente de la que tiene la sesión remota. Esto puede provocar problemas durante la reconexión a esta sesión y en la mayoría de los casos <b>se perderá la sesión remota</b> y ¡tendrás que iniciar una nueva! It's highly recommended to change the color depth of your display to %n bit(s) and restart your X.Org Server before you reconnect to this X2Go session. %n will be replaced with a number Se recomienda cambiar la profundidad de color actual a %n bit y reiniciar el servidor X Org antes de reconectar a esta sesión X2Go. Se recomienda cambiar la profundidad de color actual a %n bits y reiniciar el servidor X Org antes de reconectar a esta sesión X2Go. <br />Do you want to resume this session anyway? <br />¿Aún así quieres recuperar esta sesión? PulseAudio is not running No se está ejecutando PulseAudio Sound output will be disabled for this session. Please enable PulseAudio in the configuration dialog or disable sound in the session settings La salida de sonido se desactivará para esta sesion. Por favor, activa PulseAudio en el diálogo de configuración o desactiva el sonido en los parámetros de sesión Unable to create SSH tunnel for X2Go session (NX) startup: No ha sido posible crear el túnel SSH para iniciar la sesión (NX): Unable to create SSH tunnel for audio data: No fue posible crear el tunel SSL para los datos de sonido: failed to start. falló el inicio. This likely means the binary is not available. The current search path is: Habitualmente esto significa que el ejecutable no está disponible. La ruta actual de búsqueda es: returned a non-zero exit code or crashed otherwise. devuelve un código de salida distinto de cero o de error en otro caso. Execution failed, exit code was: Falló la ejecución, el código de salida fue: didn't start up in time. no pudo empezar a tiempo. This error shouldn't come up. Este error no debería haber pasado. didn't accept a write operation. no se aceptó la operación de escritura. It is probably not running correctly or crashed in-between. Probablemente no se está ejectuando correctamente o hubo un fallo en medio. Unable to read from xmodmap. Imposible leer desde xmodmap. encountered an unknown error during start up or execution. se encontró un error desconocido durante el inicio o la ejecución. experienced an undefined error. se ha producido un error no definido. X2Go Client will now terminate. File a bug report as outlined on the <a href="http://wiki.x2go.org/doku.php/wiki:bugs">bugs wiki page</a>. El cliente X2Go se cerrará ahora. Rellena un informe de error en <a href="http://wiki.x2go.org/doku.php/wiki:bugs">la página de notificación de errores</a>. Failed to start RDP or XDMCP client Fallo al iniciar el cliente RDP o XDMCP Check session settings and ensure that selected client is installed on your system. Comprueba los parámetro de la sesión y asegura que el cliente seleccionado está instalado en tu sistema. Proxy didn't terminate after 3 seconds. Killing the proxy. El proxy no finalizó después de 3 segundos. Finalizando el proxy. Closing X2Go Client because it was started in hidden mode. Finalizando el cliente X2Go porque empezó en modo oculto. Closing X2Go Client because the --close-disconnect parameter was passed. Finalizando el cliente X2Go porque se pasó el parámetro --close-disconnect. Are you sure you want to terminate this session? Unsaved documents will be lost. ¿Seguro que quieres finalizar la sesión? Los documentos no guardados se perderán. <b>Connection failed.</b> : <b>Error en la conexión</b> : (file does not exist) (el archivo no existe) (directory does not exist) (la carpeta no existe) Invalid value for parameter "--link". Valor incorrecto para el argumento "--link". Invalid value for parameter "--clipboard". Valor incorrecto para el argumento "--clipboard". Invalid value for parameter "--sound". Valor incorrecto para el argumento "--sound". Invalid value for parameter "--geometry". Valor incorrecto para el argumento "--geometry". Invalid value for parameter "--set-kbd". Valor incorrecto para el argumento "--set-kdb". Invalid value for parameter "--ldap". Valor incorrecto para el argumento "--ldap". Invalid value for parameter "--ldap1". Valor incorrecto para el argumento "--ldap1". Invalid value for parameter "--ldap2". Valor incorrecto para el argumento "--ldap2". Invalid value for parameter "--pack". Valor incorrecto para el argumento "--pack". Available pack methods: Métodos de empaquetado disponibles: Pack Methods Métodos de empaquetado Option is not available in this build. La opción no está disponible en esta versión. Unable to create directory: No se ha podido crear la carpeta: <br>(C) 2005-2023 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> Translators, feel free to add a localized version of your translation including a copyright notice and your name(s). Remember to keep a <br> at the end, though. English example for a potential translation: <br>(C) 2005-2023 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br>English version: (C) 20AB-20CD Trans Lator <trans@la.tor><br> <br>(C) 2005-2023 de <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> Check whether the package providing "pcsc_scan" is installed. The current search path is: Unable to create or append to file: Fallo al crear o añadir al archivo: Unable to change the permissions of file: Fallo al cambiar los permisos de acceso al archivo: This is an error because sshd would deny such a file. Este es un error porque el sshd impide el acceso al archivo. Unable to change the permissions of directory: Imposible cambiar los permisos del directorio: This is an error because sshd would deny such a directory. Este error se ha producido porque el servicio sshd no permite el acceso al directorio. Can't start X.Org Server. Please check your installation. X.Org Server did not launch correctly after %n tries. %n will be substituted with the current number of tries Unable to find the sftp-server binary. Neither bundled, nor found in $PATH nor additional directories. Imposible encontrar el ejecutable del servidor sftp. No se encuentra el que viene incluído ni en otros directorios $PATH. If you are using a Linux-based operating system, please ask your system administrator to install the package containing the sftp-server binary. Common names are <b>openssh</b>, <b>openssh-server</b> or <b>openssh-sftp-server</b> depending upon distribution. If the sftp-server binary is installed on your system, please report a bug mentioning its path on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Si estás usando Linux pídele al administrador que instale el paquete que contiene el ejecutable del servidor sftp. Los nombres más comunes son <b>openssh</b>, <b>openssh-server</b> or <b>openssh-sftp-server</b> dependiendo de la distribución usada. Si el ejecutable del servidro sftp está instalado en tu sistema, por favor reporta el bug mencionando su ruta en: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> SSH key type selection error Error de tipo de clave SSH Unknown SSH key selected. Clave SSH desconocida. Terminating application. Finalizadon aplicación. SSH key base directory creation error Error al crear la clave SSH en el directorio predeterminado Unable to create SSH key base directory '%1'. Fallo al crear la calve SSH en el directorio: '%1'. ssh-keygen launching error fallo al ejecutar ssh-keygen Unable to start the ssh-keygen binary. Fallo al ejecutar ssh-keygen. ssh-keygen crashed fallo durante la ejecución de ssh-keygen The ssh-keygen binary crashed. fallo durante la ejecución de ssh-keygen. ssh-keygen program error fallo durante la ejecución de ssh-keygen The ssh-keygen binary did not exit cleanly. La ejecución de ssh-keygen finalizó de manera anormal. It was probably called with unknown arguments. probablemente fue llamado sin argumentos. Unable to open newly generated %1 public host key file. Fallo al abrir el nuevo archivo de clave pública %1 generada en el lado del servidor remoto. %1 public host key file empty. archivo de clave pública %1 en el lado del servidor remoto vacío. libssh initialization failure fallo de inicialización en libssh Unable to initialize libssh. Imposible iniciar libssh. Unable to open newly generated %1 public host key file. %1 in this context will be replaced with the SSH key type (e.g., "RSA", "DSA" or the like.) Please make sure that the translation is correct in this regard. Also, please include the "host" part, to make clear that we're not talking about client keys here. Fallo al abrir el nuevo archivo de clave pública %1 generada en el lado del servidor remoto. %1 public host key file empty. %1 in this context will be replaced with the SSH key type (e.g., "RSA", "DSA" or the like.) Please make sure that the translation is correct in this regard. Also, please include the "host" part, to make clear that we're not talking about client keys here. archivo de clave pública %1 en el lado del servidor remoto vacío. Cannot open key: No se puede abrir la clave: You have enabled Remote Printing or File Sharing. These features require a running and functioning SSH server on your computer. <b>Printing and File Sharing will be disabled for this session.</b> Has activado la impresión remota o la compartición de archivos. Estas características requieren la ejecución y el funcionamiento de un servidor SSH en tu equipo. <b>Impresión remota y Compartición de archivos se desactivarán para esta sesión.</b> Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server. If you see this message, please report a bug on: Normalmente esto no debería pasar porque el clilente X2Go para Windows incorpora su propio servidor SSH. Si ves este mensaje, repórtalo como un bug en: The SSH server failed to start. Please report a bug on: El servidor SSH falló en el inicio Por favor, reporta el bug en: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server and automatically generates the required keys. If you see this message, please report a bug on: Normalmente esto no debería pasar porque el cliente X2Go para Windows incluye su propio servidor SSH y automáticamente genera las claves necesarias. Si ves este mensaje, por favor repórtalo en: X2Go Client was unable to create SSH host keys. Please report a bug on: El cliente X2Go falló al crear las claves SSH. Por favor reporta el bug en: <br>(C) 2005-2016 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> <br>(C) 2005-2016 de <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> <br>X2Go Plugin mode was sponsored by <a href="http://www.foss-group.de/">FOSS-Group GmbH (Freiburg)</a><br> <br>El modo X2GoPlugin fue patrocinado por <a href="http://www.foss-group.de/">FOSS-Group GmbH (Freiburg)</a><br> <br>This is a client to access the X2Go network-based computing environment. This client will be able to connect to X2Go Server(s) and start, stop, resume and terminate (running) desktop sessions. X2Go Client stores different server connections and may automatically request authentication data from LDAP directories. Furthermore, it can be used as a fullscreen login screen (replacement for login managers like XDM). Please visit <a href="http://www.x2go.org">the project home page at x2go.org</a> for further information. <br>Cliente para usar con el sistema de acceso remoto X2Go. Este cliente es capaz de conectar con él/los servidor/es X2Go y iniciar, parar, guardar y terminar (si están en ejecucion) sesiones de escritorio. El Cliente X2Go almacena diferentes conexiones a servidores y puede recuperar de manera automática datos de autenticación desde directorios LDAP. Además puede usarse como un sistema de inicio de sesión a pantalla completa (reemplazando a gestores de inicio de sesión como xdm). Visita <a href="http://www.x2go.org">la página del projecto en x2go.org</a> para más información. <b>X2Go Client v. <b>Cliente X2Go v. Please check LDAP Settings. Comprueba los datos de conexión LDAP. Check whether the package providing "scdaemon" is installed. The current search path is: Comprueba si el paquete que provee "scdaemon" está instalado. La carpeta de búsqueda actual es: didn't start yet. no se pudo empezar todavía. Unable to read from scdaemon. Imposible leer desde scdaemon. No valid card found. No se encontró una tarjeta válida. This card is unknown to the X2Go system. El sistema X2Go no reconocoe esta smart card. Can't start X.Org Server. Please check your installation. No se puede iniciar el servidor X.Org. Comprueba la instalación del sistema. Remote server does not support file system exports through SSH tunnels. Please update your x2goserver package. El servidor remoto no soporta exportar el sistema de archivos a través del tunel SSH. Actualiza el paquete x2goserver en el servidor. Unable to create SSH tunnel for Folder Sharing and Printing support: No ha sido posible crear el túnel SSH para las carpetas compartidas y la impresión remota: Unable to read: No ha sido posible leer: Unable to write: No se ha podido guardar el archivo: Error getting window geometry. (Did you close the window?) Fallo al obtener el tamaño de la ventana (¿Has cerrado la ventana?) Invalid value for argument "speed" Valor incorrecto para el argumento "velocidad" Applications ... Aplicaciones... Abort Cancelar Show details Mostrar detalles Resume Desconectar New Nueva Full access Acceso completo View only Sólo ver Status Estado Command Comando Type Tipo Server Servidor Client IP IP del cliente Session ID ID de la Sesión User Usuario Only my desktops Sólo mis escritorios SSH daemon could not be started. No se ha podido iniciar el demonio SSH. SSH daemon is not running. El deomio SSH no está en ejecución. You have enabled Remote Printing or File Sharing. These features require a running and functioning SSH server on your computer. <b>Printing and File Sharing will be disabled for this session.</b> Please also check the <b>Clientside SSH port</b> in the general settings. Has habilitado la impresión remota o la compartición de archivos. Estas características requieren que se ejecute un servidor SSH en tu equipo. <b>La impresión remota y la compartición de archivos estará deshabilitados para esta sesión.</b> Comprueba el <b>Puerto SSH en el lado del cliente</b> en los ajustes generales. Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server. If you see this message, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Normalmente esto no debería suceder ya que el cliente X2Go para Windows tiene su propio servidor SSH interno. Si ves este mensaje, por favor informa del error en: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> The SSH server failed to start. El servidor SSH falló durante el inicio. X2Go Client did not detect a globally running SSH server on your machine and was unable to start its own. Please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> El cliente X2Go no ha detectado en ejecución ningún servidor SSH en tu equipo and no pudo iniciarlo. Por favor, reporta el error en: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> The SSH server is currently not started. El servidor SSH no está activo. On OS X, please follow the following steps to enable SSH service:<ul><li>Open <b>System Preferences</b> (Applications -> System Preferences)</li><li>Go to <b>Sharing</b></li><li>Tick the checkbox besides <b>Remote Login</b></li><li>Check that <b>Allow access for:</b> is set to either:<ul><li>All users: <b>no further steps necessary</b></li><li>Only these users <b>and your user name is included in the list</b></li></ul><li>Optionally, add your user name to the allowed list via the <b>Plus Button</b></li></ul><b>Warning: enabling SSH access will allow any user on the network to connect to your machine. It is your responsibility to set a strong password for every user that is allowed to log in via SSH.</b> En OS X sigue los siguientes pasos para activar el servicio SSH:<ul><li>Abrir <b>Preferencia del sistema</b> (Aplicaciones -> Preferencias del Sistema)</li><li>Ir a <b>Compartir</b></li><li>Activa los siguientes checks <b>Acceso remoto</b></li><li>Verficiar acceso <b>Permitir acceso para:</b> está seleccionado para:<ul><li>Todos los usuarios: <b>no se necesitan más acciones</b></li><li>Sólo estos usuarios <b>y tu nombre de usuario incluido en la lista</b></li></ul><li>Opcionalmente añade tu usuario usando el <b>Botón más</b></li></ul><b>Atención: activando el acceso SSH se permite el acceso desde la red a tu equipo. Es de tu responsabilidad usar una contraseña segura para cada uno de los usuarios habilitados para acceder por SSH.</b> Please ask your system administrator to provide the SSH service on your computer. Por favor, pregunta a tu administrador para activar el servicio SSH en tu equipo. Disabling Remote Printing or File Sharing support in the session settings will get rid of this message. Desactivando la impresión remota o la compartición de archivos en los ajustes de la sesión eliminará este mensaje. SSH daemon failed to open its public host key. El demonio SSH falló al abrir su clave pública del equipo. You have enabled Remote Printing or File Sharing. These features require a running and functioning SSH server on your computer. <b>Printing and File Sharing will be disabled for this session.</b> The SSH server is currently not configured correctly. Please ensure that the server's public exists. Has activado la Impresión Remota o la Compartición de Archivos. Estas características necesitan un servidor SSH en tu equipo instalado y funcionando. <b>La Impresión Remota y la Compartición de Archivos se ha desactivado para esta sesión</b> El servidor SSH no está configurado correctamente. Asegúrate de que el servidor existe. Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server and automatically generates the required keys. If you see this message, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Normalmente esto no debería suceder ya que el cliente X2Go para Windows tiene su propio servidor SSH interno. Si ves este mensaje, por favor informa del error en: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> X2Go Client was unable to create SSH host keys. Please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> El cliente X2Go no ha detectado en ejecución ningún servidor SSH en tu equipo and no pudo iniciarlo. Por favor, reporta el error en: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> On OS X, please follow these steps to generate the required keys:<ul><li>Open a <b>Terminal Window</b> (Applications -> Utilities -> Terminal)</li><li>Run this command: <b>ssh -p En OS X sigue los siguientes pasos para generar las claves necesarias:<ul><li>Abre una <b>Ventana del Terminal</b> (Aplicaciones -> Utilidades -> Terminal)</li><li>Ejecuta el siguiente comando: <b>ssh -p Please ask your system administrator to generate the required host keys. If you are administrating this system yourself, please run: <center><b>sudo ssh-keygen -A</b></center> Pide a tu administrador que genere las claves de equipo necesarias. Si tu eres el administrador del equipo ejecuta: <center><b>sudo ssh-keygen -A</b></center> SSH daemon failed to open the application's authorized_keys file. El demonio SSH falló al abrir el archivo authoized_keys de la aplicación. sshd not started, you'll need sshd for printing and file sharing you can install sshd with <b>sudo apt-get install openssh-server</b> no se ha iniciado sshd. Necesitas iniciar sshd para imprimir y para compartir carpetas puedes instalar sshd con <b>sudo apt-get install openssh-server</b> Restore toolbar Restaurar barra de herramientas <br><b>&nbsp;&nbsp;&nbsp;Click this button&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;to restore toolbar&nbsp;&nbsp;&nbsp;</b><br> <br><b>&nbsp;&nbsp;&nbsp;Haz clic en este botón&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;para restaurar la barra de herramientas&nbsp;&nbsp;&nbsp;</b><br> PrintDialog Print - X2Go Client Imprimir - Cliente X2Go Print Imprimir You've deactivated the X2Go Client printing dialog. Has desactivado el diálogo de impresión del cliente X2Go. You may reactivate this dialog using the X2Go Client settings dialog. To do so, follow this path in the menu bar: Options -> Settings Puedes reactivar este diálogo dentro de las preferencia del cliente X2Go (Menú -> Opciones -> Preferencias) You've deactivated the x2go client printing dialog. Has desactiva el diálogo de impresión del cliente x2go. You may reactivate this dialog using the x2goclient settings dialog (Menu -> Options -> Settings) Puedes reactivar este diálogo dentro de las preferencia del cliente x2go (Menú -> Opciones - > Preferencias) PrintProcess Save File Guardar Archivo PDF Document (*.pdf) Documento PDF (*.pdf) Failed to execute command: Fallo al ejecutar el comando: Printing error. Error de impresión. Printing error Error de impresión PrintWidget Form Formulario Print Imprimir View as PDF Mostrar como PDF Print settings Opciones de impresión Printer: Impresora: Print using default Windows PDF Viewer (Viewer application needs to be installed) Imprimir usando el Visor PDF por defecto (se necesita instalar un visor de PDF) Printer command: Comando de impresión: ... ... Viewer settings Parámetros del visor Open in viewer application Abrir con el programa Command: Comando: Save to disk Guardar como archivo Show this dialog before start printing Mostrar este diálogo antes de imprimir Please configure your client side printing settings.<br><br>If you want to print the created file, you'll need an external application. Typically you can use <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> and <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>You can find further information <a href="http://www.x2go.org/index.php?id=49">here</a>. Configura los parámetros de impresión en el lado del cliente.<br><br>Si quieres imprimir el archivo creado necesitas un programa externo. Normalmente puedes usar <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> y <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>Puedes encontrar más información<a href="http://www.x2go.org/index.php?id=49">aquí</a>. Please configure your client side printing settings.<br><br>If you want to print the created file, you'll need an external application. Typically you can use <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> and <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>You can find further information <a href="http://www.x2go.org/index.php?id=49">here</a>. Configura los parámetros de impresión en el lado del cliente.<br><br>Si quieres imprimir el archivo creado necesitas un programa externo. Normalmente puedes usar <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> y <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>Puedes encontrar más información <a href="http://www.x2go.org/index.php?id=49">aquí</a>. PrinterCmdDialog Printer command Comando para imprimir Command Comando Please enter your customized or individual printing command. Examples: kprinter lpr -P hp_laserjet Introduce tu comando personalizado para imprimir. Ejemplos: kprinter lpr -P hp_larserjet Output format Formato de salida Please choose the printing file format (regarding to your printing environment - if you use CUPS you may use PDF) Selecciona el formato de impresión (de acuerdo a tu entorno de impresión - si usas CUPS puedes usar PDF) PDF PDF PS PS Data structure Estructura de datos Please choose the method of printing file input (some commands accepting printing files as program options, some are awaiting data on standard input): Selecciona el método de entrada para el archivo de impresión (algunos comando aceptan archivos de impresión como opciones; otros reciben datos de la entrada estándar): standard input (STDIN) entrada estándar (STDIN) Specify path as program parameter especificar ruta como parámetro del programa Please enter your customized or individual printing command. Example: Introduce el comando personalizado de impresión. Ejemplo: <Path to gsprint.exe> -query -color <Ruta a gsprint.exe> -query -color PulseManager Unable to find the PulseAudio binary. Neither bundled, nor found in $PATH nor additional directories. No se ha encontrado el ejecutable de PulseAudio. Ni el incorpodado ni en el $PATH local. If you downloaded the bundled, pre-compiled version from the official home page, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Si has descargado el paquete pre compilado desde la web oficial, por favor reporta el bug en: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Could not allocate buffer for getting current working directory! ¡Fallo al obtener el directorio actual! getcwd() failed! ¡falló getcwd()! PulseAudio failed to start! ¡No se pudo iniciar PulseAudio! Sound support will not be available. If you downloaded the bundled, pre-compiled version from the official home page, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> El soporte de sonido no está disponible Si has descargado el paquete pre compilado desde la web oficial, por favor reporta el bug en: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Error fetching PulseAudio version number! ¡Error obteniendo la versión de PulseAudio! Unexpected character found when parsing version string for major version number Se encontró un carácter inexperado al analizar el número de versión mayor Unexpected character found when parsing version string for minor version number Se encontró un carácter inexperado al analizar el número de versión menor Unexpected character found when parsing version string for micro version number Se encontró un carácter inexperado al analizar el número de versión micro Supposed to skip major version number. Something is wrong. Se intentó saltar el número de versión. Algo está mal. Unable to convert major version number string to integer. Fallo al convertir la versión mayor de texto a entero. Unable to convert minor version number string to integer. Fallo al convertir la versión menor de texto a entero. Unable to convert micro version number string to integer. Fallo al convertir la versión micro de texto a entero. Unexpected format encountered. Formato inexperado. Unable to start PulseAudio binary. Fallo al iniciar PulseAudio. Unable to play startup sound. Fallo al lanzar el sonido de inicio. Sound support will not be available. El soporte de sonido no está disponible. If you downloaded the bundled, pre-compiled version from the official home page or the upstream Linux packages, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Si has descargado el paquete pre compilado desde la web oficial o extraído de los paquetes Linux por favor reporta el bug en: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> If you downloaded the bundled, pre-compiled version from the official home page or the upstream Linux packages, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Make sure to include the "Linux packages" part. Si has descargado el paquete pre compilado desde la web oficial, por favor reporta el bug en: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> QObject No response received from the remote server. Do you want to terminate the current session? No se ha recibido respuesta del servidor remoto. ¿Finalizar la sesión actual? X2Go Client could not find any suitable X11 server. No se encontró ningún servidor X11 disponible. X2Go Client could not start X11 server. El cliente X2Go no pudo iniciar el servidor X11. X2Go Client requires XQuartz to be installed. If XQuartz is already installed on your system, please select the correct path in the now upcoming dialog. Refer to the end of this message for path examples, in case you do not know the exact location yourself. Should you have <b>not</b> installed XQuartz yet, please follow the outlined steps: El cliente X2Go necesita que XQuartz esté instalado en tu equipo. Is ya está instalado XQuartz en tu equipo, elige la ruta correcta en la siguiente pantalla. En el final de este mensaje hay ejemplos de las rutas habituales donde está XQuartz en el caso de que no sepas la localización exacta. Si <b>no</b> has instalado XQuartz todavía, sigue los s iguientes pasos: MacPorts users, please install either the port <b>xorg-server</b> or the port <b>xorg-server-devel</b>. Upon successful installation, please follow the instructions printed by the port utility to autostart/load the server. All other users, please obtain and install XQuartz from: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> Afterwards, restart X2Go Client and select the correct path to the X11 application in the general X2Go Client settings. This will most likely be <center><b>/Applications/MacPorts/X11.app</b></center> or <center><b>/Applications/Utilities/XQuartz.app</b></center> Los usuarios de MacPorts debe instalar el port <b>xorg-server</b> o el port <b>xorg-server-devel</b>. Cuando se haya realizado la instalación con éxito debes seguir las instrucciones mostradas por la utilidad del port para auto iniciar/cargar el servidor. Para el resto de usuarios, hay que descargar e instalar XQuartz desde: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> Una vez hecho esto se debe reiniciar el cliente X2Go y elegir la ruta correcta hacia la aplicación X11 in los ajustes generales del cliente X2Go. En la mayoría de los casos la ruta debería ser <center><b>/Applications/MacPorts/X11.app</b></center> o <center><b>/Applications/Utilities/XQuartz.app</b></center> SessionButton Session preferences... Preferencias de la sesión... Create session icon on desktop... Crear icono de sesión en el escritorio... Session preferences ... Preferencias de la sesión ... Create session icon on desktop ... Crear icono de sesión en el escritorio ... Delete session Borrar sesión Session actions Acciones sobre la sesión Select type Elegir tipo Select resolution Elegir resolución Toggle sound support Alternar entre soporte para sonido activo sí o no New Session Nueva sesión running activa suspended suspendida KDE KDE RDP connection Conexión RDP XDMCP XDMCP Connection to local desktop Conexión al escritorio local Published applications Aplicaciones publicadas fullscreen pantalla completa Display Monitor window ventana Maximum Máximo Enabled Activo Disabled Desactivado SessionExplorer Back Atrás Create session icon on desktop Crear icono de sesión en el escritorio Desktop icons can be configured not to show x2goclient (hidden mode). If you like to use this feature you'll need to configure login by a gpg key or gpg smart card. Use x2goclient hidden mode? Los iconoes del escritorio pueden configurarse para no mostrar la ventana del cliente x2go (modo oculto). Si quieres usar esta característica tienes que configurar el inicio de sesión usando una clave gpg o una smart card. ¿Usar el cliente x2go en modo oculto? Create session icon on desktop. Crear icono de sesión en el escritorio. Desktop icons can be configured not to show X2Go Client (hidden mode.) If you like to use this feature you'll need to configure login via a GPG key or GPG Smart Card. Use X2Go Client's hidden mode? Los iconoes del escritorio pueden configurarse para no mostrar la ventana del cliente X2Go (modo oculto). Si quieres usar esta característica tienes que configurar el inicio de sesión usando una clave GPG o una GPG Smart Card. ¿Usar el cliente X2Go en modo oculto? Show session tray icon when running Mostrar icono de sesión en la bandeja del sistema durante la ejecución New Session Nueva sesión X2Go Link to session Enlace a la sesión X2Go Are you sure you want to delete this session? ¿Eliminar esta sesión? SessionManageDialog E&xit &Salir &New session &Nueva sesión &Session preferences &Preferencias de la sesión &Delete session &Eliminar sesión &Create session icon on desktop ... &Crear icono de sesión en el escritorio ... &Create session icon on desktop... &Crear icono de sesion en el escritorio... Delete Delete Eliminar Session management Manejo de sesiones SessionWidget Session name: Nombre de la sesión: << change icon << cambiar icono Path: Ruta: &Server &Servidor Values ranging from <b>0</b> to <b>65535</b> are allowed.<br />A value of <b>0</b> will either use the port specified in the SSH configuration file belonging to a host or shortname, or use the default of <b>22</b>. Se permiten valores del rango <b>0</b> a <b>65535</b>.<br />Un valor de <b>0</b> usará siempre el puerto especificado en el archivo de configuración del servidor o de su nombre corto, o puede usar el valor por defecto de <b>22</b>. Host: Host: Login: Usuario: SSH port: Puerto SSH: Use RSA/DSA key for ssh connection: Usar claves RSA/DSA para la conexión ssh: Try auto login (ssh-agent or default ssh key) Intentar auto inicio de sesión (a través del agente ssh o de la clave ssh por defecto) Kerberos 5 (GSSAPI) authentication Autenticación Kerberos 5 (GSSAPI) Delegation of GSSAPI credentials to the server Delegación de credenciales GSSAPI al servidor Use Proxy server for SSH connection Usar servidor Proxy para la conexión SSH Proxy server Servidor Proxy SSH SSH HTTP HTTP Same login as on X2Go Server Mismos datos de inicio de sesión que en el servidor X2Go Same password as on X2Go Server Misma contraseña que el servidor X2Go RSA/DSA key: Clave RSA/DSA: Run in X2GoKDrive (experimental) X2Go/X11 Desktop Sharing X2Go Client is running in portable mode. You should use a path on your USB device to be able to access your data wherever you are. El cliente X2Go está ejecutándose en modo portable. Deberías usar una ruta hacia tu dispositivo USB donde poder usar tus datos en cualquier lugari. Direct XDMCP connection Conenxión directa XDMCP ssh-agent or default ssh key agente ssh o clave ssh por defecto Type: Tipo: Port: Puerto: &Session type Tipo de &sesión Session type: Tipo de sesión: Connect to Windows terminal server Conectar a Windows Terminal Server XDMCP XDMCP Connect to local desktop Conectar al escritorio local Custom desktop Escritorio personalizado Single application Aplicación Published applications Aplicaciones publicadas Command: Comando: Advanced options... Opciones avanzadas... Path to executable Ruta al ejecutable Direct RDP Connection Conexión RDP directa RDP port: Puerto RDP: Open picture Abrir imagen Pictures Imágenes Open key file Archivo con la clave open Try auto login (via SSH Agent or default SSH key) Intentar auto inicio de sesión (a través del agente SSH o de la clave SSH por defecto) SSH Agent or default SSH key Agente SSH o clave SSH por defecto Connect to Windows Terminal Server Conectar a Windows Terminal Server Direct RDP connection Conexión RDP directa All files Todos los archivos Error Error x2goclient is running in portable mode. You should use a path on your usb device to be able to access your data whereever you are el cliente x2go está ejecutándose en modo portable. Debería usar una ruta hacia tu dispositivo usb donde poder usar tus datos dondequiera estés Server: Servidor: XDMCP server: Servidor XDMCP: direct XDMCP connection conección directa XDMCP rdesktop command line options: opciones de línea de comando para rdesktop: New session Nueva sesión SettingsWidget &Display &Monitor &Keyboard &Teclado Sound Sonido &Clipboard Mode Modo de &Portapapeles Bidirectional copy and paste Copiar y Pegar en ambas direcciones Copy and paste from client to server Copiar y pegar desde el cliente al servidor Copy and paste from server to client Copiar y pegar desde el servidor al cliente Disable clipboard completely Desactivar portapapeles por completo Auto detect keyboard settings Auto detectar preferencias del teclado Do not configure keyboard No configurar el teclado Configure keyboard Configurar el teclado Model: Modelo: Layout: Capa: Variant: Variante: RDP Client Cliente RDP &Clipboard mode Modo de &Portapapeles Fullscreen Pantalla completa Custom Personalizado Window Ventana Use whole display Usar toda la pantalla Maximum available Máxima disponible Set display DPI Especificar DPI Xinerama extension (support for two or more physical displays) Extensión Xinerama (soporta dos o más monitores físicos) Width: Ancho: Height: Alto: &Display: &Monitor: &Identify all displays &Identificar monitores Auto-detect keyboard settings Auto detectar preferencias del teclado RDP client Cliente RDP FreeRDP/X11 (pre-2.x style options) FreeRDP/X11 (2.x style options) Keep current keyboard Settings Mantener las preferencias actuales para el teclado Keyboard layout: Mapa del teclado: Keyboard model: Modelo de teclado: Enable sound support Activar soporte de sonido Start sound daemon Iniciar demonio de sonido Use running sound daemon Usar el demonio de sonido actual Use SSH port forwarding to tunnel sound system connections through firewalls Usar el tunel de puertos SSH para el sonido en conexiones a través de firewalls Use default sound port Usar el puerto para el sonido por defecto Sound port: Puerto de sonido: Client side printing support Soporte para imprimir en el cliente Additional parameters: Parámetros adicionales: Command line: Línea de comando: XDMCP client cliente XDMCP us es pc105/us pc105/es password contraseña ShareWidget &Folders Car&petas Path Ruta Automount Automontar Add Añadir Delete Eliminar Path: Ruta: Filename encoding Codificación para los nombres de archivo local: local: remote: remoto: Use SSH port forwarding to tunnel file system connections through firewalls Usar tunel de puertos SSH para el sistema de archivos a través de firewalls X2Go Client is running in portable mode. You should use a path on your USB device to be able to access your data wherever you are. El cliente X2Go está ejecutándose en modo portable. Deberías usar una ruta hacia tu dispositivo USB donde poder usar tus datos en cualquier lugar. Use ssh port forwarding to tunnel file system connections through firewalls Usar tunel de puertos SSH para el sistema de archivos a través de firewalls Select folder Elegir carpeta Error Error x2goclient is running in portable mode. You should use a path on your usb device to be able to access your data whereever you are el cliente x2go está ejecutándose en modo portable. Debería usar una ruta hacia tu dispositivo usb donde poder usar tus datos dondequiera estés WINDOWS-1252 WINDOWS-1252 ISO8859-1 ISO8859-1 SshMasterConnection SSH proxy connection error Error en la conexión con el proxy SSH SSH proxy connection error. Error en la conexión con el proxy SSH. SSH proxy connection error: Error en la conexión con el proxy SSH: Failed to create SSH proxy tunnel. Fallo al crear el tunel SSH. Cannot initialize libssh. No se puede inicializar libssh. Cannot create SSH session. No se puede crear la sesión SSH. Using environment-provided username. Usando el nombre de usuario del sistema. Cannot connect to proxy server. No hay conexión con el servidor proxy. Authentication failed. Falló la autenticación. Failed to start SSH client. Please check your installation and GSSApi configuration. Fallo al iniciar el cliente SSH. Por favor comprueba tu instalación y la configuración GSSApi. Check your GSSApi configuration or choose another authentication method. Comprueba tu configuración GSSApi o elije otro método de autenticación. Reconnect session Reconectar a la sesión Cannot open file No se puede abrir el archivo Cannot create remote file No se puede crear el archivo remoto Cannot write to remote file No se puede escribir en el archivo remoto %1 failed. Argument in this context will be a function name. error en %1. channel_open_forward failed. error en channel_open_forward. channel_open_session failed. error en channel_open_session. Error writing to socket. Error escribiendo en el socket. Error reading channel. Error leyendo el canal. channel_write failed. error en channel_write. Error reading from TCP socket. Error leyendo el socket TCP. Failed to create SSH proxy tunnel Fallo al crear el tunel SSH a través del proxy Can not initialize libssh No se puede inicializar libssh Can not create ssh session No se puede crear la sesión ssh Can not connect to proxy server No hay conexión con el servidor proxy Can not connect to No se puede conectar a Authentication failed Fallo de autenticación channel_forward_listen failed error en channel_forward_listen Failed to start SSH Client. Please check your installation and GSSApi configuration Fallo al iniciar el cliente SSH: Por favor comprueba tu instalación y la configuración GSSAPI Check your GSSApi configuration or choose another authentication method Comprueba tu configuración GSSAPI o elije otro método de autenticación Can not open file No se puede abrir el archivo Can not create remote file No se puede crear el archivo remoto Can not write to remote file No se puede escribir en el archivo remoto Cannot connect to no se puede conectar a channel_open_forward failed error en channel_open_forward channel_open_session failed error en channel_open_session channel_request_exec failed error en channel_request_exec error writing to socket error escribiendo en el socket error reading channel error leyendo el canal channel_write failed error en channel_write error reading tcp socket error leyendo el socket tcp SshProcess Error creating socket Error creando el socket Error creating socket. Error creando el socket. Error binding Error rellenando XSettingsWidget Open File Abrir Archivo Executable (*.exe) Ejecutable (*.exe) XSettingsWidgetUI Form Formulario You must restart the X2Go Client for the changes to take effect Debes reiniciar el Cliente X2Go para que los cambios se apliquen correctamente use integrated X-Server usar el Servidor X integrado do not use primary clipboard no usar el portapapeles principal use custom X-Server usar Servidor X personalizado custom X-Server Servidor X personalizado executable: ejecutable: start X-Server on X2Go Client start iniciar ServidorX en el inicio del cliente X2Go command line options: opciones de la línea de comando: X-Server command line options Opciones para la línea de comandos del Servidor X window mode: modo ventana: fullscreen mode: modo pantalla completa: single application: modo aplicación: whole display: toda la pantalla: x2goclient-4.1.2.3/res/i18n/x2goclient_et.ts0000644000000000000000000067514014447111613015330 0ustar AppDialog Published Applications Kasutatavad programmid Search: Otsi: &Start &Käivita &Close &Sule Multimedia Multimeedia Development Arendus Education Õppeotstarbelised Game Mäng Graphics Graafika Network Võrk Office Kontoritarkvara Settings Seaded System Süsteem Utility Abiprogramm Other Muu BrokerPassDialogUi Dialog Dialoog Old password: Vana salasõna: New password: Uus salasõna: Confirm password: Kinnita salasõna: TextLabel Seletus BrokerPassDlg Passwords do not match Salasõnad ei ole samad CUPSPrintWidget Form Vorm Name: Nimi: Properties Omadused State: Olek: Accepting jobs: Lubatud toimingud: Type: Tüüp: Location: Asukoht: Comment: Kommentaar: Idle Ootel Printing Prindib Stopped Peatatud Yes Jah No Ei CUPSPrinterSettingsDialog No option selected Midagi ei ole valitud This value is in conflict with another option. See väärtus on konfliktis teiste väärtustega. Options conflict. Seadete konflikt. This value is in conflict with other option Valik on vastuoleus eelmise valikuga Options conflict Valikud ei ole omavahel kooskõlas ConTest Connectivity test Ühenduse testimine HTTPS connection: HTTPS - ühendus: SSH connection: SSH - ühendus: Connection speed: Ühenduse kiirus: Failed Ebaõnnestus 0 Kb/s 0 Kb/s OK OK Socket operation timed out. Socket operatsioon "Time Out". Socket operation timed out Soketi toiming vananes Failed: Ebaõnnestus: ConfigDialog General Üldine Display icon in system tray Näita ikooni tegumiribal Hide to system tray when minimized Peida tegumiribale kui minimeeritakse Hide to system tray when closed Peida tegumiribale kui suletakse Hide to system tray after connection is established Peida tegumiribale kui ühendus on loodud Restore from system tray after session is disconnected Too uuesti esile kui ühendus katkeb Use LDAP Kasuta LDAP-d Server URL: Serveri URL-aadress: BaseDN: BaseDN: Failover server 1 URL: Esimese varuserveri URL: Failover server 2 URL: Teise varuserveri URL: X.Org Server settings X.Org Serveri seaded PulseAudio settings PulseAudio seaded Disable PulseAudio Keela PulseAudio Disable sound input Keela heli sisend Your XQuartz version is too old. Sinu XQuartz versioon on liiga vana. Your are using XQuartz (X Window System Server for OS X) version %1. Sa kasutad XQuartz (X Window System Server for OS X) versiooni %1. This version causes problems with X applications in 24bit color mode. You should update your X11 environment. MacPorts users please follow the steps outlined on: <center><a href="https://guide.macports.org/chunked/using.common-tasks.html">https://guide.macports.org/chunked/using.common-tasks.html</a></center> Users who have installed XQuartz via the installer package can find updated versions on: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> See versioon põhjustab probleeme X aplikatsioonides 24 biti värviesitus reziimis. Sa peaksid värskendama oma X11 taristut. MacPorts kasutajad palun järgige alljärgnevaid juhiseid: <center><a href="https://guide.macports.org/chunked/using.common-tasks.html">https://guide.macports.org/chunked/using.common-tasks.html</a></center> Kasutajad kes installeerisid XQuartz'i kasutades 'installer package' leiavad uuendatud versiooni: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> No valid XQuartz application selected. Ühtegi lubatud XQuartz programmi ei ole valitud. You did not select a valid XQuartz application. Please try again. Some standard installation locations may be: <center><b>/Applications/Utilities/X11.app</b></center> <center><b>/Applications/Utilities/XQuartz.app</b></center> <center><b>/Applications/MacPorts/X11.app</b></center> Sa ei valinud korrektset XQuartz programmi. Palun proovi uuesti. Mõned standardsed asukohad oleks: <center><b>/Applications/Utilities/X11.app</b></center> <center><b>/Applications/Utilities/XQuartz.app</b></center> <center><b>/Applications/MacPorts/X11.app</b></center> X-Server settings X-serveri seaded X11 application: X11-programm: X11 version: X11-versioon: Find X11 application Otsi X11-rakendus Clientside SSH port for file system export usage: Kliendi SSH-port mida kasutatakse failide ekspordil: Start session embedded inside website Käivita ühendus veebilehe sees Advanced options Täpsemad valikud Defaults Vaikimisi omadused &OK &OK &Cancel &Loobu Settings Seaded Printing Printimine Warning Hoiatus x2goclient could not find any suitable X11 Application. Please install Apple X11 or select the path to the application x2go-ei leida sobivat X11-rakendust. Installeeri Apple X11 või määa rakenduse asukoht Your are using X11 (Apple X-Window Server) version Sa kasutad X11 (Apple X-Window Server) versiooni . This version causes problems with X-application in 24bit color mode. You should update your X11 environment (http://trac.macosforge.org/projects/xquartz). . See versioon tekitab probleeme 24 bitise värviedastusega. Uuenda oma X11-rakendus (http://trac.macosforge.org/projects/xquarts). No suitable X11 application found in selected path Valitud asukohast ei leita toimivat X11-rakendust &Connection &Ühendus &Input/Output &Sisend/Väljund &Media &Meedia &Settings &Seaded ConnectionWidget &Connection speed &Ühenduse kiirus Connection speed: Ühenduse kiirus: C&ompression &Pakkimine Method: Meetod: Compression method: Pakkimismeetod: Image quality: Pildi kvaliteet: CupsPrinterSettingsDialog Dialog Valikud General Üldine Page size: Lehe suurus: Paper type: Paberi tüüp: Paper source: Paberi sisestusseade: Duplex Printing Kahepoolne-printimine None Ära kasuta Long side Pikk leht Short side Lühike leht Driver settings Ajuri seaded Option Valikud Value Väärtus No option selected Midagi ei ole valitud text tekst EditConnectionDialog &Session &Sessioon &Connection &Ühendus &Input/Output &Sisend/Väljund &Media &Meedia &Shared folders &Jagatud kataloogid &OK &OK &Cancel &Loobu Defaults Vaikimisi väärtused Session preferences - Sessiooni parameetrid - ExportDialog &Cancel &Loobu &share &jaga &Preferences ... &Parameetrid ... &Custom folder ... &Vali kataloog ... Delete Delete Kustuta Share Folders Jaga katalooge share folders jaga katalooge Select folder Vali kataloog FolderButton Sessions folder Sessioonide kaust FolderExplorer Folders Kataloogid Create New Folder Loo uus kataloog Rename Folder... Nimeta kataloog ümber ... Change Icon... Vaheta ikoon ... Delete Folder... Kustuta kataloog... Rename Folder ... Nimerta kataloog ringi ... Change Icon ... Vaheta ikooni ... Delete Folder ... Kustuta kataloog ... Open picture Ava pilt Pictures Pildid X2Go Client X2Go Client Folder Name: Kataloogi nimi: Error Viga Unable to remove " Ei suuda eemaldada " ". Folder is not empty. Please remove the contents of this directory and try again. ". Kataloog ei ole tühi. Palun eemalda kataloogi sisu ja proovi uuesti. ". Folder is not empty. Please remove content of folder and try again. ". Kataloog ei ole tühi. Palun eemalda esmalt kataloogi susu ja proovi siis uuesti. Delete folder " Kustuta kataloog " New Folder Uus Kataloog Help Shows this message. Näitab sedasama teadet. Prints version information. Näitab versiooni infot. Shows the changelog. Näitab muudatusi. Shows git information as used at compile time. [Deprecated: please use --version.] Näitab kompileerimisaegset 'git' infot. [Iganenud: palun kasuta --version.] Shows available pack methods. Näitab võimalikke pakkimismeetodeid. Do not resume sessions automatically. Ära jätka sessioone automaatselt. Hides menu bar. Peidab menüüriba. Disables session editing. Keelab sessiooni editeerimise. Starts maximized. Käivitub minimiseeritult. Starts hidden (minimized to system tray where available.) Käivitub peidetult (minimiseeritult tegumiribale kus võimalik.) Starts in "portable" mode. Käivitub "portable" reziimis. Forces OpenPGP smart card authentication. Nõuab OpenPGP kaardiga autentimist. Disable PulseAudio. Keela PulseAudio. Disable sound input. Keela heli sisend. Enables Xinerama by default. Lubab vaikimisi Xinerama. Allows client side printing in LDAP mode. Lubab kliendipoolse printimise LDAP reziimis. Enables thinclient mode. Starts without a window manager. Lubab 'õhukese' kliendi reziimi (thinclient mode). Alustab ilma window manager'ita. Enables shutdown button. Lubab 'Shut Down' nupu. Adds RSA key fingerprint to ".ssh/known_hosts" if authenticity of the server can't be determined. Lisab RSA võtme sõrmejälje (fingerprint) ".ssh/known_hosts" kui serveri autentsust ei ole võimalik määratleda. Starts with LDAP support. Example: --ldap=ldapserver:389:o=organization,c=de Alustab LDAP toega. Näiteks: --ldap=ldapserver:389:o=organization,c=ee Defines the first LDAP failover server. Defineerib esimese LDAP tõrke serveri (failover server). Defines the second LDAP failover server. Defineerib teise LDAP tõrke serveri (failover server). Defines the remote SSH server port. Default: 22. Defineerib kaugarvuti SSH serveri pordi. Vaikimisi: 22. Defines the local machine's SSH server port. Needed for Client-Side Printing and File Sharing support. Default: 22. Defineerib lokaalse seadme SSH serveri pordi. Vajalik kliendipoolseks printimiseks ja failijagamisteenuse toetamiseks. Vaikimisi: 22. Sets the default command. Default: 'KDE' (Desktop Session) Asetab vaikimisi käsu. Vaikimisi: 'KDE' (Desktop Session) Starts the session named "session". Alustab sessiooni nimega "session". Sets the user name for connecting to the remote SSH server to "username". Määrab kasutajatunnuse ühendumiseks SSH serveriga. Sets the default window geometry. Default: 800x600. Määrab ekraani mõõtmed. Vaikimisi: 800x600. Sets the remote X2Go Agent's DPI value to "dpi". Default: same as local display. Määrab kaug X2Go Agendi DPI väärtuse. Vaikimisi: sama mis lokaalsel dispeil. Sets the default link type. Default: "adsl". Määrab ühenduse tüübi. Vaikimisi: "adsl". Sets default pack method. Default: "16m-jpeg-9". Sätestab vaikimisi pakkimismeetodi. Vaikimisi: "16m-jpeg-9". Sets the default clipboard mode. Default: "both". Vaikimisi clipboard'i reziim. Vaikimisi: 'mõlemad'. Sets the default keyboard layout to "layout". "layout" may be a comma-separated list. Asetab klaviatuuri asetuse. Võib olla komadega eraldatud loetelu. Sets the default keyboard type. Määrab klaviatuuri tüübi. Sets the user's home directory. Määrab kasutaja kodukataloogi. Enables or disables overwriting the current keyboard settings. Lubab või keelab klaviatuuri jooksvate seadete ülekirjutamise. Automatically launches the application(s) "app", "app2", ... on session start in Published Applications mode. Käivitab automaatselt aplikatsioonid "app", "app2", ... sessiooni käivitumisel Aplikatsioonide reziimis. Defines an alternative session config file path. Defineerib alternatiivse konfiguratsioonifaili. Force-enables session system tray icon. Tekitab ikooni süsteemiribale. Automatically closes X2Go Client after a disconnect. Suleb automaatselt X2Go Client'i pärast lahtiühendamist. Hides all Folder-Sharing-related options. Peidab kõik failijagamisega seotud seaded. Sets the broker name to display in X2Go Client. This parameter is optional. Sätestab brokeri väljanäidatava nime X2Go Cliendil. See parameeter ei ole kohustuslik. Sets the path to an SSH key to use for authentication against an SSH session broker. The client's behavior is undefined if this flag is used for non-SSH session brokers. Määrb SSH võtme asukoha mida kasutada SSH sessiooni autentimisel SSH sessiooni brokeris. Kliendi käitumine ei ole määratud kui kasutatakse mitte SSH sessiooni brokeriga. Enables the use of the default SSH key or SSH agent for authentication against an SSH session broker. The client's behavior is undefined if this flag is used for non-SSH session brokers. Lubab vaikimisi SSH võtme või SSH agendi kasutamist autentimisel SSH sessiooni brokeriga. Kliendi käitumine on ettearvamatu kui seda kasutatakse koos mitte SSH sessiooni brokeriga. Does not ask for user credentials during session broker authentication. This can be useful if you are using an HTTP(S) session broker without authentication. If you run an HTTP(S) server without authentication, but with user-specific profiles, then put the user name into the broker URL (refer to --broker-url.) The user name then will be extracted from the broker URL and be sent to the session broker. The client's behavior is undefined if this flag is used for non-HTTP(S) session brokers. Ei küsi kasutaja sisselogimist sessiooni broker autentimisel. See või olla kasulik kasutades mõnd HTTP(S) sessiooni brokerit ilma autentimiseta. Kui sa kasutad HTTP(S) setverit autentimiseta, kuid kasutajakohtse profiiliga, siis pane kasutaja nimi brokeri URL-i (viidates --broker-url.) Kasutaja nimi võetakse sel juhul brokeri URL-ist ja saadetakse sealt sessiooni brokerisse. Kliendisüsteemi käitumine on määramata kui seda parameetrit kasutatakse mitte HTTP(S) sessiooni brokerites. Use broker credentials as session user/password credentials when using broker mode with broker authentication. Currently only affects direct RDP sessions. Kasuta brokeri andmeid sessiooni kasutaja/salasõna anndmetena kui kasutate broker autentimist. Praegu toimib vaid RDP sessioonises. Enables broker logout button. Lubab brokeri väljalogimise nupu. Use a custom/branded background image (SVG format) for X2Go Client's main window. If a directory is given, will randomly pick an SVG file inside of it. Kasuta omaloodud taustapilti (SVG formaadis) X2Go Client'i peaaknas. Kui on antud kataloog siis valitakse sealt juhuslik SVG fail. Use a custom icon (SVG format) for additional branding to replace the default in the lower left corner of X2Go Client's main window. Kasuta omaloodud ikooni (SVG formaadis) lisatunnusena vahetamaks vaikimisi alumises vasakus nurgas olevat. Disables X2Go Client's UNIX cleanup helper. This will prevent X2Go Client from terminating spawned processes after the main program terminates or crashes. Use with care and when in doubt, do not use this parameter at all. HelpDialog Options Valikud HttpBrokerClient Host key for server changed. It is now: Serveri võti on muutunud. See on nüüd: For security reasons, connection will be stopped Ühendus katkestatakse turvalisuse tõttu The host key for this server was not found but an othertype of key exists.An attacker might change the default server key toconfuse your client into thinking the key does not exist Serveri võtit ei leitud, aga leidus muu võti. Mõni häkker võib olla vahetanud oletusvõtme üritades petta kaugkasutajat et viimane arvaks et võtit ei ole Could not find known host file.If you accept the host key here, the file will be automatically created Ei leidu tuntud võtmete faili. Kui kinnitad selle serveri võtme, moodustame automaatselt ka tuntud võtmete faili The server is unknown. Do you trust the host key? Public key hash: Tundmatu server. Kas Sa usaldad tema võtit? Tema avaliku võtme 'hash' on: Host key verification failed Võtme kontroll ebaõnnestus Yes Jah No Ei Verification code: Kontrollkood: Enter passphrase to decrypt a key Anna võtme dekrüpteerimise salasõna Authentication failed Autentimine ebaõnnestus Error Viga Login failed!<br>Please try again Sisselogimine ebaõnnestus!<br>Palun ürita uuesti <br><b>Server uses an invalid security certificate.</b><br><br> <br><b>Serveri sertifikaat on vigane.</b><br><br> <p style='background:#FFFFDC;'>You should not add an exception if you are using an internet connection that you do not trust completely or if you are not used to seeing a warning for this server.</p> <p style='background:#FFFFDC;'>Sa ei tohiks lisada erandit kui Sa kasutad internetiühendust, mida sa täielikult ei usalda, või kui Sa pole harjunud saama pidevalt seda hoiatust sellelt serverilt.</p> Secure connection failed Turvalise ühenduse loomine ebaõnnestus For security reasons, the connection attempt will be aborted. Ühendus katkestatakse turvalisuse tõttu. The host key for this server was not found but another type of key exists. An attacker might have changed the default server key to trick your client into thinking the key does not exist yet. Serveri võtit ei leitud, aga leidus muu võti. Mõni häkker võib olla vahetanud oletusvõtme üritades petta kaugkasutajat et viimane arvaks, et võtit veel ei ole. Could not find known hosts file. If you accept the host key here, the file will be automatically created. Ei leidu tuntud võtmete faili (known_hosts). Kui kinnitad selle serveri võtme, moodustame automaatselt ka tuntud võtmete faili. Host key verification failed. Võtme kontroll ebaõnnestus. Enter user account password: Anna kasutajakonto parool: Authentication failed. Autentimine ebaõnnestus. Login failed!<br>Please try again. Sisselogimine ebaõnnestus!<br>Palun ürita uuesti. Secure connection failed. Turvalise ühenduse loomine ebaõnnestus. Issued to: Antud: Common Name(CN) Common Name(CN) Organization(O) Organisatsioon (O) Organizational Unit(OU) Organisatsiooni allüksus(OU) Serial Number Seeria number Issued by: Väljaandja: Validity: Kehtivus: Issued on Välja antud expires on vananeb Fingerprints: Sõrmejälg: SHA1 SHA1 MD5 MD5 Exit X2Go Client Sulge X2Go Client Add exception Lisa erand InteractionDialog Terminal output: Terminali väljund: Cancel Loobu Reconnect Ühenda uuesti MediaWidget Sound Heli Enable sound support Võimalda heli Start sound daemon Käivita helimoodul Use running sound daemon kasuta käimasolevat heli moodulit Use SSH port forwarding to tunnel sound system connections through firewalls Kasuta SSH porti heliseadete ühendamiseks pääsemaks läbi tulemüüri Use default sound port Kasuta vaikimisi heli porti Sound port: Heli port: Client side printing support Kliendipoolne printimine Deprecation Warning Hoiatus see on iganenud - aegunud ARTS support is scheduled to be removed soon. Please upgrade to PulseAudio. ARTS tugi on plaanis lähiajal eemaldada. Palun uuenda kasutamaks PulseAudio-t. ESounD support is scheduled to be removed soon. Please upgrade to PulseAudio. ESounD tugi on plaanis lähiajal eemaldada. Palun uuenda kasutamaks PulseAudio-t. ONMainWindow Starting x2goclient... x2goclient käivitub... us us pc105/us pc105/us X2Go Client X2Go Client connecting ühendan Internet browser Veebilehitseja Email client E-mail kliendiprogramm OpenOffice.org OpenOffice.org Terminal Terminal Starting x2goclient in portable mode... data directory is: Käivitan x2goclient-i 'mobiilses' olekus... Andmekataloog on: &Settings ... &Seaded... Support ... Tugi ... About X2GO client X2Go client andmed Started x2goclient. X2Go klient on käivitatud. Can't load translator: Translaatori laadimine ei õnnestu: Translator: Translaator: installed. installeeritud. Share folder... Jaga kataloogi... Applications... Rakendused... Suspend Peata Terminate Sulge Reconnect Ühenda uuesti Detach X2Go window Haagi X2Go aken.lahti Minimize toolbar Minimiseeri töövahendid Session: Sessioon: &Quit &Lõpeta Ctrl+Q Ctrl+Q Quit Lõpeta &New session ... &Uus sessioon ... Ctrl+N Ctrl+N Session management... Sessiooni haldamine... Ctrl+E Ctrl+E &Create session icon on desktop... &Tee sessiooniikoon töölauale... &Set broker password... &Anna 'broker'-i salasõna... &Connectivity test... &Ühenduse test... Show toolbar Näita töövahendite riba About Qt Qt andmed Ctrl+Q exit Ctrl+Q Starting X2Go Client %1... X2Go Client %1 käivitub... Starting X2Go Client in portable mode. Data directory is: Käivitan X2Go Client-i 'mobiilses' olekus... Andmekataloog on: About X2Go Client Teave X2Go Client kohta Started X2Go Client. X2Go Client on käivitatud. found. leitud. English language requested, not loading translator. You're right, that should probably not be a translatable string at all. I think I added it for the case that we decide to add an English translation (think American vs. British vs. Australian vs. New Zealand vs ... English) of X2Go Client as well, but it doesn't make too much sense. Inglise keel on nõutud, translaatorit ei laeta. Non-fatal: can't load translator: Ei suuda laadida translaatorit: Trying to load language with lower preference, if existent. Üritame laadida järgmise eelistuse keelt, kui eksisteerib. Session management ... Sessiooni haldamine ... &Create session icon on desktop ... &Tee sessiooni ikoon töölauale ... &Set broker password ... &Anna 'broker'-i salasõna ... &Connectivity test ... &Ühenduvuse test ... &Session &Sessioon &Options &Valikud &Help &Abi Login: Logi sisse: Error Viga Operation failed Toiming ebaõnnestus Password changed Salasõna on vahetatud Wrong password! Vale salasõna! Connecting to broker Ühendume 'broker'-iga <b>Authentication</b> <b>Autentimine</b> Restore Taasta Not connected Ei ole ühendatud Multimedia Multimeedia Development Arendus Education Õpetus Game Mäng Graphics Graafika Network Võrk Office Office Settings Seaded System Süsteem Utility Abiprogramm Other Muu Share folder ... Jaga kataloogi ... A click displays the context menu. A left click hides or restores the window. A right click displays the context menu. Vasak hiire nupp peidab või taastab akna. Parem nupp näitab menüüd. Closing X2Go Client ... Sulgen X2Go Client'i ... Finished X2Go Client closing hooks. Lõpetanud X2Go Client suleb konksusid. Broker authentication failed! Brokeri autentimine ebaõnnestus! no X2Go Server found in LDAP X2Go Serverit ei leia LDAP-st Connection error: Ühenduse viga: Couldn't find an SSH connection. Ei leia SSH-ühendust. This can be an indication of a man-in-the-middle attack. Somebody might be eavesdropping on you. For security reasons, it is recommended to stop the connection attempt. Do you want to terminate the connection? Seems the be missing the "eavesdropping" part? See võib olla 'man-in-the-middle' rünnaku tunnus. Tusvalisuse kaalutlustel on soovitatav katkestada ühendus. Kas Sa soovid ühenduse katkestada? Host key verification failed. Võtme kontroll ebaõnnestus. The host key for this server was not found but another type of key exists. An attacker might have changed the default server key to trick your client into thinking the key does not exist yet. For security reasons, it is recommended to stop the connection attempt. Do you want to terminate the connection? Serveri võtit ei leitud, aga leidus muu võti. Mõni häkker võib olla vahetanud oletusvõtme üritades petta kaugkasutajat et viimane arvaks, et võtit ei ole. Turvalisuse kaalutlusel soovitame ühendus katkestada. Kas Sa soovid ühenduse katkestada? Could not find known hosts file. If you accept the host key here, the file will be automatically created. Ei leidu tuntud võtmete faili (known_host). Kui kinnitad selle serveri võtme, moodustame automaatselt ka tuntud võtmete faili. Authentication failed. Autentimine ebaõnnestus. <b>Connection failed.</b> <b>Ühendus ebaõnnestus</b> No server available. Ühtegi serverit ei leidu. Server not available. Server pole kättesaadav. No accessible desktop found. Ühtegi ligipääsetavat töölauda ei ledu. Your current color depth is different from the session's color depth. This may cause problems reconnecting to this session and in most cases <b>you will loose the session</b> and have to start a new one! It's highly recommended to change the color depth of your display to Su praegune värvieraldus on erinev kui x2go sessioonil. See võib põhjustada probleeme taasühendamisel ja enamusel juhtudest <b>ühendus kaob</b> ja sa pead alustama uuesti. On kindlasti soovitatav et sa muudaks oma ekraani värvieralduseks bits and restart your X.Org Server before you reconnect to this X2Go session.<br />Do you want to resume this session anyway? bitid ja käivitaksid X-serveri uuesti enne kui Sa ühendud uuesti selle x2go sessiooniga<br>Kas soovid vaatamata sllele jätkata? This can be an indication of a man-in-the-middle attack. Somebody might be eavesdropping on you. For security reasons, it is recommended to stop the connection attempt. Do you want to terminate the connection? See võib olla 'man-in-the-middle' rünnaku tunnus. Keegi võib ühendust pealt kuulata. Tusvalisuse kaalutlustel on soovitatav katkestada ühendus. Kas Sa soovid ühenduse katkestada? XDM XDM RDP RDP X2GoKDrive session Your current color depth is different from the session's color depth. This may cause problems reconnecting to this session and in most cases <b>you will lose the session</b> and have to start a new one! Su praegune värvieraldus on erinev kui sessioonil. See võib põhjustada probleeme taasühendamisel ja enamusel juhtudest <b>ühendus kaob</b> ja sa pead alustama uuesti! It's highly recommended to change the color depth of your display to %n bit(s) and restart your X.Org Server before you reconnect to this X2Go session. %n will be replaced with a number On soovitatav et sa vahetaks värvieraduseks %n bitt ja käivitaksid uuesti oma XOrg Serveri enne kui sa ühedud uuesti X2Go sessiooni. On soovitatav et sa vahetaks värvieraduseks %n bitti ja käivitaksid uuesti oma XOrg Serveri enne kui sa ühedud uuesti X2Go sessiooni. <br />Do you want to resume this session anyway? <br />Kas soovid sessiooni ikkagi taaskäivitada? PulseAudio is not running "PulseAudio" ei ole käivitunud Sound output will be disabled for this session. Please enable PulseAudio in the configuration dialog or disable sound in the session settings Audio väljund on sellel sessioonil keelatud. Palun luba PulseAudio heliseadete konfiguratsiionis Unable to create SSH tunnel for X2Go session (NX) startup: Ei suuda luua SSH tunnelit X2Go sessiooni (NX) käivitamiseks: Unable to create SSH tunnel for audio data: Ei suuda luua SSH tunnelit audio jaoks: failed to start. käivitamine ebaõnnestus. This likely means the binary is not available. The current search path is: Ilmselt ei ole programm kättesaadav. Otsitakse kataloogist: returned a non-zero exit code or crashed otherwise. saadi mittenulline lõpetuskood või programm lõpetas mingil muul põhjusel töö. Execution failed, exit code was: Käivitamine ebaõnnestus. Vea kood on: didn't start up in time. ei käivitunud mõistliku aja jooksul. This error shouldn't come up. Sellist viga ei tohiks juhtuda. didn't accept a write operation. ei lubanud kirjutamist. It is probably not running correctly or crashed in-between. See ilmselt ei tööta enam korrektselt. Unable to read from xmodmap. Ei suuda lugeda xmodmap'ist. encountered an unknown error during start up or execution. käivitamisel juhtus tundmatu viga. experienced an undefined error. ilmnes tundmatu viga. X2Go Client will now terminate. File a bug report as outlined on the <a href="http://wiki.x2go.org/doku.php/wiki:bugs">bugs wiki page</a>. X2Go Client lõpetab töö. Teata veast <a href="http://wiki.x2go.org/doku.php/wiki:bugs">"bugs wiki page"</a>. Failed to start RDP or XDMCP client Ei õnnestu käivitada RDP või XDMCP klienti Check session settings and ensure that selected client is installed on your system. Kontrolli sessiooni seadeid ja veendu et valitud klient on paigaldatud. Proxy didn't terminate after 3 seconds. Killing the proxy. Proxy ei lõpetanud 3 sekundi jooksul. Proxy tapetakse. Closing X2Go Client because it was started in hidden mode. Sulen X2Go Cliendi kuna see oli käivitatud peidetud reziimis. Closing X2Go Client because the --close-disconnect parameter was passed. Sulen X2Go Cliendi kuna oli antud --close-disconnect parameeter. Are you sure you want to terminate this session? Unsaved documents will be lost. kas oled kindel et tahad sulgeda? Avatud failid ei salvestu. <b>Connection failed.</b> : <b>Ühendus ebaõnnestus.</b> : (file does not exist) (faili ei leidu) (directory does not exist) (kataloogi ei leidu) Invalid value for parameter "--link". Vale väärtus parameetril "--link". Invalid value for parameter "--clipboard". Vale väärtus parameetril "--clipboard". Invalid value for parameter "--sound". Vale väärtus parameetril "--sound". Invalid value for parameter "--geometry". Vale väärtus parameetril "--geometry". Invalid value for parameter "--set-kbd". Vale väärtus parameetril "--set-kbd". Invalid value for parameter "--ldap". Vale väärtus parameetril "--ldap". Invalid value for parameter "--ldap1". Vale väärtus parameetril "--ldap1". Invalid value for parameter "--ldap2". Vale väärtus parameetril "--ldap2". Invalid value for parameter "--pack". Vale väärtus parameetril "--pack". <br>(C) 2005-2023 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> Translators, feel free to add a localized version of your translation including a copyright notice and your name(s). Remember to keep a <br> at the end, though. English example for a potential translation: <br>(C) 2005-2023 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br>English version: (C) 20AB-20CD Trans Lator <trans@la.tor><br> <b>(C) 2005-2023 <b>tublid</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> <br>This is a client to access the X2Go network-based computing environment. This client will be able to connect to X2Go Server(s) and start, stop, resume and terminate (running) desktop sessions. X2Go Client stores different server connections and may automatically request authentication data from LDAP directories. Furthermore, it can be used as a fullscreen login screen (replacement for login managers like XDM). Please visit <a href="http://www.x2go.org">the project home page at x2go.org</a> for further information. <br>See moodul on vajalik et üheduda X2Go baseeruvate süsteemidega. See võimaldab ühenduda X2Go Serveri(te)ga ja alustada, lõpetada, jätkata ja katkestada sessioone. X2Go Client oskab kasutada ja automaatselt nõuda autentimisandmeid LDAP-serveritest. Lisaks võib seda kasutada kui üleekraani loginkuva (korvates sellega login süsteeme nagu näiteks XDM). Palun vaata <a href="http://www.x2go.org">projekti kodulehte</a> täpsema info saamiseks. Check whether the package providing "pcsc_scan" is installed. The current search path is: Kontrolli kas "pcsc_scan" toetav lisamoodul on paigaldatud. Otsimistee on: Unable to create or append to file: Ei suuda luua ega lisada faili: Unable to change the permissions of file: Ei suuda muuta õigusi failile: This is an error because sshd would deny such a file. See on viga kuna sshd võib keelduda sellisest failist. Unable to change the permissions of directory: Ei suuda muuta õigusi kataloogile: This is an error because sshd would deny such a directory. See on viga kuna sshd võib keelduda sellisest kataloogist. Can't start X.Org Server. Ei suuda käivitada X.Org Serverit. Please check your installation. Palun kontrolli oma installi. X.Org Server did not launch correctly after %n tries. %n will be substituted with the current number of tries X.Org Server ei käivitunud korralikult isegi mitte pärast %n kordset proovimist. X.Org Server ei käivitunud korralikult isegi mitte pärast %n kordset proovimist. Unable to find the sftp-server binary. Neither bundled, nor found in $PATH nor additional directories. Ei leia sftp-server programmi. Seda kas ei ole või ei leidu teda'$PATH ega lisakataloogides. If you are using a Linux-based operating system, please ask your system administrator to install the package containing the sftp-server binary. Common names are <b>openssh</b>, <b>openssh-server</b> or <b>openssh-sftp-server</b> depending upon distribution. If the sftp-server binary is installed on your system, please report a bug mentioning its path on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Ku Te kasutate Linuxil baseeruvat operatsioonisüsteemi, paluge oma administraatorilt installida 'package containing the sftp-server binary'. Nendeks võivad olla: <b>openssh</b>, <b>openssh-server</b> or <b>openssh-sftp-server</b> sõltuval Teie süsteemist. Kui Teie sftp-server on siiski juba installeeritud, palun teavitage sellisest veast: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> SSH key type selection error SSH võtme tüübi valimise viga Unknown SSH key selected. Valiti tundmatu SSH võti. Terminating application. Programmi töö katkestamine. SSH key base directory creation error SSH võtme baaskataloogi loomise viga Unable to create SSH key base directory '%1'. Ei suuda luua SSH võtme baaskataloogi '%1'. ssh-keygen launching error ssh-keygen käivitamise viga Unable to start the ssh-keygen binary. Ei suuda käivitada ssh-keygen programmi. ssh-keygen crashed ssh-keygen jooksis kinni The ssh-keygen binary crashed. Ssh-keygen jooksis kinni. ssh-keygen program error ssh-keygen programmi viga The ssh-keygen binary did not exit cleanly. Ssh-keygen ei lõpetanud korrektselt. It was probably called with unknown arguments. Tundub et see oli käivitatud tundmatute parameetritega. Unable to open newly generated %1 public host key file. Ei õnnestu avada äsja genereeritud %1 avaliku võtme faili. %1 public host key file empty. %1 public host key on tühi. You have enabled Remote Printing or File Sharing. These features require a running and functioning SSH server on your computer. <b>Printing and File Sharing will be disabled for this session.</b> Sa oled aktiveerinud kaugprintimise või failide jagamise. Need vajavad toimimiseks funktsioneerivat SSH serverit. <b>Kaugprintimine ja failide jagamine keelatakse selles sessioonis.</b> Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server. If you see this message, please report a bug on: Tavaliselt seda ei tohiks juhtuda kuna Windowsi X2Go Clientomab oma SSH serverit. Kui Te näete seda teadet, teavitage palun: The SSH server failed to start. Please report a bug on: SSH server ei käivitunud. Palun teata veast: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server and automatically generates the required keys. If you see this message, please report a bug on: Tavaliselt seda ei tohiks juhtuda kuna Windowsi X2Go Clientomab oma SSH serverit ja genereerib automaatselt vajalikud võtmed. Kui Te näete seda teadet, teavitage palun: X2Go Client was unable to create SSH host keys. Please report a bug on: X2Go Client ei suuda luua SSH host võtmeid. Palun teata veast: SSH daemon failed to open the application's authorized_keys file. SSH daemon ei suuda avada rakenduse 'authorized_keys' faili. libssh initialization failure libssh initsialiseerimine ebaõnnestus Unable to initialize libssh. Ei suuda initsialiseerida libssh. Left mouse button to hide/restore - Right mouse button to display context menu Vasak hiire nupp - peida/näita - Parem nupp - näta valikuid Closing x2goclient... x2goclient sulgub... Closed x2goclient. X2Goclient on suletud. Please check LDAP settings Palun kontrolli LDAP-sätteid no X2Go server found in LDAP X2Go -serverit ei leia LDAP-st Create session icon on desktop Loo sessiooni ikoon töölauale Desktop icons can be configured not to show x2goclient (hidden mode). If you like to use this feature you'll need to configure login by a gpg key or gpg smart card. Use x2goclient hidden mode? Töölauaikoonid võib sättida peitma x2goclient rakendust (hidden mode). Kui sa tahad seda võimalust kasutada siis säti login kasutama gpg-võtit või gpg -kaarti. Kasuta x2goclient programmi peidetuna? New Session Uus sessioon X2Go Link to session X2Go viit sessioonile No X2Go sessions found, closing. X2Go -sessioone ei leidunud, suleme. Are you sure you want to delete this session? Kas oled kindel, et tahad kustutada selle sessiooni? KDE KDE RDP connection RDP -ühendus XDMCP XDMCP Connection to local desktop Ühendus lokaalsele töölauale on sees Starting connection to server: Ühenduse loomine serveriga: to => Connection Error( Ühenduse viga( Couldn't find a SSH connection. Ei leia SSH-ühendust. Enter passphrase to decrypt a key Anna võtme salasõna Enter user account password: Anna kasutajakonto parool: Host key for server changed. It is now: Serveri avalik võti on muutunud. See on nüüd: wrong value for argument"--clipboard" Vigane argumendi "--clipboard" väärtus Help Abi Available pack methods: Võimalikud pakkimisviisid: Pack Methods Pakkimisviisid Option is not available in this build. See parameeter ei ole selles versioonis võimalik. Unable to create directory: Ei suuda luua kataloogi: Cannot open key: Ei leia võtit: <br>X2Go Plugin mode was sponsored by <a href="http://www.foss-group.de/">FOSS-Group GmbH (Freiburg)</a><br> <br>X2Go Plugin mode sai sponsoreeeritud <a href="http://www.foss-group.de/">FOSS-Group GmbH (Freiburg)</a> poolt<br> <b>X2Go Client v. <b>X2Go Client v. Please check LDAP Settings. Palun kontrolli LDAP-sätteid. Check whether the package providing "scdaemon" is installed. The current search path is: Kontrolli kas "scdaemon" toetav lisamoodul on paigaldatud. Otsimistee on: didn't start yet. ei ole veel käivitunud. Unable to read from scdaemon. Ei suuda lugeda scdaemon'ist. No valid card found. Ei leia toimivat kaarti. This card is unknown to the X2Go system. X2Go ei tunne seda kaarti. Can't start X.Org Server. Please check your installation. Ei suuda käivitada X.Org Serverit. Palun kontrolli oma installeeringut. Remote server does not support file system exports through SSH tunnels. Please update your x2goserver package. Serveril puudub SSH tunneli kaudu failisüsteemi eksportimise tugi. Palun uuenda x2goserverit. Unable to create SSH tunnel for Folder Sharing and Printing support: Ei suuda luua SSH tunnelit failide jagamiseks või pronteri jagamiseks: Unable to read: Ei suuda lugeda: Error getting window geometry. (Did you close the window?) Ei suuda määrata akna suurust. (Kas Te sulgesite akna?) Invalid value for argument "speed" "speed" argumendil on vale väärtus Applications ... Rakendused ... SSH daemon could not be started. SSH daemoni ei suudeta käivitada. Disabling Remote Printing or File Sharing support in the session settings will get rid of this message. Sessioonis keelatud Kaugprintimine ja/või failide jagamine kirjutab selle üle. SSH daemon failed to open its public host key. SSH daemon ei suuda avada oma avalikku võtit. SSH Error SSH Viga SSH daemon could not be started. You'll need SSH daemon for printing and file sharing. Normally, this should not happen as X2Go Client for Windows ships its internal sshd.exe. If you see this message, please report a bug against the X2Go bugtracker. SSH daemoni ei suudeta käivitada. Sa vajad seda printimiseks ja jagamiseks. Tavaliselt, seda viga ei juhtu kuna X2Go windowsi.klient tuleb koos sisseehitatud sshd.exe'ga. Kui Sa näed seda viga, palun tee selle kohta postitus X2Go bugtracker'isse. SSH daemon is not running. You'll need SSH daemon for printing and file sharing Please ask your system administrator to provide the SSH service on your computer. SSH daemon ei ole käivitatud. Sa vajad SSH daemonit printimiseks ja jagamiseks Palu, et süsteemi administraator lisaks SSH service Sinu arvutisse. SSH daemon failed to open the application's public host key. SSH daemon ei suuda avada rakenduse avalikku võtit. SSH daemon failed to open the application's public key used for exporting folders and printers. SSH daemon ei suuda avada rakenduse avalikku võtit eksportimaks katalooge ja printereid. SSH daemon failed to open the application's authoized_keys file. SSH daemon ei suuda avada rakenduse 'authorized_keys' faili. For security reasons, connection will be stopped Ühendus suletakse olematu turvalisuse tõttu The host key for this server was not found but an othertype of key exists.An attacker might change the default server key toconfuse your client into thinking the key does not exist Serveri võtit ei leitud, aga leidus muu võti. Mõni häkker võib olla vahetanud oletusvõtme üritades petta kaugkasutajat et viimane arvaks, et võtit ei ole Could not find known host file.If you accept the host key here, the file will be automatically created Ei leidu tuntud võtmete faili (known_host). Kui kinnitad selle serveri võtme, moodustame automaatselt ka tuntud võtmete faili The server is unknown. Do you trust the host key? Public key hash: Tundmatu server. Kas Sa usaldad tema võtit.? Tema avaliku võtme 'hash' on: Host key verification failed Võtme kontroll ebaõnnestus Show session tray icon when running Kui programm töötab näita ikooni tegumiribal Verification code: Kontrollkood: This can be an indication of a man-in-the-middle attack. Somebody might be eavesdropping on you. For security reasons, it is recommended to stop the connection. Do you want to terminate the connection? See võib olla 'man-in-the-middle' rünnaku tunnus. Tusvalisuse kaalutlustel on soovitatav katkestada ühendus. Kas Sa soovid ühenduse katkestada? Yes Jah No Ei If you accept the new host key the security of your connection may be compromised. Do you want to update the host key? Kui sa kinnitad uue võtme võib Su ühendus muutuda ebaturvaliseks. Kas sa tahad võtit uuendada? The host key for this server was not found but an othertype of key exists. An attacker might change the default server key to confuse your client into thinking the key does not exist. For security reasons, it is recommended to stop the connection. Do you want to terminate the connection? Serveri võtit ei leitud, aga leidus muu võti. Mõni häkker võib olla vahetanud oletusvõtme üritades petta kaugkasutajat et viimane arvaks, et võtit ei ole Turvalisuse kaalutlusel soovitame ühendus katkestada. Kas Sa soovid ühenduse katkestada? Authentication failed: Autentimine ebaõnnestus: Authentication failed Autentimine ebaõnnestus Enter password for SSH proxy Anna SSH proxy salasõna <b>Connection failed</b> <b>Ühendus ebaõnnestus</b> <b>Wrong password!</b><br><br> <b>Vale salasõna!</b><br /><br /> Connection failed: Yhendus ebaõnnestus: - Wrong password. - Vale salasõna. unknown tundmatu No server availabel Typo in original Ühtegi serverit ei leidu Server not availabel Typo Server ei ole kättesaadav Select session: Vali sessioon: running töötab suspended peatatud Desktop Töölaud single application rakendus shadow session Varisessioon Information Info No accessible desktop found Ühtegi ligipääsetavat töölauda ei ledu Filter Valik Select desktop: Vali töölaud: Warning Hoiatus Your current color depth is different to the color depth of your x2go-session. This may cause problems reconnecting to this session and in most cases <b>you will loose the session</b> and have to start a new one! It's highly recommended to change the color depth of your Display to Su praegune värvieraldus on erinev kui x2go sessioonil. See võib põhjustada probleeme taasühendamisel ja enamusel juhtudest <b>ühendus kaob</b> ja Sa pead alustama uuesti. On kindlasti soovitatavet sa muudaksoma ekraani värvieralduseks 24 or 32 24 või 32 bit and restart your X-server before you reconnect to this x2go-session.<br>Resume this session anyway? bitti ja käivitaksid X-serveri uuesti enne kui Sa ühendud uuesti selle x2go sessiooniga<br>Kas soovid jätkata vaatamata sllele? suspending peatame terminating katkestame <b>Wrong Password!</b><br><br> <b>Vale salasõna!</b><br><br> New session started Uus sessioon on käivitatud Session resumed Sessioon jätkub Unable to create folder: Kataloogi loomine ei õnnestu: Unable to write file: Ei õnnestu kirjutamine faili: Attach X2Go window Ühendu X2GO aknaga Unable to create SSL tunnel: Ei suuda luua SSL tunnelit: Unable to create SSL Tunnel: Ei suuda luua SSL Tunnelit: Emergency exit. Hädaväljapääs. Waiting for proxy to exit. Ootame kuni proxy lõpetab. Failed, killing the proxy. Ebaõnnestus, tapame proxy. Finished Lõpetatud starting Käivitub resuming jätkab Connection timeout, aborting Ühendus aegus, katkestame aborting katkestame Are you sure you want to terminate this session? Unsaved documents will be lost kas oled kindel et tahad sulgeda? Avatud failid ei salvestu Session Sessioon Display Ekraan Creation time Loomisaeg <b>Connection failed</b> : <b>Ühendus ebaõnnestus</b> : (can't open file) (ei saa avada faili) (file not exists) (faili ei leidu) (directory not exists) (kataloogi ei leidu) wrong value for argument"--link" vale väärtus parameetril "--link" wrong value for argument"--sound" vale väärtus parameetril "--sound" wrong value for argument"--geometry" vale väärtus parameetril "--geometry" wrong value for argument"--set-kbd" vale väärtus parameetril "--set-kbd" wrong value for argument"--ldap" vale väärtus parameetril "--ldap" wrong value for argument"--ldap1" vale väärtus parameetril "--ldap1" wrong value for argument"--ldap2" vale väärtus parameetril "--ldap2" wrong value for argument"--pack" vale väärtus parameetril "--pack" Wrong parameter: Vale parameeter: Options Valikud Available pack methodes: Võimalikud pakkimisviisid: Pack Methodes Pakkimisviisid Option is not availabel in this build See seade ei ole võimalik selles versioonis Changelog Muutuste nimekiri Git Info Git'i info Unable to create folder: Kataloogi loomine ei õnnestu: RSA file empty. RSA-fail on tühi. Can not open key: Võtme avamine ei õnnestu: Support Abi </b><br> (C. 2005-2016 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br> <b><br> (C. 2005-2016 <b>kindlalt hea</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br> <br>x2goplugin mode was sponsored by <a href="http://www.foss-group.de/">FOSS-Group GmbH(Freiburg)</a><br> <br>x2plugin meetodi sponsori <a href="http://www.foss-group.de/">FOSS-Group GmbH(Freiburg)</a><br> <br>Client for use with the X2Go network based computing environment. This Client will be able to connect to X2Go server(s) and start, stop, resume and terminate (running) desktop sessions. X2Go Client stores different server connections and may automatically request authentication data from LDAP directories. Furthermore it can be used as fullscreen loginscreen (replacement for loginmanager like xdm). Please visit x2go.org for further information. <b>Töövahend mille abil võid ühenduda X2Go võrgus olevate arvutitega. Selle kliendiprogrammiga võid ühenduda X2GO serveritega ja alustada, lõpetada, katkestada ja jätkata olemasolevate töölaua sessioonidega. X2Go Client jätab meelde erinevaid servereid ja võib automaatselt auteniseeruda kasutades LDAP katalooge Lisaks võib seda kasutada täisekraan loginekraanina (sel juhul asendab ta loginmanagere -nagu näiteks xdm ). Külasta veebilehte x2go.org, sealt saad täpsemat teavet. <b>X2Go Client V. <b>X2Go Client V. Please check LDAP Settings Palun kontrolli LDAP-sätteid No valid card found Ei leia toimivat kaarti Card not configured. Kaart on puudulikult konfigureeritud. This card is unknown by X2Go system X2Go ei tunne seda kaarti Unable to create file: Ei suuda luua faili: Can't connect to X server Please check your settings Ühendus X-serveriga ei õnnestu, palun kontrolli oma seadeid Can't start X server Please check your settings Ei suuda käivitada X serverit Palun kontrolli oma seadeid Can't start X Server Please check your installation Ei suuda käivitada X serverit Palun kontrolli oma installeeringut Unable to execute: Ei suuda käivitada: Remote server does not support file system export through SSH Tunnel Please update to a newer x2goserver package Serveril puudub SSH tunneli kaudu failisüsteemi eksportimise tugi Uuenda x2goserver uuema vastu Unable to read : Ei suuda lugeda : Unable to write : Ei suuda kirjutada : WINDOWS-1252 WINDOWS-1252 ISO8859-1 ISO8859-1 Error getting window geometry (window closed)? Akna geomeetriliste parameetrite lugemine ei õnnestu (Kas aken on äkki suletud)? X2Go Session X2Go Sessioon wrong value for argument"speed" argumendil "speed" on vale väärtus Password: Salasõna: Keyboard layout: Klaviatuuri asetus: Ok Ok Cancel Loobu <b>Session ID:<br>Server:<br>Username:<br>Display:<br>Creation time:<br>Status:</b> <b>Sessiooni ID:<br>Server:<br>Kasutajatunnus:<br>Ekraan:<br>Loomisaeg:<br>Olek:</b> Abort Katkesta Show details Näita täpsemalt Resume Jätka New Uus Full access Kõik õigused View only Ainult vaatlemine Status Olek Command Käsk Type Tüüp Server Server Client IP Kliendi IP Session ID Sessiooni ID User Kasutaja Only my desktops Ainult oma töölauad sshd not started, you'll need sshd for printing and file sharing you can install sshd with <b>sudo apt-get install openssh-server</b> sshd ei ole käivitatud, see on hädavajalik kui soovid, et printimine ja ketaste jagamine toimiksid võid installeerida selle kasutades käsku <b>sudo apt-get install openssh-server</b> Restore toolbar Taasta tegumiriba <br><b>&nbsp;&nbsp;&nbsp;Click this button&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;to restore toolbar&nbsp;&nbsp;&nbsp;</b><br> <b><b>&nbsp;&nbsp;&nbsp;Vajuta seda nuppu&nbsp;&nbsp;&nbsp;<b>&nbsp;&nbsp;&nbsp;et tööriistariba oleks jälle nähtav&nbsp;&nbsp;&nbsp;</b><br> PrintDialog Print - X2Go Client Printimine - X2Go Client Print Prindi You've deactivated the X2Go Client printing dialog. Sa oled keelanud X2Go Client-rakenduses printimistoimingu. You may reactivate this dialog using the X2Go Client settings dialog. To do so, follow this path in the menu bar: Options -> Settings Sa võid selle dialoogi uuesti taastada X2Go Client-Seadete menüüs. Kasuta menüüs: Valikud -> Seaded) You've deactivated the x2go client printing dialog. Sa oled keelanud x2goClient-rakenduses printimistoimingu. You may reactivate this dialog using the x2goclient settings dialog (Menu -> Options -> Settings) sa võid selle dialoogi uuesti käivitada x2goClient-rakenduses (Menüü -> Valikud -> Seaded) PrintProcess Save File Salvesta PDF Document (*.pdf) PDF dokument (*.pdf) Failed to execute command: Toimingu käivitamine ebaõnnestus: Printing error. Printimisel tuli viga. Printing error Printimisel tuli viga PrintWidget Form Vorm Print Printimine View as PDF Vaata PDF-vormingus Print settings Printeri seaded Printer: Printer: Print using default Windows PDF Viewer (Viewer application needs to be installed) Prindi kasutades Windowsi vaikimisi määäratud PDF-vaatajat (PDF-vaataja peab olema installeeritud) Printer command: Printeri käsk: ... ... - vali - ... Viewer settings Vaatamisprogrammi omadused Open in viewer application Ava vaatamisprogrammiga Command: Käsk: Save to disk Salvesta kettale Show this dialog before start printing Näita seda dialoogi alati enne printimist Please configure your client side printing settings.<br><br>If you want to print the created file, you'll need an external application. Typically you can use <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> and <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>You can find further information <a href="http://www.x2go.org/index.php?id=49">here</a>. Palun konfigureeri printeri seaded.<br><br>Kui tahad loodud faili printida siis vajad selleks eraldi programmi. Tavaliselt peaks selleks sobima <a hrer="http:pages.cs.wisc.edtu/~ghost/doc/GPL/index.htm">ghostprint</a> või <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>Lisaks võid lugeda <a href="http://www.x2go.org/index.php?id=49">siit</a>. Please configure your client side printing settings.<br><br>If you want to print the created file, you'll need an external application. Typically you can use <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> and <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>You can find further information <a href="http://www.x2go.org/index.php?id=49">here</a>. Palun konfigureeri printeri seaded.<br><br>Kui tahad loodud faili printida siis vajad selleks eraldi programmi. Tavaliselt peaks selleks sobima <a hrer="http:pages.cs.wisc.edtu/~ghost/doc/GPL/index.htm">ghostprint</a> või <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>Lisaks võid lugeda <a href="http://www.x2go.org/index.php?id=49">siit</a>. PrinterCmdDialog Printer command Printeri käsud Command Käsk Please enter your customized or individual printing command. Examples: kprinter lpr -P hp_laserjet Anna siia printeri lisakäsud. Näiteks: kprinter lpr -P hp_laserjet Output format Väljundformaat Please choose the printing file format (regarding to your printing environment - if you use CUPS you may use PDF) Palun vali printimisformaat (vastavalt oma printimisvõimalustele - kui kasutad CUPS'i võid kasutada PDF -vormingut) PDF PDF PS PS Data structure Sisendvorming Please choose the method of printing file input (some commands accepting printing files as program options, some are awaiting data on standard input): Vali printimisel kasutatav sisendvorming (mõned käsud lubavad printida failist, mõned aga ootavad sisendit nn. 'standard input' kaudu): standard input (STDIN) 'Standardi input'-kanal (STDIN) Specify path as program parameter Anna faili asukoht programmi parameetrina Please enter your customized or individual printing command. Example: Anna oma printimiskäsk. Näiteks: <Path to gsprint.exe> -query -color <Path to gsprint.exe> -query -color PulseManager Unable to find the PulseAudio binary. Neither bundled, nor found in $PATH nor additional directories. Ei leidu PulseAudio moodulit. Ei leidu ei $PATH ega ka lisakataloogidest. If you downloaded the bundled, pre-compiled version from the official home page, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Kui sa laadisid alla versiooni ametlikult kodulehelt siis palun teavita veast: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Could not allocate buffer for getting current working directory! Could not allocate buffer for getting current working directory! getcwd() failed! getcwd() ebaõnnestus! Unexpected character found when parsing version string for minor version number Tundmatu sümbol minor versiooninumbris Unexpected character found when parsing version string for micro version number Tundmatu sümbol micro versiooninumbris Supposed to skip major version number. Something is wrong. Pean vahele jätma major versiooninumbri. Midagi on valesti. PulseAudio failed to start! "PulseAusio" käivitumine ebaõnnestus! Sound support will not be available. Heli ei ole võimalik. If you downloaded the bundled, pre-compiled version from the official home page or the upstream Linux packages, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Kui sa laadisid alla versiooni ametlikult kodulehelt siis palun teavita veast: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> If you downloaded the bundled, pre-compiled version from the official home page or the upstream Linux packages, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Missing at least the upstream Linux packages part, really also "bundled" and "pre-compiled". If the package came from anywhere else, downstream developers are responsible for it... Kui sa laadisid alla versiooni ametlikult kodulehelt siis palun teavita veast: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Sound support will not be available. If you downloaded the bundled, pre-compiled version from the official home page, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Heli ei ole võimalik. Kui laadisid alla ametlikult kodulehelt siis palun teavita: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Error fetching PulseAudio version number! Viga PulseAudio versiooninumbri leidmisel! Unexpected character found when parsing version string for major version number Tundmatu sümbol versiooninumbris Unexpected character found when parsing version string for minor version number I've changed this to "peamises keskmises versiooninumbris" from the original "peamises.keskmises.versiooninumbris"; please make sure it's correct. Tundmatu sümbol peamises keskmises versiooninumbris Unexpected character found when parsing version string for micro version number I've changed this to "tagumises versiooninumbris" from the original "tagumises.versiooninumbris"; please make sure it's correct. Tundmatu sümbol tagumises versiooninumbris Supposed to skip major version number. Something is wrong. I've changed this to "peamise versiooninumbri" from the original "peamise.versiooninumbri"; please make sure it's correct. Pean vahele jätma peamise versiooninumbri. Midagi on valesti. Unable to convert major version number string to integer. Ei suuda muuta peamist versiooninumbrit täisarvuks. Unable to convert minor version number string to integer. Ei suuda muuta keskmist versiooninumbrit täisarvuks. Unable to convert micro version number string to integer. Ei suuda muuta tagumist versiooninumbrit täisarvuks. Unexpected format encountered. Tundmatu formaat. Unable to start PulseAudio binary. Ei suuda käivitada PulseAudio programmi. Unable to play startup sound. Ei suuda mängida alustusheli. QObject No response received from the remote server. Do you want to terminate the current session? Server ei vasta. Kas katkestame sessiooni? X2Go Client could not find any suitable X11 server. X2Go Client ei leidnud ühtegi sobivat X11-serverit. X2Go Client could not start X11 server. X2Go Client ei suutnud käivitada X11-serverit. X2Go Client requires XQuartz to be installed. If XQuartz is already installed on your system, please select the correct path in the now upcoming dialog. Refer to the end of this message for path examples, in case you do not know the exact location yourself. Should you have <b>not</b> installed XQuartz yet, please follow the outlined steps: X2Go Client vajab et XQuartz oleks installitud. Kui XQuartz on juba installitud, siis palun määra selle asukoht kohe avanevas dialoogiaknas. Juhindu näidistest, Kui sa ei oska ise seda täpselt öelda. Kui sul veel <b>pole</b> installitud XQuartz, siis palun järgi järgmist: MacPorts users, please install either the port <b>xorg-server</b> or the port <b>xorg-server-devel</b>. Upon successful installation, please follow the instructions printed by the port utility to autostart/load the server. All other users, please obtain and install XQuartz from: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> Afterwards, restart X2Go Client and select the correct path to the X11 application in the general X2Go Client settings. This will most likely be <center><b>/Applications/MacPorts/X11.app</b></center> or <center><b>/Applications/Utilities/XQuartz.app</b></center> MacPort kasutajad, palun installige <b<xorg-server</b> või <b>xorg-server-devel</b> port. Pärast õnnestunud installi, jägige instruktsiooni mille printis port utiliit et käivitada server. Kõigil teistel juhtudel installige XQuartz: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> Seejärel käivitage X2Go Client uuesti ja valige X11 uus aplikatsioon X2Go peamiste sätete alt. Tõenäoliselt saab see olema <center><b>/Applications/MacPorts/X11.app</b></center> või <center><b>/Applications/Utilities/XQuartz.app</b></center> SessionButton Session preferences... Sessiooni omadused... Create session icon on desktop... Tee sessioonist ikoon töölauale ... Session preferences ... Sessiooni omadused ... Create session icon on desktop ... Tee sessioonist ikoon töölauale ... Delete session Kustuta sessioon Session actions Sessiooni toimingud Select type Vali tüüp Select resolution Vali resolutsioon Toggle sound support Hääle edastus New Session Uus sessioon running töötab suspended seisatud KDE KDE RDP connection RDP -ühendus XDMCP XDMCP Connection to local desktop Ühendus lokaalsele töölauale Published applications Võimalikud rakendused fullscreen täisekraan Display Ekraan window aken Maximum Maksimaalne Enabled Lubatud Disabled Keelatud SessionExplorer Back Tagasi Create session icon on desktop Loo sessiooni ikoon töölauale Desktop icons can be configured not to show x2goclient (hidden mode). If you like to use this feature you'll need to configure login by a gpg key or gpg smart card. Use x2goclient hidden mode? Töölauaikoonid võib sättida peitma x2goclient rakendust (hidden mode). Kui sa tahad seda võimalust kasutada siis säti login kasutama gpg-võtit või gpg -kaarti. Kasuta x2goclient programmi peidetuna? Create session icon on desktop. Loo sessiooni ikoon töölauale. Desktop icons can be configured not to show X2Go Client (hidden mode.) If you like to use this feature you'll need to configure login via a GPG key or GPG Smart Card. Use X2Go Client's hidden mode? Töölauaikoonid võib sättida peitma x2goclient rakendust (hidden mode). Kui sa tahad seda võimalust kasutada siis säti login kasutama GPG-võtit või GPG-kaarti. Kasuta X2Go Client programmi peidetuna? Show session tray icon when running Kui programm töötab näita ikooni tegumiribal New Session Uus sessioon X2Go Link to session X2Go viit sessioonile Are you sure you want to delete this session? Kas oled kindel, et tahad kustutada selle sessiooni? SessionManageDialog E&xit &Lõpeta &New session &Uus sessioon &Session preferences &Sessiooni parameetrid &Delete session &Kustuta sessioon &Create session icon on desktop ... &Tee sessiooni ikoon töölauale ... &Create session icon on desktop... &Tee sessioonist ikoon töölauale... Delete Delete Kustuta Session management Sessioonide haldamine SessionWidget Session name: Sessiooni nimi: << change icon << muuda ikooni Path: Aadress: &Server &Server Values ranging from <b>0</b> to <b>65535</b> are allowed.<br />A value of <b>0</b> will either use the port specified in the SSH configuration file belonging to a host or shortname, or use the default of <b>22</b>. Väärtus või olla <b>0</b> kuni <b>65535</b><br />Väärtus <b>0</b> kasuta porti mis on kuulub SSH konfiguratsioonisfailis host või lühinime juurde, või kasuta vaikimisi <b>22</b>. Host: Aadress: Login: Login: SSH port: SSH .-port: Use RSA/DSA key for ssh connection: Kasuta RSA/DSA -võtit ssh -ühenduse loomiseks: Try auto login (ssh-agent or default ssh key) Ürita automaatset sisselogimist (ssh-agenti või vaikimisi ssh võtit kasutades) Try auto login (via SSH Agent or default SSH key) Ürita automaatset sisselogimist (SSH-agenti või vaikimisi SSH võtit kasutades) Kerberos 5 (GSSAPI) authentication Kerberos 5 (GSSAPI) autentimine Delegation of GSSAPI credentials to the server Saada GSSAPI andmed serverile Use Proxy server for SSH connection Kasuta vaheserverit (proxy) SSH -ühenduse loomiseks Proxy server Vaheserver (Proxy) SSH SSH HTTP HTTP Same login as on X2Go Server Sama kasutanimi kui X2Go -serverilgi Same password as on X2Go Server Sama salasõna kui X2Go -serverilgi RSA/DSA key: RSA/DSA-võti: SSH Agent or default SSH key SSH-agent või vaikimisi-SSH-võti Run in X2GoKDrive (experimental) Connect to Windows Terminal Server Loo ühendus Windows terminal serveriga X2Go/X11 Desktop Sharing Direct RDP connection Otsene RDP ühendus X2Go Client is running in portable mode. You should use a path on your USB device to be able to access your data wherever you are. X2Go Client-rakendus töötab 'mobiilses' viisis. Kasuta oma usb-seadme asukohamäärangut et pääseksid oma andmetele ligi ükskõik kus sa ka poleks. Direct XDMCP connection Otsene XDMCP ühendus ssh-agent or default ssh key ssh-agent või vaikimisi -ssh-võti Type: Tüüp: Port: Port: &Session type &Sessiooni tüüp Session type: Sessiooni tüüp: Connect to Windows terminal server Loo ühendus Windows terminal serveriga XDMCP XDMCP Connect to local desktop Ühenda lokaalsele töölauale Custom desktop Isemääratud meetod Single application Üks kindel rakendus Published applications Lubatud rakendused Command: Käsk: Advanced options... Täpsemad valikud... Path to executable Programmi asukoht Direct RDP Connection Otsene RDP ühendus Open key file Ava võtmefail All files Kõik failid Error Viga x2goclient is running in portable mode. You should use a path on your usb device to be able to access your data whereever you are x2goclient-rakendus töötab 'mobiilses' viisis. Kasuta oma usb-seadme asukohamäärangut et pääseksid oma andmetele ligi ükskõik kus sa ka poleks RDP port: RDP-port: Open picture Ava pilt Pictures Pildid Server: Server: XDMCP server: XDMCP -server: direct XDMCP connection otsene XDMCP ühendus rdesktop command line options: rdesktop -käsurea parameetrid: New session Uus sessioon SettingsWidget &Display &Ekraan &Keyboard &Klaviatuur Sound Heli &Clipboard Mode &Clipboard režiim &Clipboard mode &Clipboard režiim Fullscreen Täisekraan Custom Ise määratud Window Aken Use whole display Kasuta kogu ekraani Maximum available Maksimaalne võimalik Set display DPI Määra ekraani DPI (punkti tolli kohta)-väärtus Xinerama extension (support for two or more physical displays) Xinerama -laiendus (toetus kahele või enamale ekraanile) Width: Laius: Height: Kõrgus: &Display: &Ekraan: &Identify all displays &Identifitseeri kõik ekraanid Bidirectional copy and paste Mõlemapidine kopeeri-aseta Copy and paste from client to server Kopeeri ja aseta kliendist serverisse Copy and paste from server to client Kopeeri ja aseta serverist.kliendile Disable clipboard completely Keela kopeeri-aseta Auto-detect keyboard settings Määra klaviatuuri parameetrid automaatselt RDP client RDP-klient FreeRDP/X11 (pre-2.x style options) FreeRDP/X11 (2.x style options) Auto detect keyboard settings Määra klaviatuuri parameetrid automaatselt Do not configure keyboard Ära määra klaviatuuri parameetreid Configure keyboard Määratle klaviatuur Model: Mudel: Layout: Tähtede asetus: Variant: Variant: Keep current keyboard Settings Säilita klaviatuuri praegused seaded Keyboard layout: Klaviatuuri asetus: Keyboard model: Klaviatuuri mudel: Enable sound support Võimalda heli Start sound daemon Käivita helimoodul Use running sound daemon kasuta käimasolevat heli moodulit Use SSH port forwarding to tunnel sound system connections through firewalls Kasuta SSH port edastust heliseadete ühendamiseks pääsemaks läbi tulemüüri Use default sound port Kasuta vaikimisi heli porti Sound port: Heli port: Client side printing support Kliendipoolne printimine RDP Client RDP -klient Additional parameters: Lisaparameetrid: Command line: Käsurida: XDMCP client XDMCP klient us us pc105/us pc105/us password salasõna ShareWidget &Folders &Ktaloogid Path Aadress Automount Automaatne külgeühendamine Add Lisa Delete Kustuta Path: Aadress: Filename encoding Faili nime kodeering local: kohalik - lokaalne: remote: server: Use SSH port forwarding to tunnel file system connections through firewalls Kasuta ssh-ühendust tulemüüride läbimiseks X2Go Client is running in portable mode. You should use a path on your USB device to be able to access your data wherever you are. X2Go Client-rakendus töötab 'mobiilses' viisis. Kasuta oma usb-seadme asukohamäärangut et pääseksid oma andmetele ligi ükskõik kus sa ka poleks. Use ssh port forwarding to tunnel file system connections through firewalls Kasuta ssh-ühendust tulemüüride läbimiseks Select folder Vali kataloog Error Viga x2goclient is running in portable mode. You should use a path on your usb device to be able to access your data whereever you are x2goclient-rakendus töötab 'mobiilses' viisis. Kasuta oma usb-seadme asukohamäärangut et pääseksid oma andmetele ligi ükskõik kus sa ka poleks WINDOWS-1252 WINDOWS-1252 ISO8859-1 ISO8859-1 SshMasterConnection SSH proxy connection error SSH vaheserveriga ühendumise viga SSH proxy connection error. SSH vaheserveriga ühendumise viga. SSH proxy connection error: SSH vaheserveriga ühendumise viga: Failed to create SSH proxy tunnel. Viga SSH vaheserveri ühenduse loomisel. Cannot initialize libssh. Libssh-teegi initsialiseerimise viga. Failed to start SSH client. Please check your installation and GSSApi configuration. Ei õnnestu SSH kliendi käivitamine. Palun kontrolli oma installeerimist ja GSSApi konfiguratsiooni. Check your GSSApi configuration or choose another authentication method. Kontrolli oma GSSApi konfiguratsiooni või vali mõni muu atentimismeetod. %1 failed. Argument in this context will be a function name. %1 ebaõnnestus. Cannot create SSH session. SSH-sessiooni loomine ei õnnestu. Using environment-provided username. Kasuta keskkonnas olevat kasutajanime. Cannot connect to proxy server. Vaheserveriga ühendumise viga. Authentication failed. Autentimine ebaõnnestus. Reconnect session Ühendu uuesti Failed to start SSH client. Please check your installation and GSSApi configuration. I've changed "GSSA" back to "GSSApi" here - what was the reason for this change? Is it really called like that in Estonian? If yes, we'll have to revert. Ei õnnestu SSH kliendiprogrammi käivitamine. Palun kontrolli oma installeerimist ja GSSApi konfiguratsiooni. Check your GSSApi configuration or choose another authentication method. I've changed "GSSA" back to "GSSApi" here - what was the reason for this change? Is it really called like that in Estonian? If yes, we'll have to revert. Kontrolli oma GSSApi konfiguratsiooni või vali mõni muu atentimismeetod. Cannot open file Ei saa avada faili Cannot create remote file Ei saa luua serverile faili Cannot write to remote file Ei suuda kirjutada serveri faili channel_open_forward failed. channel_open_forward ebaõnnestus. channel_open_session failed. channel_open_session ebaõnnestus. Error writing to socket. Viga socket'isse kirjutamisel. Error reading channel. Kanali lugemisviga. channel_write failed. channel_write ebaõnnestus. Error reading from TCP socket. Viga TCP socket'ist lugemisel. Failed to create SSH proxy tunnel Viga SSH vaheserveri ühenduse loomisel Can not initialize libssh Libssh-teegi initsialiseerimise viga Can not create ssh session Ssh-sessiooni loomine ei õnnestu Can not connect to proxy server Vaheserveriga ühendumise viga Can not connect to Ei suuda luua ühendust Authentication failed Autentimine ebaõnnestus channel_forward_listen failed channel_forward_listen ebaõnnestus Failed to start SSH Client. Please check your installation and GSSApi configuration Ei õnnestu SSH kliendiprogrammi käivitamine. Palun kontrolli oma installeerimist ja GSSA konfiguratsiooni Check your GSSApi configuration or choose another authentication method Kontrolli oma GSSA konfiguratsiooni või vali mõni muu atentimismeetod Can not open file Ei saa avada faili Can not create remote file Ei saa luua serverile faili Can not write to remote file Ei suuda kirjutada serveri faili Cannot connect to ei suuda ühenduda channel_open_forward failed channel_open_forward ebaõnnestus channel_open_session failed channel_open_session ebaõnnestus channel_request_exec failed channel_request_exec ebaõnnestus error writing to socket socket'isse kirjutamisel tekkis viga error reading channel kanali lugemisviga channel_write failed channel_write ebaõnnestus error reading tcp socket viga tcp socket'ist lugemisel SshProcess Error creating socket Viga socket'i loomisel Error creating socket. Viga socket'i loomisel. Error binding Sidumisviga pordiga XSettingsWidget Open File Ava fail Executable (*.exe) Rakendus (.exe) XSettingsWidgetUI Form Vorm You must restart the X2Go Client for the changes to take effect Selleks, et siin tehtud muudatused jõustuksid pead Sa X2GoClient'i uuesti käivitama use integrated X-Server kasuta integreeritud X-serverit do not use primary clipboard ära kasuta primaarset 'clipboard'-i use custom X-Server kasuta mõnd muud X-serverit custom X-Server X-server executable: käivitatav programm: start X-Server on X2Go Client start käivita X-server X2GOclient'i käivitumisel command line options: käsurea parameetrid: X-Server command line options X-serveri käsurea valikud window mode: Akna olek: fullscreen mode: Koguekraan: single application: Üks programm: whole display: kogu ekraan: x2goclient-4.1.2.3/res/i18n/x2goclient_fi.ts0000644000000000000000000071530714447111613015316 0ustar AppDialog Published Applications Julkaistut sovellukset Search: Etsi: &Start &Käynnistä &Close &Sulje Multimedia Ääni ja video Development Ohjelmointi Education Ohjeet Game Peli Graphics Grafiikka Network Verkko Office Toimisto Settings Asetukset System Järjestelmä Utility Varusohjelma Other Muu BrokerPassDialogUi Dialog Dialogi Old password: Vanha salasana: New password: Uusi salasana: Confirm password: Vahvista salasana: TextLabel Tekstiselitys BrokerPassDlg Passwords do not match Salasanat eivät täsmää CUPSPrintWidget Form Ruutu Name: Nimi: Properties Ominaisuudet State: Tila: Accepting jobs: Vastaanottaa tehtäviä: Type: Tyyppi: Location: Sijainti: Comment: Kommentti: Idle Odottaa Printing Tulostus Stopped Pysäytetty Yes Kyllä No Ei CUPSPrinterSettingsDialog No option selected Valinta puuttuu This value is in conflict with another option. Arvo ei sovi tähän. Options conflict. Valinnat ovat ristiriitaisia. This value is in conflict with other option Valinta on ristiriidassa toisen kanssa Options conflict Ristiriitainen valinta ConTest Connectivity test Yhteyskoe HTTPS connection: HTTPS-yhteys: SSH connection: SSH-yhteys: Connection speed: Yhteyden nopeus: Failed Epäonnistui 0 Kb/s 0 Kt/s OK OK Socket operation timed out. Socket-yhteys aikakatkaistu. Socket operation timed out Socketyhteys vanheni Failed: Epäonnistui: ConfigDialog General Yleinen Display icon in system tray Näytä ikoni järjestelmäpalkissa Hide to system tray when minimized Piilota järjestelmäpalkkiin kun minimoidaan Hide to system tray when closed Piilota järjestelmäpalkkiin kun suljettu Hide to system tray after connection is established Piilota järjestelmäpalkkiin kun yhteys on avattu Restore from system tray after session is disconnected Hae esille järjestelmäpalkista kun yhteys katkeaa Use LDAP Käytä LDAP-ta Server URL: Palvelimen URL-osoite: BaseDN: BaseDN: Failover server 1 URL: Varapalvelimen 1 URL: Failover server 2 URL: Varapalvelimen 2 URL: X.Org Server settings X.Org asetukset PulseAudio settings PulseAudio asetukset Disable PulseAudio Posta PulseAudio käytöstä Disable sound input Poista mikrofoni käytöstä Clientside (local) SSH daemon port for file system export usage: Asiakasohjelman SSH-portti paikallislevyn jakamista varten: Pulseaudio settings Pulseaudio-asetukset Disable audio input Estä audio input <font size="5">You must restart the X2Go Client for the changes to take effect</font><br><br> <font size="5">Käynnistä X2Go-yhteysohjelma muutosten aktivoimiseksi</font><br><br> Your XQuartz version is too old. XQuartz versiosi on liian vanha. Your are using XQuartz (X Window System Server for OS X) version %1. Käytät XQuartz (X Window System Server for OS X) versiota %1. This version causes problems with X applications in 24bit color mode. You should update your X11 environment. MacPorts users please follow the steps outlined on: <center><a href="https://guide.macports.org/chunked/using.common-tasks.html">https://guide.macports.org/chunked/using.common-tasks.html</a></center> Users who have installed XQuartz via the installer package can find updated versions on: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> Tämä version aiheuttaa ongelmia X sovellusten kanssa 24 bitin moodissa. Sinun pitää päivitttää X11 ohjelmasi. MacPorts käyttäjät seuratkaa täältä löytyviä ohjeita: <center><a href="https://guide.macports.org/chunked/using.common-tasks.html">https://guide.macports.org/chunked/using.common-tasks.html</a></center> Ne käyttäjät jotka ovat asentaneet XQuartz-ohjelman asennuspaketista voivat hakea tuoreen version täältä: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> No valid XQuartz application selected. XQuartz-sovelleusta ei ole valittu. You did not select a valid XQuartz application. Please try again. Some standard installation locations may be: <center><b>/Applications/Utilities/X11.app</b></center> <center><b>/Applications/Utilities/XQuartz.app</b></center> <center><b>/Applications/MacPorts/X11.app</b></center> Et ole vielä valinnut sopivaa XQuartz-sovllutsta. Yritä uudelleen. Muutama standardiasennuksia löytyy täältä: <center><b>/Applications/Utilities/X11.app</b></center> <center><b>/Applications/Utilities/XQuartz.app</b></center> <center><b>/Applications/MacPorts/X11.app</b></center> X-Server settings X-palvelimen asetukset X11 application: X11-sovellus: X11 version: X11-versio: Find X11 application Etsi X11-sovellus Clientside SSH port for file system export usage: Etätyöaseman käyttämä levyjaon SSH-portti: Start session embedded inside website Käynnistä istunto web-palvelimessa Advanced options Edistyneet toiminnot Defaults Oletusarvot &OK &OK &Cancel &Keskeytä Settings Asetukset Printing Tulostaa Warning Varoitus x2goclient could not find any suitable X11 Application. Please install Apple X11 or select the path to the application x2go-asiakasohjelma ei löytänyt toimivaa X11-sovellusta. Asenna Apple X11 tai määritä sovelluksen sijainti Your are using X11 (Apple X-Window Server) version Käytät X11 (Apple X-Window Server) versiota . This version causes problems with X-application in 24bit color mode. You should update your X11 environment (http://trac.macosforge.org/projects/xquartz). . Tämä versio ei toimi 24 bitin tarkkuudella X-palvelimssa. Päivitä X11-palvelimesi (http://trac.macosforge.org/projects/xquarts). No suitable X11 application found in selected path Toimivaa X11-sovellusta ei löydy annetusta hakupolusta &Connection &Yhteys &Input/Output &Input/Output &Media &Media &Settings &Asetukset ConnectionWidget &Connection speed &Yhteyden nopeus Connection speed: Yhteyden nopeus: C&ompression &Pakkaus Method: Menetelmä: Compression method: Pakkausmenetelmä: Image quality: Kuvan tarkkuus: CupsPrinterSettingsDialog Dialog Valinnat General Yleistä Page size: Sivun koko: Paper type: Sivun asettelu: Paper source: Lomakkeen syöttö: Duplex Printing Duplex-tulostus None Ohita Long side Pitkä sivu Short side Lyhyt sivu Driver settings Ajurin asetukset Option Valinta Value Arvo No option selected Valinta puuttuu text teksti EditConnectionDialog &Session &Istunto &Connection &Yhteys &Input/Output &Input/Output &Media &Media &Shared folders &Jaetut kansiot &OK &OK &Cancel &Peruuta Defaults Oletukset Session preferences - Istunnon oletusasetukset - ExportDialog &Cancel &Peruuta &share &jaa &Preferences ... &Oletukset ... &Custom folder ... &Varattu hakemisto ... Delete Delete Poista Share Folders Jaetut kansiot share folders jaa kansiot Select folder Valitse kansio FolderButton Sessions folder Istuntojen kansio FolderExplorer Folders Kansiot Create New Folder Tee uusi kansio Rename Folder... Kansiolle uusi nimi... Change Icon... Vaihda kuvake... Delete Folder... Poista kansio... Rename Folder ... Nimeä kansio uudelleen ... Change Icon ... Vaihda kuvake ... Delete Folder ... Poista kansio ... Open picture Avaa kuva Pictures Kuvat X2Go Client X2Go asiakasohjelma Folder Name: Kansion nimi: Error Virhe Unable to remove " Poisto ei onnisu " ". Folder is not empty. Please remove the contents of this directory and try again. ". Kansio ei ole tyhjä. Tyhjennä se ja yrittä uudelleen. ". Folder is not empty. Please remove content of folder and try again. ". Kansio ei ole tyhjä. Tyhjennä kansio ja yritä uudelleen. Delete folder " Poista kansio " New Folder Uusi kansio Help Shows this message. Näytä tämä ilmoitus. Prints version information. Tulosta versiotiedot. Shows the changelog. Näyttää muutokset. Shows git information as used at compile time. [Deprecated: please use --version.] Näyttää git-asetukset, jotka olivat käytössä käännöshetkellä. [Ei käytössä: käytä --version.] Shows available pack methods. Näyttää käytettävissä olevat pakkausmenetelmät. Do not resume sessions automatically. Älä uudista istuntoa automaattisesti. Hides menu bar. Piilottaa menu barin. Disables session editing. Istunnon muokkaus estetty. Starts maximized. Käynnistä maksimikoossa. Starts hidden (minimized to system tray where available.) Käynnistyy piilossa (minimoitu systeemilokeroon josta voit käynnistää.) Starts in "portable" mode. Käynnsityy "portable" tilassa. Forces OpenPGP smart card authentication. Pakottaa OpenPGP korttitunnistuksen käytttöön. Disable PulseAudio. Poista PulseAudio käytöstä. Disable sound input. Mykistä mikrofoni. Enables Xinerama by default. Aktivoi Xineraman oletukseksi. Allows client side printing in LDAP mode. Mahdollistaa etätyöasesta tulostuksen LDAP tilassa. Enables thinclient mode. Starts without a window manager. Aktivoi thinclient tilan. Käynnistyy ilman ikkunointia. Enables shutdown button. Aktivoi shutdonw nappulan. Adds RSA key fingerprint to ".ssh/known_hosts" if authenticity of the server can't be determined. Lisää RSA avaimen tiivisteen tiedostoon ".ssh/known_hosts" jos palvelimen autenttisuutta ei voida selvittää. Starts with LDAP support. Example: --ldap=ldapserver:389:o=organization,c=de Käynnistyy LDAP tuen kanssa. Esimerkiksi: --ldap=ldapserver:389:o=orgaanization,c=de Defines the first LDAP failover server. Määrittää ensimmäisen LDAP varapalvelimen. Defines the second LDAP failover server. Käynnistää toisen LDAP varapalvelimen. Defines the remote SSH server port. Default: 22. Määrittää SSH serverin portin. Oletus: 22. Defines the local machine's SSH server port. Needed for Client-Side Printing and File Sharing support. Default: 22. Määrittää paikallsasemenn SSH portin. Tarvitaan paikallistulostusta ja tiedostojakoa varten. Oletus: 22. Sets the default command. Default: 'KDE' (Desktop Session) Määrittää oletuskomennon. Oletus: 'KDE' (Desktop Session) Starts the session named "session". Käynnistää istunnon nimellä "session". Sets the user name for connecting to the remote SSH server to "username". Määrittää SSH palvelimen yhteytta varten käyttäjätunnuksen "username". Sets the default window geometry. Default: 800x600. Määrittää oletus ikkunakoon. Oletus: 800x600. Sets the remote X2Go Agent's DPI value to "dpi". Default: same as local display. Asettaa palvelimen X2Go Agenti DPI arvokdi "dpi". Oletus: sama kuin paikallistyöasemassa. Sets the default link type. Default: "adsl". Määrittää oletusyhteyden. Oletus: "adsl". Sets default pack method. Default: "16m-jpeg-9". Määrittää oletus pakkausmenetelmän. Oletus: "16m-jpeg-9". Sets the default clipboard mode. Default: "both". Määrittää leikepöydän oletustoiminnan. Oletus: "both". Sets the default keyboard layout to "layout". "layout" may be a comma-separated list. Määrittää oletusnäppäimistöksi "layout". "layout" voi olla pilkulla eroteltu lista. Sets the default keyboard type. Määrittää oletusnäppäimistön. Sets the user's home directory. Määrittää käyttäjän kotihakemiston. Enables or disables overwriting the current keyboard settings. Sallii tai estää nykyisten näppäimistöasetusten muuttamisen. Automatically launches the application(s) "app", "app2", ... on session start in Published Applications mode. Käynnistää automaattisesti sovellukset "app", "app2", ... kun istunto käynnistyy Published Application tilassa. Defines an alternative session config file path. Määrittää vaihtoehtoisen polun isunnon asetustietoihin. Force-enables session system tray icon. Pakottaa systeemilokeron käyttöön. Automatically closes X2Go Client after a disconnect. Sulkee automaattisesti X2Go Clientin yhteyden katketessa. Hides all Folder-Sharing-related options. Piilottaa kaikki Folder Sharingiin liittyvät valinnat. Sets the broker name to display in X2Go Client. This parameter is optional. Asetta brokernimen näkyuväksi X2Go Clientiin. Tämä ohjain on valinnainen. Sets the path to an SSH key to use for authentication against an SSH session broker. The client's behavior is undefined if this flag is used for non-SSH session brokers. Määrittää SSH avaimen hakemistopolun jota käytetään kun autentikoidutaan SSH brokeriin. Etätyöaseman käyttäytyminen jää avoimeksi jos tätä asetusta käytetään non-SSH istuntobrokerissa. Enables the use of the default SSH key or SSH agent for authentication against an SSH session broker. The client's behavior is undefined if this flag is used for non-SSH session brokers. Mahdollistaa oletus SSH avaimen tai SSH agentin käytön kun autentikoidutann SSH session brokeriin. Työaseman käyttäytyminen on määrittelemätön jos tätä käytetään non SSH session brokerissa. Does not ask for user credentials during session broker authentication. This can be useful if you are using an HTTP(S) session broker without authentication. If you run an HTTP(S) server without authentication, but with user-specific profiles, then put the user name into the broker URL (refer to --broker-url.) The user name then will be extracted from the broker URL and be sent to the session broker. The client's behavior is undefined if this flag is used for non-HTTP(S) session brokers. Tunnistustietoja ei kysytä session brokerin autentikoinnissa. Tämä voi olla tarpeen jos käytät HTTP(S) session brokeria ilma autentikointia. Jos käytät HTTP(S) palvelinta ilman autentikointia, mutta kuitenkin käyttäjäkohtaisilla profiileilla, lisää käyttäjätunnus brokerin URL-iin (kts --broke-url.) Käyttäjätunnus ottaa sen jälkeen käyttäjätunnuksen broker URL-stä ja se lähetetään session brokerille. Etätyöaseman käyttäytyminen on määrittelemätön jos tätä asetusta käytetään ei-HTTP(S) session brokerissa. Use broker credentials as session user/password credentials when using broker mode with broker authentication. Currently only affects direct RDP sessions. Käytä brokerin tunnus/salasana-tunnistautumistietoja kun olet broker-moodissa.Käytössä vain RDP istunnoissa. Enables broker logout button. Aktivoi brokerin uloskirjautuminen. Use a custom/branded background image (SVG format) for X2Go Client's main window. If a directory is given, will randomly pick an SVG file inside of it. Käytä räätälöitya taustakuvaa (SVG) X2Go-clientissä. Jos hakemisto annettu, käytetään satunnaisesti löydettyä kuvaa sen sijasta. Use a custom icon (SVG format) for additional branding to replace the default in the lower left corner of X2Go Client's main window. Käytä omaa ikonia (SVG) oletuksen sijasta X2Go-clientin ikkunaan alakulmassa. Disables X2Go Client's UNIX cleanup helper. This will prevent X2Go Client from terminating spawned processes after the main program terminates or crashes. Use with care and when in doubt, do not use this parameter at all. HelpDialog Options Vaihtoehdot HttpBrokerClient Host key for server changed. It is now: tarkista Palvelimen avain vaihtui. Se on nyt: For security reasons, connection will be stopped Turvallisuussyistä, yhteys katkaistaan The host key for this server was not found but an othertype of key exists.An attacker might change the default server key toconfuse your client into thinking the key does not exist Palvelimen avainta ei löytynyt mutta vaihtoehtoinen avain löytyi. Tunkeutuja on ehkä vaihtanut oletusavaimen harhauttaakseen etäkäyttäjää luulemaan että avainta ei ole Could not find known host file.If you accept the host key here, the file will be automatically created Tunnetut työasemat sisältävää tiedostoa ei löytynyt. Jos hyväksyt palvelimen avaimen, tiedosto tehdäään automaattisesti The server is unknown. Do you trust the host key? Public key hash: Palvelin on tuntematon. Luotatko sen avaimeen? Julkinen avain: Host key verification failed Palvelimen avaimen todennus epäonnistui Yes Kyllä No Ei Verification code: Tarkistuskoodi: Enter passphrase to decrypt a key Anna avaimen salasana Authentication failed Autentikointi epäonnistui Error Virhe Login failed!<br>Please try again Kirjautuminen epäonnistui!<br>Yritä uudelleen <br><b>Server uses an invalid security certificate.</b><br><br> <br><b>Palvelimen sertifikaatti ei ole kunnossa.</b><br><br> <p style='background:#FFFFDC;'>You should not add an exception if you are using an internet connection that you do not trust completely or if you are not used to seeing a warning for this server.</p> <p style='background:#FFFFDC;'>Älä anna poikkeuslupaa jos käytät yhteyttä johon et täysin luota tai palvelin ei ole aiemmin antanut samaa virheilmoitusta.</p> Secure connection failed Turvallisen yhteyden avaus epäonnistui For security reasons, the connection attempt will be aborted. Turvallisuuden takia, yhteyden avaus keskeytetään. The host key for this server was not found but another type of key exists. An attacker might have changed the default server key to trick your client into thinking the key does not exist yet. Palvelimen tunnistusavainta ei löydy mutta toisenlainen löytyy. Hyökkääjä on ehkä vaihtanut oletusavaimen uskotallakseen asiakasohjelmallesi että avainta ei vielä ole. Could not find known hosts file. If you accept the host key here, the file will be automatically created. Tunnettujen palvelinten nimitiedostoa ei löydy.Jos hyväksyt palvelimen tunnistusavaimen, nimitiedosto luodaan automaattisesti. Host key verification failed. Palvelimen avaimen tarkistus epäonnistui. Enter user account password: Anna käyttäjän salasana: Authentication failed. Tunnistautuminen epäonnistui. Login failed!<br>Please try again. Kirjatuminen epäonnistui!<br>Yritä uudelleen. Secure connection failed. Suojatun yhteyden avaus epäonnistui. Issued to: Annettu: Common Name(CN) Common Name(CN) Organization(O) Organisaatio(O) Organizational Unit(OU) Organisaatioyksikkö(OU)) Serial Number Sarjanumero Issued by: Myöntäjä: Validity: Voimassaolo: Issued on Myöntöpäivä expires on vanhenee Fingerprints: Tiivisteet: SHA1 SHA1 MD5 MD5 Exit X2Go Client Sulje X2Go-ohjelma Add exception Lisää poikkeus InteractionDialog Terminal output: Tulostus päättelle: Cancel Peruuta Reconnect Uusi yhteys MediaWidget Sound Ääni Enable sound support Aseta ääni pälle Start sound daemon Käynnistä ääniajuri Use running sound daemon Käytä nykyistä ääniajuria Use SSH port forwarding to tunnel sound system connections through firewalls Käytä SSH-portin tunnelointia äänen saamiseksi palomuurin läpi Use default sound port Käytä oletus-aääniporttia Sound port: Ääniportti: Client side printing support Asiakasohjelman tulostintuki Deprecation Warning Poistuu käytöstä - varoitus ARTS support is scheduled to be removed soon. Please upgrade to PulseAudio. ARTS tuki poistuu pian. Päivitä PulseAudioon. ESounD support is scheduled to be removed soon. Please upgrade to PulseAudio. ESounD tuki poistuu pian. Päivitä PulseAudioon. ONMainWindow Starting x2goclient... Käynnistää x2go-asiakasohjelman... us fi pc105/us pc105/us X2Go Client X2Go asiakasohjelma connecting yhdistää Internet browser Web-selain Email client Sähköpostiohjelma OpenOffice.org OpenOffice.org Terminal Pääte Starting x2goclient in portable mode... data directory is: Käynnistää x2go-asiakasohjelman mobiiliversion...datakansio on: &Settings ... &Asetukset... Support ... Neuvonta... About X2GO client Tietoja X2Go-asiakasohjelmasta Started x2goclient. Käynnistetty x2go-asiakasohjelma Can't load translator: Kääntäjän käynnistys ei onnistu: Translator: Kääntäjä: installed. asennettu. Share folder... Jaa kansio... Applications... Sovellukset... Suspend Pysäytä Terminate Lopeta Reconnect Uusi yhteys Detach X2Go window Siirrä X2Go-ikkunaa Minimize toolbar Minimoi toimintopalkki Session: Istunto: &Quit &Lopeta Ctrl+Q Ctrl+Q Quit Lopeta &New session ... &Uusi istunto... Ctrl+N Ctrl+N Session management... Istunnon hallinta... Ctrl+E Ctrl+E &Create session icon on desktop... &Tee istuntokuvake työpöydälle &Set broker password... &Aseta brokerin salasana... &Connectivity test... &Yhteystesti... Show toolbar Näytä toimintopalkki About Qt Tietoja Qt:stä Ctrl+Q exit Ctrl+Q Starting X2Go Client %1... X2Go-yhteysohjelma %1 käynnistyy... Starting X2Go Client in portable mode. Data directory is: X2Go-yhteysohjelma käynnistyy siirrettävässä moodissa. Datahakemisto on: About X2Go Client Tietoja X2Go-yhteysohjelmasta Started X2Go Client. X2Go-ohjelma käynnistyi. found. löytyi. English language requested, not loading translator. English language requested, not loading translator. Non-fatal: can't load translator: Ei vakavaa: kielenvaihtaja ei käynnisty: Trying to load language with lower preference, if existent. Yrittää käynnistää toissijaisen kielen tiedostot, jos saatavilla. Session management ... Istunnon hallinta ... &Create session icon on desktop ... &Luo istuntokuvake työpöydälle ... &Set broker password ... &Aseta istuntohallinnan salasana ... &Connectivity test ... &Yhteystesti ... &Session &Istunto &Options &Valinnat &Help &Apua Login: Kirjaudu: Error Virhe Operation failed Toiminto epäonnistui Password changed Salasana vaihdettu Wrong password! Väärä salasana! Connecting to broker Yhdistää brokeriin <b>Authentication</b> <b>Autentikointi</b> Restore Palauta Not connected Ei yhteyttä Multimedia Ääni ja video Development Ohjelmakehitys Education Ohjeet Game Peli Graphics Grafiikka Network Verkko Office Toimisto Settings Asetukset System Järjestelmä Utility Työkalu Other Muuta Share folder ... Jaa kansio ... A click displays the context menu. A left click hides or restores the window. A right click displays the context menu. Vasen klikkaus piilottaa tai palauttaa ikkunan. Oikea klikkaus näyttää toimintovalikon. Closing X2Go Client ... Suljetaan X2Go-asiakasohjelma ... Finished X2Go Client closing hooks. X2Go yhteysohjelman sulkeminen valmis. Broker authentication failed! Istuntohallinnan tunnistautuminen epäonnistui! no X2Go Server found in LDAP X2Go-palvelinta ei löydy LDAP-rekisteristä Connection error: Yhteydenottovirhe: Couldn't find an SSH connection. SSH-yhteyttä ei löytynyt. Enter user account password: Anna käyttäjän salasana: This can be an indication of a man-in-the-middle attack. Somebody might be eavesdropping on you. For security reasons, it is recommended to stop the connection attempt. Do you want to terminate the connection? Tämä saattaa olla osoitus man-in-the-middle-hyökkäyksestä. Joku saattaa salakuunnella sinua. Turvallisuuden takia on suositeltavaa että lopetat yhteydenoton. Halutako katkaista yhteyden? Host key verification failed. Palvelimen avaimen tarkistus epäonnistui. The host key for this server was not found but another type of key exists. An attacker might have changed the default server key to trick your client into thinking the key does not exist yet. For security reasons, it is recommended to stop the connection attempt. Do you want to terminate the connection? Tämän palvelimen tunnistusavainta ei löydy tai se on toisen tyyppinen. Hyökkääjä on saattanut palvelimen avaimen uskotellekseen että palvelimen avainta ei ole vielä asetettu työasemaasi. Turvallisuussyistä on suositeltavaa että keskeytät kirjautumisen. Halutako keskeyttää? Could not find known hosts file. If you accept the host key here, the file will be automatically created. Tunnettujen palvelinten sijaintitiedostoa ei löydy.Jos hyväksyt palvelimen tunnistusavaimen, puuttuva tiedosto perustetaan automaattisesti. Authentication failed. Autentkointi epäonnistui. XDM XDM RDP RDP <b>Connection failed.</b> <b>Yhteys katksesi.</b> No server available. Palvelinta ei löydy. Server not available. Palvelimeen ei pääse. X2GoKDrive session No accessible desktop found. Toimivaa työpöytää ei löydy. Your current color depth is different from the session's color depth. This may cause problems reconnecting to this session and in most cases <b>you will lose the session</b> and have to start a new one! Värikartta poikkaa istunnon kartasta. Se voi aiheuttaa ongellmia ja useimmiten <b>istunto katkeaa</b> ja joudut aloittamaan alusta! Failed to start RDP or XDMCP client RDP tai XDMCP-clientin käynnistys epäonnistui Your current color depth is different from the session's color depth. This may cause problems reconnecting to this session and in most cases <b>you will loose the session</b> and have to start a new one! It's highly recommended to change the color depth of your display to Työasemasi näytön väripaletti on eri kuin istunnon paletti. Tästä voi aiheutua ongelmia istunnon aikana ja useimmiten <b>istuntosi katoaa</b> ja joudut käynnistämään uuden! On erittäin suotavaa että vaihdat näyttösi väripaletin arvoon bits and restart your X.Org Server before you reconnect to this X2Go session.<br />Do you want to resume this session anyway? bittiä ja käynnistät X.Org-ohjelman ennenkuin yhdistät uudelleen tähän X2Go istuntoon.<br />Haluatko kuitenkin jatkaa tätä istuntoa? Your current color depth is different from the session's color depth. This may cause problems reconnecting to this session and in most cases <b>you will loose the session</b> and have to start a new one! Värikartta poikkaa istunnon kartasta. Se voi aiheuttaa ongellmia ja useimmiten <b>istunto katkeaa</b> ja joudut aloittamaan alusta! It's highly recommended to change the color depth of your display to %n bit(s) and restart your X.Org Server before you reconnect to this X2Go session. %n will be replaced with a number Vaihda värikartta näytölläsi %n bittiseksi ja käynnistä X.Org server uudelleen ennenkuin käynnistät uudelleen X2Go-istunnon. Vaihda värikartta näytölläsi %n bittiseksi ja käynnistä X.Org server uudelleen ennenkuin käynnistät uudelleen X2Go-istunnon. <br />Do you want to resume this session anyway? <br />Haluatko kuitenkin jatkaa tätä istunoa? PulseAudio is not running PulseAudio ei ole käynnissä Sound output will be disabled for this session. Please enable PulseAudio in the configuration dialog or disable sound in the session settings Mikrofonin on pois käytöstä tässä istunnossa. Voit käynnistää PulseAudion asetusvalikossa tai mykistää mikrofonin Unable to create SSH tunnel for X2Go session (NX) startup: SSH-tunnelin avaus epäonnistui X2Go istuntoa varten / (NX) startup: Unable to create SSH tunnel for audio data: SSH-tunnelin avaus audiodataa varten epäonnistui: failed to start. ei käynnistynyt. This likely means the binary is not available. The current search path is: Johtuu ilmeisesti siitä että ohjelma ei ole käytettävissä. Nykyinen hakupolku on: returned a non-zero exit code or crashed otherwise. palautti nollasta poikkeavan paluukoodin tai kaatui jotenkin muuten. Execution failed, exit code was: Suoritus epäonnistui, paluukoodi oli: didn't start up in time. ei käynnistynyt ajoissa. This error shouldn't come up. Tätä virhettä ei pitäsi tapahtua. didn't accept a write operation. kirjoittaminen oli estetty. It is probably not running correctly or crashed in-between. Joke ei toimi oikein tai kaatui aiemmin. Unable to read from xmodmap. Ei pysty lukemaan xmodmap-ista. encountered an unknown error during start up or execution. tunnistamaton virhe käynnistymisen tai suorituksen aikana. experienced an undefined error. tunnistamaton virhe. X2Go Client will now terminate. File a bug report as outlined on the <a href="http://wiki.x2go.org/doku.php/wiki:bugs">bugs wiki page</a>. X2Go-asiakasohjelma keskeytyy nyt. Lähetä virheraportti kuten ohjeistettu sivulla <a href="http://wiki.x2go.org/doku.php/wiki:bugs">bugs wiki page</a>. Failed to start RDP or XMDCP client RDP tai XMDCP-clientin käynnistys epäonnistui Check session settings and ensure that selected client is installed on your system. Tarkista istunnon asetukset ja varmista että client-ohjelma on asennettu työasemaasi. Proxy didn't terminate after 3 seconds. Killing the proxy. Välityspalvelin ei sulkeutunut kolmessa sekunnissa. Se tapetaan. Closing X2Go Client because it was started in hidden mode. Suljetaan X2Go-asiakasohjelma koska oli käynnistetty piilomoodissa. Closing X2Go Client because the --close-disconnect parameter was passed. X2Go-asiakasohjelma suljetaan koska --close-disconnect parametri oli annettu. Are you sure you want to terminate this session? Unsaved documents will be lost. Haluatko varmati sulkea tämän istunnon? Tallentamattomat tiedot katoavat. <b>Connection failed.</b> : <b>Yhteydenluonti epäonnistui.</b> : (file does not exist) (tiedostoa ei ole) (directory does not exist) (polkua ei ole) Invalid value for parameter "--link". Virheellinen arvo ohjaimella "--link". Invalid value for parameter "--clipboard". Virheellinen arvo ohjaimella "--clipboard". Invalid value for parameter "--sound". Virheellinen arvo ohjaimella "--sound". Invalid value for parameter "--geometry". Virheellien arvo ohjaimella "--geometry". Invalid value for parameter "--set-kbd". Virheellinen arvo ohjaimella "--set-kbd". Invalid value for parameter "--ldap". Virheellinen arvo ohjaimella "--ldap". Invalid value for parameter "--ldap1". Virheellinen arvo ohjaimella "--ldap1". Invalid value for parameter "--ldap2". Virheellinen arvo ohjaimella "--ldap2". Invalid value for parameter "--pack". Virheellinen arvo ohjaimella "--pack". <br>(C) 2005-2023 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> Translators, feel free to add a localized version of your translation including a copyright notice and your name(s). Remember to keep a <br> at the end, though. English example for a potential translation: <br>(C) 2005-2023 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br>English version: (C) 20AB-20CD Trans Lator <trans@la.tor><br> <br>(C) 2005-2023 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> Suomenkielinen versio: Martti Pitkänen, martti@aplcomp.fi<br> Check whether the package providing "pcsc_scan" is installed. The current search path is: Tarkista onko paketti joka sisältää ohjelman "pcsc_scan" asennettu. Hakupolku on: Unable to create or append to file: Ei pysty luomaan eikä lisäämäään tiedostoon: Unable to change the permissions of file: Tiedoston käyttöoikeuksien muutos ei onnistu: This is an error because sshd would deny such a file. Tämä on virhe koska sshd kieltäisi tällaisen tiedoston. Unable to change the permissions of directory: Hakemiston oikeuksien muutos ei onnistu: This is an error because sshd would deny such a directory. Tämä on virhe koska sshd kieltäisi tällaisen hakemiston. Can't start X.Org Server. X.Org-palvelin ei käynnisty. Please check your installation. Tarkista asennus. X.Org Server did not launch correctly after %n tries. %n will be substituted with the current number of tries X.Org-palvelin ei käynnistynyt oikein %n yrityksen jälkeen. X.Org-palvelin ei käynnistynyt oikein %n yrityksen jälkeen. Unable to find the sftp-server binary. Neither bundled, nor found in $PATH nor additional directories. Sftp palvelinohjelmaa ei löydy. Ei sisäänrakennettua versiota, eikä löydy $PATH muuttujan avullakaan. If you are using a Linux-based operating system, please ask your system administrator to install the package containing the sftp-server binary. Common names are <b>openssh</b>, <b>openssh-server</b> or <b>openssh-sftp-server</b> depending upon distribution. If the sftp-server binary is installed on your system, please report a bug mentioning its path on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Jos käytä Linux käytöjäjestelmää, pyydä tukihenkilöä asentamaan sftp palvelin. Yleisiä nimiä ovat <b>openssh</b>, <b>openssh-server</b> tai <b>openssh-sftp-server</b> riippuen distrosta. Jos sftp-server on asennettu järjestelmääsi, raportoi virheestä ja ilmoita myös sen polku: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> SSH key type selection error SSH avaintyypin valintavirhe Unknown SSH key selected. Tunnistamanton SSH avain valittu. Terminating application. Sovellus suljetaan. SSH key base directory creation error SSH-avaimen kotihakemistoa ei pystytty luomaan Unable to create SSH key base directory '%1'. Ei pystytty luomaan SSH avaimen kotihakemistoa '%1'. ssh-keygen launching error ssh-keygen ei käynnisty Unable to start the ssh-keygen binary. Ei pystytty käynnistämään ssh-keygen ohjelmaa. ssh-keygen crashed ssk-keygen kaatui The ssh-keygen binary crashed. ssh-keygen ohjelma kaatui. ssh-keygen program error ssh-keygen ohjelmassa oli virhe The ssh-keygen binary did not exit cleanly. ssh-keygen ohjelma ei sulkeutunut oikein. It was probably called with unknown arguments. Sitä oli mahdollsesti käytetty väärillä argumenteilla. Unable to open newly generated %1 public host key file. Ei pysty avaamaan juuri generoitua %1 public host key tiedostoa. %1 public host key file empty. %1 public host key tiedosto on tyhjä. You have enabled Remote Printing or File Sharing. These features require a running and functioning SSH server on your computer. <b>Printing and File Sharing will be disabled for this session.</b> Olet aktivoinut etätulostuksen tai tiedostojaon. Nämä toiminnot vaativat että työasemassasi on käynnissä SSH server. <b>Printing and File Sharing ovat pois käytössä tässä istunnnossa.</b> Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server. If you see this message, please report a bug on: Normaalisti tätä ei tapahdu koska X2Go Client for Windows sisältää SSH serverin. Jos näet tämän iilmoituksen, ilmoita virheestä: The SSH server failed to start. Please report a bug on: The SSH server ei käynnistyntyt. Ilmoita virheestä: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server and automatically generates the required keys. If you see this message, please report a bug on: Normaalista tätä ei tapahdu koska X2Go Client for Windows sisältää SSH serverin ja se luo automaattisesti tarvittavat avaimet. Jos näet tämän viestin ilmoita virheestä: X2Go Client was unable to create SSH host keys. Please report a bug on: X2Go Client ei pysytynyt luomaan SSH host key-faileja. Ilmoita virheesta: SSH daemon failed to open the application's authorized_keys file. SSH prosessi ei pystynyt avaamaan sovelluksen authorized_keys-tiedostoa. libssh initialization failure libssh käynistys epäonnistui Unable to initialize libssh. Libssh ei käynnisty. Left mouse button to hide/restore - Right mouse button to display context menu Vasen hiiren näppäin piilottaa/palauttaa - Oikea näppäin näyttää toiminnon valinnat Closing x2goclient... Sulkee x2go -asiakasohjelman... Closed x2goclient. X2Go-asiakasohjelman sulkeutui. Please check LDAP settings Tarkista LDAP-asetukset no X2Go server found in LDAP X2Go -palvelinta ei löydy LDAP-sta Create session icon on desktop Tee instuntokuvake työpöydälle Desktop icons can be configured not to show x2goclient (hidden mode). If you like to use this feature you'll need to configure login by a gpg key or gpg smart card. Use x2goclient hidden mode? Työpöytäkuvakkeet voidaan asettaa piilottamaan x2go -asiakasohjelman (hidden mode). Jos haluat käyttää ominaisuutta määritä kirjautuminen käyttämään gpg-avainta tai gpg -toimikorttia. Käytätkö x2go-asiakasohjelmaa piilotettuna? New Session Uusi istunto X2Go Link to session Linkki X2Go -istuntoon No X2Go sessions found, closing. X2Go-istuntoa ei löytynyt, sulkeutuu. Are you sure you want to delete this session? Haluatko varmasti poistaa tämän istunnon? KDE KDE RDP connection RDP-yhteys XDMCP XDMCP Connection to local desktop Yhteys paikalliselle näytölle on käyttäen Starting connection to server: Käynnistää yhteyden palvelimeen: to kohteeseen Connection Error( Yhteysvirhe( Couldn't find a SSH connection. Ei löydä SSH-yhteyttä. Enter passphrase to decrypt a key Anna avaimen salasana Host key for server changed. It is now: Palvelimen avain vaihtui. Se on nyt: For security reasons, connection will be stopped Turvallisuussyistä, yhteys päättyy The host key for this server was not found but an othertype of key exists.An attacker might change the default server key toconfuse your client into thinking the key does not exist Tämän palvelimen julkinen avain puuttuu mutta toinen löytyi.Tunketuja on ehkä vaihtanut aiemman avaimen harhauttaakseen sinut luulemaan että avainta ei ole Could not find known host file.If you accept the host key here, the file will be automatically created Tunnettut työasemat sisältävää tiedostoa ei ole. Jos hyväksyt yhteyden, kyseinen tiedosto luodaan The server is unknown. Do you trust the host key? Public key hash: Palvelin on tuntematon. Luotatko sen avaimeen? Avaimen tiiviste: Host key verification failed Palvelimen avaimen todennus epäonnistui Show session tray icon when running Näytä istunon ikoni kun se on aktiivinen Verification code: Tarkistenumero: This can be an indication of a man-in-the-middle attack. Somebody might be eavesdropping on you. For security reasons, it is recommended to stop the connection. Do you want to terminate the connection? Joku saattaa kuunnella verkkoa. Turvallisuuden takia on syytä katkaista yhteys. Halutko katkaista? Yes Kyllä No Ei If you accept the new host key the security of your connection may be compromised. Do you want to update the host key? Jos hyväksyt uuden palvelinavaimen yhteytesti turvallisuus saattaa vaarantua. Halutko hyväksyä uuden palvelinavaimen? The host key for this server was not found but an othertype of key exists. An attacker might change the default server key to confuse your client into thinking the key does not exist. For security reasons, it is recommended to stop the connection. Do you want to terminate the connection? Tämän palvelimen avainta ei löydy mutta toinen avain löytyi. Tunkeutuja saattaa vaihtaa palvelimen oletusavaimen uskotellakseen että palvelinavainta ei ole. Turvallisuuden takia on syytä katkaista yhteys. Haluatko katkaista? Authentication failed: Autentikointi epäonnistui: Authentication failed Autentikointi epäonnistui Enter password for SSH proxy Anna salasana SSH-proxya varten <b>Connection failed</b> <b>Yhteydenotto epäonnistui</b> <b>Wrong password!</b><br><br> <b>Väärä salasana!</b><br><br> Connection failed: Yhteys epäonnistui: - Wrong password. - Väärä salasana. unknown tuntematon No server availabel Typo in original Palvelinta ei saatavilla Server not availabel Typo Palvelinta ei saatavilla Select session: Valitse istunto: running käynnissä suspended pysäytetty Desktop Työpöytä single application erillinen sovellus shadow session varjoistunto Information Tietoja No accessible desktop found Työpöytää ei ole käytettävissä Filter Valinta Select desktop: Valitse työpöytä: Warning Varoitus Your current color depth is different to the color depth of your x2go-session. This may cause problems reconnecting to this session and in most cases <b>you will loose the session</b> and have to start a new one! It's highly recommended to change the color depth of your Display to Käyttämäsi värierottelu on erilainen kuin x2go-istunnon vastaava. Se saattaa aiheuttaa ongelmia kun kun yhdistät uudelleen tähän istuntoon ja useimmiten <b>istunto katoaa</b> ja joudut avaamaan uuden! On erittäin suositeltavaa että muutat värierottelun omalla näytölläsi arvoon 24 or 32 25 tai 32 bit and restart your X-server before you reconnect to this x2go-session.<br>Resume this session anyway? bittiä ja käynnistä X-palvelin uudelleen ennenkuin avaat tämän x2go-istunnon.<br>Jatka istuntoa joka tapauksessa? suspending pysäyttää terminating lopettaa <b>Wrong Password!</b><br><br> <b>Väärä salasana!</b><br><br> New session started Uusi istunto käynnistyi Session resumed Istuntoa jatkettu Unable to create folder: Kansion luonti ei onnistu: Unable to write file: Tiedostoon kirjoitus ei onnistu: Attach X2Go window Kytkeydy X2Go-ikkunaan Unable to create SSL tunnel: SSL -tunnelointi ei onnistu Unable to create SSL Tunnel: SSL-tunnelin avaus ei onnistu: Emergency exit. Hätäkeskeytys. Waiting for proxy to exit. Odottaa välityspalvelimen sulkeutumista. Failed, killing the proxy. Epäonnistui, sulkee proxyn Finished Lopetettu starting käynnistyy resuming jatkaa Connection timeout, aborting Yhteys aikakatkaistu, keskeytyy aborting keskeytyy Are you sure you want to terminate this session? Unsaved documents will be lost Haluatko varmasti sulkea istunnon? Avoimet tiedostot eivät talletu Session Istunto Display Näyttö Creation time Luontiaika <b>Connection failed</b> : <b>Yhteys epäonnistui<b> : (can't open file) (tiedosto ei aukea) (file not exists) (tiedosto puuttuu) (directory not exists) (kansio puuttuu) wrong value for argument"--link" Ohjaimella"--link" on väärä arvo wrong value for argument"--clipboard" väärä arvo ohjaimessa"--clipboard" wrong value for argument"--sound" Ohjaimella "--sound" on väärä arvo wrong value for argument"--geometry" Ohjaimella "--geometry" on väärä arvo wrong value for argument"--set-kbd" Ohjaimella "--set-kbd" on väärä arvo wrong value for argument"--ldap" Ohjaimella "--ldap" on väärä arvo wrong value for argument"--ldap1" Ohjaimella "--ldap1" on väärä arvo wrong value for argument"--ldap2" Ohjaimella "--ldap2" on väärä arvo wrong value for argument"--pack" Ohjaimella "--pack" on väärä arvo Wrong parameter: Väärä parametri: Help Ohjeet Available pack methods: Valitavissa on nämä pakkausmenetelmät: Pack Methods Pakkausmenetelmät Option is not available in this build. Vaihtoehtoa ei ole tässä versiossa. Unable to create directory: Hakemiston luonti ei onnistu: Cannot open key: Avaimen haku ei onnistu: <br>(C) 2005-2016 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> <br>(C) 2005-2016 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> Suomenkielinen versio: Martti Pitkänen, martti@aplcomp.fi<br> <br>X2Go Plugin mode was sponsored by <a href="http://www.foss-group.de/">FOSS-Group GmbH (Freiburg)</a><br> <br>X2Go Plugin moodin sponsori <a href="http://www.foss-group.de/">FOSS-Group GmbH (Freiburg)</a><br> <br>This is a client to access the X2Go network-based computing environment. This client will be able to connect to X2Go Server(s) and start, stop, resume and terminate (running) desktop sessions. X2Go Client stores different server connections and may automatically request authentication data from LDAP directories. Furthermore, it can be used as a fullscreen login screen (replacement for login managers like XDM). Please visit <a href="http://www.x2go.org">the project home page at x2go.org</a> for further information. <br>Täällä asiakasohjelmalla voidaan kirjautua X2Go-palvelimeen ja käynnistää, pysäytää, jatkaa ja lopettaa etätyöpöytä-istuntoja. X2Go-ohjelma tallettaa kaikki yhteysasetukset ja se voi automaattisesti hakea tiedot autentikointia varten LDAP-hakemistoista. Lisäksi sitä voidaan käyttää kokotuutu-pohjaisen kirjautumisnäyttönä (korvaten login-managerin kuten esim. XDM). Sivulta <a href="http://www.x2go.org">x2go.org-projektin kotisivu</a> löytyy lisätietoja. <b>X2Go Client v. <b>X2Go-asiakasohjelma v. Please check LDAP Settings. Tarkisa LDAP-asetukset. Check whether the package providing "scdaemon" is installed. The current search path is: Tarkista onko paketti joka sisältää ohjelman "scdaemon" asennettu. Hakupolku on: didn't start yet. ei käynnistynyt vielä. Unable to read from scdaemon. Ei vastausta ohjelmasta scdaemon. No valid card found. Toimivaa kortta ei löytynyt. This card is unknown to the X2Go system. Tämä kortti ei toimi X2Go-järjestelmässä. Can't start X.Org Server. Please check your installation. X.Org-palvelin ei käynnisty. Tarkista installointi. Remote server does not support file system exports through SSH tunnels. Please update your x2goserver package. Etäpalvelin ei tue SSH-tunneloinnin kautta tapahtuvaa levyjakoa. Päivitä x2goserver paketti. Unable to create SSH tunnel for Folder Sharing and Printing support: SSH-tunnelin luonti levyjakoa ja tulostusta varten ei onnistu: Unable to read: Luku ei onnistu: Unable to write: Kirjoitus ei onnistu: Error getting window geometry. (Did you close the window?) Näytön geometrian luku ei onnistu. (Suljitko ikkunan?) Invalid value for argument "speed" Virheellinen arvo ohjaimella "speed" Applications ... Sovellukset ... SSH daemon could not be started. SSH prosessi ei käynnistynyt. SSH daemon is not running. SSH prosessia ei löydy. You have enabled Remote Printing or File Sharing. These features require a running and functioning SSH server on your computer. <b>Printing and File Sharing will be disabled for this session.</b> Please also check the <b>Clientside SSH port</b> in the general settings. Olet aktivoinut etätulostuksen ja tiedostojaon. Nämä toiminnot edellyttävät että palvelimessasi on toiminnassa SSH-palvelin. <b>Tulostus ja leyvjako ovat pois päältä tässä istunnossa.</b> Tarkista myös <b>Asiakakasohjelman SSH-portti</b> yleisistä asetuksista. Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server. If you see this message, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Normaalisti tätä ei tapahtuisi koska "X2Go Client for Windows" sisältää SSH-palvelimen. Jos näet tämän ilmoituksen, lähetä virheraportti tältä sivulta: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> The SSH server failed to start. SSH-palvelin ei käynnistynyt. X2Go Client did not detect a globally running SSH server on your machine and was unable to start its own. Please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> X2Go-asiakasohjelma ei tunnistanut SSH-palvelinta työasemastasi eikä voinut käynnistää omaansa. Lähetä virheraportti käyttäen: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> The SSH server is currently not started. SSH-palvelinta ei ole käynnistetty. On OS X, please follow the following steps to enable SSH service:<ul><li>Open <b>System Preferences</b> (Applications -> System Preferences)</li><li>Go to <b>Sharing</b></li><li>Tick the checkbox besides <b>Remote Login</b></li><li>Check that <b>Allow access for:</b> is set to either:<ul><li>All users: <b>no further steps necessary</b></li><li>Only these users <b>and your user name is included in the list</b></li></ul><li>Optionally, add your user name to the allowed list via the <b>Plus Button</b></li></ul><b>Warning: enabling SSH access will allow any user on the network to connect to your machine. It is your responsibility to set a strong password for every user that is allowed to log in via SSH.</b> OS X, seuraa näitä ohjeita käynnistääksesin SSH-palvelun:<ul><li>Avaa <b>Järjestelmän oletukset</b> (Sovellukset -> Järjestelmän oletukset)</li><li>Mene <b>Jakaminen</b></li><li>Valitse checkbox <b>Remote Login</b></li><li>Tarkista että <b>Salli:</b> on joko asetettu:<ul><li>Kaikki käyttäjät: <b>muuta ei tarvita</b></li><li>Vain nämä käyttäjät <b>ja käyttäjätunnuksesi on listassa</b></li></ul><li>Vaihtoehtoisesti, lisää käyttäjätunnuksesi sallittujen listaan käyttäen <b>Plus-nappulaa</b></li></ul><b>Varoitus: jos aktivoit SSH-yhteyden niin kuka tahansa voi kytkeytyä koneeseesi verkosta. Sinun on huolehdittava salasanan vahvuudesta jokaiselle käyttäjälle jolla on kirjautumismahdollisuus SSH-yhteyttä käyttäen.</b> Please ask your system administrator to provide the SSH service on your computer. Pyydä IT-asiantuntija asentamaan SSH-palvelin koneeseesi. Disabling Remote Printing or File Sharing support in the session settings will get rid of this message. Jos poistat etätulostuksen tai levyjaon istunnon asetuksista pääset eroon tästä ilmoituksesta. SSH daemon failed to open its public host key. SSH-prosessi ei pystynyt lukemaan omaa julkista avaintaan. You have enabled Remote Printing or File Sharing. These features require a running and functioning SSH server on your computer. <b>Printing and File Sharing will be disabled for this session.</b> The SSH server is currently not configured correctly. Please ensure that the server's public exists. Olet aktivoinut etätulostuksen tai levyjaon. Nämä edellyttävät että koneessasi on toimivaa SSH-palvelin <b>Tulostus ja levyjako eivät ole käytettävissä tässä istunnossa.</b> SSH-palvelinta ei ole asennettu oikein. Varmista että palvelimen julkinen avain on olemassa. Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server and automatically generates the required keys. If you see this message, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Normaalisti tätä ei tapahdu koska "X2Go Client for Windows" sisältää oman sisäisen SSH-palvelimen ja se generoi automaattisesti tarvittavat avaimet. Jos näet tämän ilmoituksen, ilmoita virhe käyttäen sivua: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> X2Go Client was unable to create SSH host keys. Please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> X2Go-asiakasohjelma ei pystynyt luomaan SSH-avaimia. Ilmoita virheestä käyttäen sivua: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> On OS X, please follow these steps to generate the required keys:<ul><li>Open a <b>Terminal Window</b> (Applications -> Utilities -> Terminal)</li><li>Run this command: <b>ssh -p OS X, generoi tarvittavat avaimet näin:<ul><li>Avaa <b>Terminal Window</b> (Sovellukset -> Apuohjelmat -> Terminal)</li><li>Käynnistä komento: <b>ssh -p Please ask your system administrator to generate the required host keys. If you are administrating this system yourself, please run: <center><b>sudo ssh-keygen -A</b></center> Pyydä IT-asiantuntijaa generoimaan tarvittavat avaimet. Voit tehdä sen itse komennolla: <center><b>sudo ssh-keygen -A</b></center> SSH Error SSH-virhe SSH daemon could not be started. You'll need SSH daemon for printing and file sharing. Normally, this should not happen as X2Go Client for Windows ships its internal sshd.exe. If you see this message, please report a bug against the X2Go bugtracker. SSH -palvelu ei käynnistynyt. Tarvitse SSH -palvelua tulostamiseen ja tiedostojen yhteiskäyttöön. Normaalista, näin ei pitäsi tapahtu koska X2Go pääteohjelma Windowsille sisältää oman sshd.exe -ohjelman. Jos näet tämä viestin, ilmoita virheestä X2Go -ohjelman virheseurantaan. SSH daemon is not running. You'll need SSH daemon for printing and file sharing Please ask your system administrator to provide the SSH service on your computer. SSH -palvleu ei ole käynnissä. Tarvitsen SSH -palvelua tulostamiseen ja tiedostojen yhteiskäyttöön Pyydä IT -tukihenkilöä asentamaan SSH -palvelu työasemaasi. SSH daemon failed to open the application's public host key. SSH -palvelu ei pystynyt selvittämään sovelluspalvelimen julkista avainta. SSH daemon failed to open the application's public key used for exporting folders and printers. SSH-palvelu ei pystynyt selvittämään sovelluksen julkista avainta jota käytetään kansioiden ja tulostinten jakamiseen. SSH daemon failed to open the application's authoized_keys file. SSH -palvelu ei saanut luettua sovelluksen authoized_keys -tiedostoa. Options Vaihtoehdot Available pack methodes: Mahdolliset pakkaustavat: Pack Methodes Pakkausmenetelmät Option is not availabel in this build Vaihtoehtoa ei tässä versiossa Changelog Muutosluettelo Git Info Git-tietoja Unable to create folder: Kansion luonti ei onnistu: RSA file empty. RSA-tiedosto on tyhjä. Can not open key: Avaimen käyttöönotto ei onnistu: Support Neuvonta </b><br> (C. 2005-2016 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br> <b><br> (C. 2005-2016 <b>varmaan hyvä</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br> <br>x2goplugin mode was sponsored by <a href="http://www.foss-group.de/">FOSS-Group GmbH(Freiburg)</a><br> <br>x2plugin tilan sponsori <a href="http://www.foss-group.de/">FOSS-Group GmbH(Freiburg)</a><br> <br>Client for use with the X2Go network based computing environment. This Client will be able to connect to X2Go server(s) and start, stop, resume and terminate (running) desktop sessions. X2Go Client stores different server connections and may automatically request authentication data from LDAP directories. Furthermore it can be used as fullscreen loginscreen (replacement for loginmanager like xdm). Please visit x2go.org for further information. <b>Asiakasohjelma jolla voit käyttää X2Go palvelinohjelmaa. Tällä ohjelmalla voit kytkeytyä X2Go -palvelimeen ja käynnistää, pysäyttää, jatkaa ja lopettaa työpöytäistuntoja. X2Go -asiakasohjelma tallettaa erilaisten istuntojen parametrit ja se voi hakea autentitontitiedot automaattisesti LDAP-hakemistoista. Lisäksi sitä voidaan käyttää koko näyttö -tilassa kirjaustumisnäyttönä (jolloin se korvaa esim. xdm -kirjautumisnäytön). Tarkempia tietoja löytyy osoitteesta x2go.org. <b>X2Go Client V. <b>X2Gi Asiakasohjelma V. Please check LDAP Settings Tarkista LDAP-asetukset No valid card found Toimikortti puuttuu Card not configured. Toimikortin asetukset puuttuvat. This card is unknown by X2Go system X2Go ei tunnista korttia Unable to create file: Tiedoston luonti epäonnistui: Can't connect to X server Please check your settings Yhteys X-palvelimeen ei aukea Tarkista asetukset Can't start X server Please check your settings Yhteys X-palvelimeen ei aukea Tarkista asetukset Can't start X Server Please check your installation Yhteys X-palvelimeen ei aukea Tarkista asennuksen oikeellisuus Unable to execute: Kännistys ei onnistu: Remote server does not support file system export through SSH Tunnel Please update to a newer x2goserver package Etäpalvelin ei tue SSH-ehteyden avulla toimivaa levyjakoa Päivitä x2goserver palvelinohjelma Unable to read : Lukeminnen ei onnistu : Unable to write : Kirjoittaminen ei onnistu : WINDOWS-1252 WINDOWS-1252 ISO8859-1 ISO8859-1 Error getting window geometry (window closed)? Ikkunoinnin asetusten luku ei onnistu (ikkuna suljettu)? X2Go Session X2Go Istunto wrong value for argument"speed" "speed" -astuksella on virheellinen arvo Password: Salasana: Keyboard layout: Näppäimistön tyyppi: Ok Ok Cancel Peruuta <b>Session ID:<br>Server:<br>Username:<br>Display:<br>Creation time:<br>Status:</b> <b>Istunnon ID:<br>Palvelin:<br>Käyttäjätunnus:<br>Näyttö:<br>Luontiaika:<br>Tila:</b> Abort Keskeytä Show details Näytä yksityiskohdat Resume Jatka New Uusi Full access Kaikki oikeudet View only Vain katselu Status Tila Command Komento Type Tyyppi Server Palvelin Client IP Asiakasohjelman IP Session ID Isunnon ID User Käyttäjä Only my desktops Vain omat työpöydät sshd not started, you'll need sshd for printing and file sharing you can install sshd with <b>sudo apt-get install openssh-server</b> sshd ei käynnissä, se pitää olla jotta tulostus ja tiedostojako toimisi voit asentaa sshd komennolla <b>sudo apt-get install openssh-server</b> Restore toolbar Palauta toimintopalkki <br><b>&nbsp;&nbsp;&nbsp;Click this button&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;to restore toolbar&nbsp;&nbsp;&nbsp;</b><br> <br><b>&nbsp;&nbsp;&nbsp;Klikkaa tätä nappulaa&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;jotta palkki näkyisi jälleen&nbsp;&nbsp;&nbsp;</b><br> PrintDialog Print - X2Go Client Tulosta - X2Go-asiakasohjelma Print Tulosta You've deactivated the X2Go Client printing dialog. Olet poistanut tulostusmahdollisuuden X2Go-yhteysohjelmasta. You may reactivate this dialog using the X2Go Client settings dialog. To do so, follow this path in the menu bar: Options -> Settings Voit palauttaa takaisin tämän vaihtoehdon käyttäen X2Go asiakasohjelman asetuksia. Se onnistuu päävalikon toiminnnolla: Valinnat -> Asetukset) You've deactivated the x2go client printing dialog. Olet ottanut pois päältä x2go-asiakasohjelman tulostustoiminnon. You may reactivate this dialog using the x2goclient settings dialog (Menu -> Options -> Settings) Voit palauttaa toiminnon x2go-asiakasohjelmassa (Valikko -> Valinnat -> Asetukset) PrintProcess Save File Talleta Tiedosto PDF Document (*.pdf) PDF-tiedosto (*.pdf) Failed to execute command: Komento ei käynnisty: Printing error. Tulostusvirhe. Printing error Tulostusvirhe PrintWidget Form Ruutu Print Tulosta View as PDF Esitä PDF-muodossa Print settings Tulostinasetukset Printer: Tulostin: Print using default Windows PDF Viewer (Viewer application needs to be installed) Tulosta käyttäen oletus-PDF-katselulohjelmaa (Esitysohjelma pitää olla asennettuna) Printer command: Tulostinkomento: ... ... Viewer settings Esitysohjelman asetukset Open in viewer application Avaa esitysohelmassa Command: Komento: Save to disk Tallenna levylle Show this dialog before start printing Näytä tämä dialogi ennen tulostusta Please configure your client side printing settings.<br><br>If you want to print the created file, you'll need an external application. Typically you can use <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> and <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>You can find further information <a href="http://www.x2go.org/index.php?id=49">here</a>. Aseta tulostimen ohjaustiedot.<br><br>Jos haluat tulostaa muodostamasi tiedoston, tarvitset siihen erillisen sovelluksen. Esimerkiksi voit käyttää <a hrer="http:pages.cs.wisc.edtu/~ghost/doc/GPL/index.htm">ghostprint</a> and <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>Lisätietoja löydät <a href="http://www.x2go.org/index.php?id=49">täältä</a>. Please configure your client side printing settings.<br><br>If you want to print the created file, you'll need an external application. Typically you can use <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> and <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>You can find further information <a href="http://www.x2go.org/index.php?id=49">here</a>. "and" between the first two links untranslated. Aseta päälle asiakasohjelman tulostus.<br><br>Jos haluat tulostaa tiedoton, tarvitsen erillisen sovelluksen. Tyyppillisesti voit käyttää tätä <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> and <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>Löydät lisäohjeita <a href="http://www.x2go.org/index.php?id=49">täältä</a>. Please configure your client side printing settings.<br><br>If you want to print the created file, you'll need an external application. Typically you can use <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> and <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>You can find further information <a href="http://www.x2go.org/index.php?id=49">here</a>. Aseta päälle asiakasohjelman tulostus.<br><br>Jos haluat tulostaa tiedoton, tarvitsen erillisen sovelluksen. Tyyppillisesti voit käyttää tätä <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> ja <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>Löydät lisäohjeita <a href="http://www.x2go.org/index.php?id=49">täältä</a>. PrinterCmdDialog Printer command Tulostinkomento Command Komento Please enter your customized or individual printing command. Examples: kprinter lpr -P hp_laserjet Anna printterin erikoiskomento. Esimerkkejä: kprinter lpr -P hp_laserjet Output format Tulostusmuoto Please choose the printing file format (regarding to your printing environment - if you use CUPS you may use PDF) Valitse tulostusmuoto (riippuen tulostimestasi - jos käytätä CUPS-voit käyttää PDF-muotoa) PDF PDF PS PS Data structure Tietorakenne Please choose the method of printing file input (some commands accepting printing files as program options, some are awaiting data on standard input): Valitset tulostettavan aineiston muoto (muutamia komentoja tulostettava tiedosto tulostimen parametrinsa, jotkut vaativat datan oletuskanavasta): standard input (STDIN) Oletus input-kanava (STDIN) Specify path as program parameter Anna tiedostopolku ohjelmaparametrina Please enter your customized or individual printing command. Example: Anna räätälöity tulostinkomento. Esimerkki: <Path to gsprint.exe> -query -color <Path to gsprint.exe> -query -color PulseManager Unable to find the PulseAudio binary. Neither bundled, nor found in $PATH nor additional directories. PulseAudio ohjelmaa ei löydy. Se ei ole sisäänrakennettuna eikä se löydy $PATH-muuttujan avullakaan. If you downloaded the bundled, pre-compiled version from the official home page, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Jos latasit paketin, valmiiksi käännetyn version viralliselta kotisivulta, ilmoita virheestä: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Could not allocate buffer for getting current working directory! Muistin allokonti ei onnistu kotihakemiston saavuttamiseksi! getcwd() failed! getcwd() kaatui! PulseAudio failed to start! PulseAudio ei käynnistynyt! Sound support will not be available. If you downloaded the bundled, pre-compiled version from the official home page, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Äänen käyttö ei ole mahdollista. Jos latasit paketista, valmiin version viralliselta kotisivulat, ilmoita virheestä: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Error fetching PulseAudio version number! PulseAudion versionumeron luku ei onnistu! Unexpected character found when parsing version string for major version number Tunnistamaton merkki esti versionumeron lukemisen Unexpected character found when parsing version string for minor version number Tunnistamaton merkki esti versionumeron jälkiosan lukemisen Unexpected character found when parsing version string for micro version number Tunnistamaton merkki esti versionumeron lukemisen loppuun saakka Supposed to skip major version number. Something is wrong. Versionumerosta luettiin vain alkuosa. Unable to convert major version number string to integer. Versiotietoa ei voitu muuttaa numeeriseksi. Unable to convert minor version number string to integer. Versionumeron loppuosaa ei voitu muuttaa numeeriseksi. Unable to convert micro version number string to integer. Version viimeistä osaa ei voitu muuttaa numeeriseksi. Unexpected format encountered. Virheellinen muoto. Unable to start PulseAudio binary. PulseAudio ei käynnisty. Unable to play startup sound. Käynnistysääni ei toimi. Sound support will not be available. Äänen käyttö ei ole mahdollista. If you downloaded the bundled, pre-compiled version from the official home page or the upstream Linux packages, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Jos latasit paketin, valmiiksi käännetyn version viralliselta kotivulta tai upstream Linux paketin, ilmoita virheestä: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> QObject No response received from the remote server. Do you want to terminate the current session? Etäpalvelin ei vastaa. Haluatko keskeyttää istunnon? X2Go Client could not find any suitable X11 server. X2Go-yhteysohjelma ei löytänyt sopivaa X11-ohjelmaa. X2Go Client could not start X11 server. X2Go-yhteysohjelma ei pystynyt käynnistämään X11-ohjelmaa. X2Go Client requires XQuartz to be installed. If XQuartz is already installed on your system, please select the correct path in the now upcoming dialog. Refer to the end of this message for path examples, in case you do not know the exact location yourself. Should you have <b>not</b> installed XQuartz yet, please follow the outlined steps: X2Go-asiakasohjelma edellyttää XQuartz-ohjelman asentamista. Jos XQuartz on jo asennettu, valitse oikea hakupolku esitetystä valintaikkunasta. Katso tämän viestin lopussa olevia polkuesimerkkejä, jos et tiedä tarkkaa sijaintia. Jos <b>et</b> ole asentanut XQuartz-ohjelmaa vielä, seuraa näitä ohjeita: MacPorts users, please install either the port <b>xorg-server</b> or the port <b>xorg-server-devel</b>. Upon successful installation, please follow the instructions printed by the port utility to autostart/load the server. All other users, please obtain and install XQuartz from: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> Afterwards, restart X2Go Client and select the correct path to the X11 application in the general X2Go Client settings. This will most likely be <center><b>/Applications/MacPorts/X11.app</b></center> or <center><b>/Applications/Utilities/XQuartz.app</b></center> MacPorts-käyttäjät, asenna joko portti <b>xorg-server</b> tai portti <b>xorg-server-devel</b>. Kun asennus valmis, seuraa ohjeita jotka tulostuvat portilla joka käynnistää/lataa palvelimen. Kaikki muut käyttäjät, nouda ja asenna XQuartz täältä: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> Seuraavaksi, käynnistä X2Go-asiakasohjelma ja valitse oikea polku jolla pääset X11-sovellukseen X2Go-ohjelman asetuksilla. Se on todennäköisesti <center><b>/Applications/MacPorts/X11.app</b></center> tai <center><b>/Applications/Utilities/XQuartz.app</b></center> SessionButton Session preferences... Istunnon oleutusarvot... Create session icon on desktop... Tee istunnosta ikoni työpöydällesi... Session preferences ... Istunnon oletusarvot ... Create session icon on desktop ... Tee istuntokuvake työpöydälle ... Delete session Poista istunto Session actions Istunnon toiminnot Select type Valitse tyyppi Select resolution Valitse tarkkuus Toggle sound support Äänen päälleasetus New Session Uusi istunto running suorittaa suspended pysäytetty KDE KDE RDP connection RDP-yhteys XDMCP XDMCP Connection to local desktop Yhteys palvelimen omaan näyttöön Published applications Julkaistut sovellukset fullscreen koko näyttö Display Näyttö window ikkuna Maximum Maksimi Enabled Päällä Disabled Pois päältä SessionExplorer Back Takaisin Create session icon on desktop Tee instuntokuvake työpöydälle Desktop icons can be configured not to show x2goclient (hidden mode). If you like to use this feature you'll need to configure login by a gpg key or gpg smart card. Use x2goclient hidden mode? Työpöytäkuvakkeet voidaan asettaa piilottamaan x2go -asiakasohjelma (hidden mode). Jos haluat käyttää ominaisuutta määritä kirjautuminen käyttämään gpg-avainta tai gpg -toimikorttia. Käytätkö x2go-asiakasohjelmaa piilotettuna? Create session icon on desktop. Tee istuntokuvake työpöydälle. Desktop icons can be configured not to show X2Go Client (hidden mode.) If you like to use this feature you'll need to configure login via a GPG key or GPG Smart Card. Use X2Go Client's hidden mode? Työpöydän kuvakkeet voidaan asettaa niin että ne eivat näytä X2Go-ohjelmaa (piilomoodi.) Jos halua käyttää ominaisuutta sinun pitää asentaa kirjautuminen käyttämään GPG-avainta tai GPG-korttia. Käytätkö X2Go-ohjelmaa piilomoodissa? Show session tray icon when running Näytä istunon kuvake kun se on aktiivinen New Session Uusi istunto X2Go Link to session Linkki X2Go-istuntoon Are you sure you want to delete this session? Haluatko varmasti poistaa tämän istunnon? SessionManageDialog E&xit &Lopeta &New session &Uusin istunto &Session preferences &Istunnon oletusarvot &Delete session &Poista instunto &Create session icon on desktop ... &Tee istuntokuvake työpöydälle ... &Create session icon on desktop... &Tee istunnosta ikoni työpöydälle... Delete Delete Poista Session management Istunnon hallinnointi SessionWidget Session name: Istunnon nimi: << change icon << vaihda ikoni Path: Polku: &Server &Palvelin Values ranging from <b>0</b> to <b>65535</b> are allowed.<br />A value of <b>0</b> will either use the port specified in the SSH configuration file belonging to a host or shortname, or use the default of <b>22</b>. Arvot väliltä <b>0</b> - <b>65535</b> ovat sallittuja.<br />Arvo <b>0</b> käyttää joko SSH-asetuksen arvoa, tai oletusta <b>22</b>. Host: Palvelin: Login: Käyttäjä: SSH port: SSH-portti: Use RSA/DSA key for ssh connection: Käytä RSA/DSA-avainta ssh-yhteyden luomiseen: Try auto login (ssh-agent or default ssh key) Yritä automaattista kirjautumista (ssh-välittäjää tai oletus-ssh-avainta käyttäen) Try auto login (via SSH Agent or default SSH key) Kokeile automaattista kirjautumista (käyttäen SSH-agenttia tai SSH-oletusavainta) Kerberos 5 (GSSAPI) authentication Kerberos 5 (GSSAPI) autentikointi Delegation of GSSAPI credentials to the server Anna GSSAPI-tunnistustiedot palvelimelle Use Proxy server for SSH connection Käytä proxy-palvelinta SSH-yhteyden luomiseen Proxy server Proxy-palvelin SSH SSH HTTP HTTP Same login as on X2Go Server Sama käyttäjätunnus kuin X2Go-palvelimeen Same password as on X2Go Server Sama salasana kuin X2Go-palvelimeen RSA/DSA key: RSA/DSA-avain: SSH Agent or default SSH key SSH-agentti tai oletus-SSH-avain Run in X2GoKDrive (experimental) Connect to Windows Terminal Server Yhistä Windows Terminal Serveriin X2Go/X11 Desktop Sharing Direct RDP connection Suora RDP-yhteys X2Go Client is running in portable mode. You should use a path on your USB device to be able to access your data wherever you are. X2Go-yhteysohjelma tomii nyt siirrettävässä moodissa. Sinun pitää käyttää USB-laitteesi polkua jotta pääset käsiksi tietoihisi missä oletkin. Direct XDMCP connection Suora XDMCP yhteys ssh-agent or default ssh key ssh-agentti tai oletus -ssh-avain Type: Tyyppi: Port: Portti: &Session type &Istuntotyyppi Session type: Istuntotyyppi: Connect to Windows terminal server Yhdista Windows terminal serveriin XDMCP XDMCP Connect to local desktop Yhdistä palvelimen omaan näyttöön Custom desktop Muokattu työpöytä Single application Erillinen sovellus Published applications Julkaistut sovellukset Command: Komento: Advanced options... Edistyneet toiminnot... Path to executable Ohjelman hakupolku Direct RDP Connection Suora RPP-yhteys Open key file Lue avain-tiedosto All files Kaikki tiedostot Error Virhe x2goclient is running in portable mode. You should use a path on your usb device to be able to access your data whereever you are x2go-asiakasohjelma on siirrettävässä moodissa. Käytä usb-laiteen hakupolkua jotta pääset joka paikasta käsiksi omiin tietoihisi RDP port: RDP-portti: Open picture Avaa kuva Pictures Kivat Server: Palvelin: XDMCP server: XDMCP-palvelin: direct XDMCP connection suora XDMCP yhteys rdesktop command line options: rdesktop-komentorivin optiot: New session Uusi istunto SettingsWidget &Display &Näyttö &Keyboard N&äppäimistö Sound Ääni &Clipboard Mode &Leikepöytä -tila &Clipboard mode &Leikepöytä-moodi Fullscreen Koko näyttö Custom Muokattu Window Ikkuna Use whole display Käytä koko näyttöä Maximum available Maksimikoko Set display DPI Aseta näytön arvot (DPI) Xinerama extension (support for two or more physical displays) Xinerama-laajennus (tuki kahdelle tai useammalle näytölle) Width: Leveys: Height: Korkeus: &Display: &Näyttö: &Identify all displays &Tunnista kaikki näytöt Bidirectional copy and paste Kaksisuuntainen leikkaus - liimaus Copy and paste from client to server Leikka ja liimaa päätelaitteesta palvelimeen Copy and paste from server to client Leikkaa ja liimaa palvelimesta päätelaitteeseen Disable clipboard completely Poista leikepöytä käytöstä kokonaan Auto-detect keyboard settings Tunnista näppäimistö automaattisesti RDP client RDP-yhteysohjelma FreeRDP/X11 (pre-2.x style options) FreeRDP/X11 (2.x style options) Auto detect keyboard settings Tunnista näppäimistötyyppi automaattisesti Do not configure keyboard Älä muuta näppäimistöasetuksia Configure keyboard Muuta näppäimistön asetukset Model: Malli: Layout: Asettelu: Variant: Alalaji: Keep current keyboard Settings Säitytä nykyiset näppämistöasetukset Keyboard layout: Näppäimistön layout: Keyboard model: Näppäimistön malli: Enable sound support Aseta ääni pälle Start sound daemon Käynnistä ääniajuri Use running sound daemon Käytä nykyistä ääniajuria Use SSH port forwarding to tunnel sound system connections through firewalls Käytä SSH -portin tunnelointia äänen saamiseksi palomuurin läpi Use default sound port Käytä oletus-aääniporttia Sound port: Ääniportti: Client side printing support Asiakasohjelman tulostintuki RDP Client RDP -asiakasohjelma Additional parameters: Lisäohjaimet: Command line: Komentorivi: XDMCP client XDMCP asiakasohjelma us fi pc105/us pc105/us password salasana ShareWidget &Folders &Kansiot Path Polku Automount Automaattinen avaus Add Lisää Delete Poista Path: Polku: Filename encoding Tiedostonimen koodaus local: paikallinen: remote: palvelin: Use SSH port forwarding to tunnel file system connections through firewalls Käytä SSH-porttia viedäksesi levyjaot palomuurien läpi X2Go Client is running in portable mode. You should use a path on your USB device to be able to access your data wherever you are. X2Go-yhteysohjelma on siirrettävässä moodissa. Käytä USB-laitteesi hakemistopolkua jottä pääset tietoihisi käsiksi sieltä missä olet. Use ssh port forwarding to tunnel file system connections through firewalls Käytä ssh-yhteyden edelleenlähetystä palomuurien ohittamiseen Select folder Valitse kansio Error Virhe x2goclient is running in portable mode. You should use a path on your usb device to be able to access your data whereever you are x2go-yhteysohjelma toimiii mobiilitilassa. Käytä usb-laitteen hakemistoja tietojen hakemiseen WINDOWS-1252 WINDOWS-1262 ISO8859-1 ISO8859-1 SshMasterConnection SSH proxy connection error SSH -proxyssa on yhteysvirhe SSH proxy connection error. SSH-välityspalvelimen yhteysvirhe. SSH proxy connection error: SSH proxyssa on yhteysvirhe: Failed to create SSH proxy tunnel. Tunnelointi SSH-välityspalvelimen kautta epäonnistui. Cannot initialize libssh. Libssh-kirjaston avaus epäonnistui. Cannot create SSH session. SSH-istunnon luonti epäonnistui. Using environment-provided username. Käyttäjätunnuksen mukaiset asetukset ovat käytössä. Cannot connect to proxy server. Ei yhteyttä välityspalvelimeen. Authentication failed. Autentikointi epäonnistui. Failed to start SSH client. Please check your installation and GSSApi configuration. SSH-asiakasohjelma ei käynnisty. Tarkista asennukset ja GSSApi configurointi. Check your GSSApi configuration or choose another authentication method. Tarkista GSSApi-asetukset tai valitse toinen autentikointimentelmä. Reconnect session Jatka istuntoa Cannot open file Tiedosto ei avaudu Cannot create remote file Tiedosto luonti palvelimeen ei onnistu Cannot write to remote file Kirjoittaminen palvelimen tiedostoon ei onnistu %1 failed. Argument in this context will be a function name. %1 epäonnistui. channel_open_forward failed. channel_open_forward epäonnistui. channel_open_session failed. channel_open_session epäonnistui. Error writing to socket. Sokettiin kirjoitus epäonnistui. Error reading channel. Kanavan luku epäonnistui. channel_write failed. channel_write epäonnistui. Error reading from TCP socket. TCP-soketin luku epäonnistui. Failed to create SSH proxy tunnel Virhe SSH-proxyn tunneloinnissa Can not initialize libssh Libssh-kirjaston avausvirhe Can not create ssh session Ssh-istunnon luonti ei onnistu Can not connect to proxy server Proxy -palvelimeen ei saatu yhteyttä Can not connect to Tänne ei saatu yhteyttä Authentication failed Autentikointi epäonnistui channel_forward_listen failed channel_forward_listen epäonnistui Failed to start SSH Client. Please check your installation and GSSApi configuration SSH-asiakasohjellman käynnistys epäonnistui. Tarkista sen asennus ja GSSAPI -asetukset Check your GSSApi configuration or choose another authentication method Tarkista GSSAPI -asetukset tai käytä jotain muuta autentikointimenetelmää Can not open file Tiedoston avaus ei onnistu Can not create remote file Tiedoston luonti etäpalvelimeen ei onnistu Can not write to remote file Etätiedostoon kirjoitus ei onnistu Cannot connect to yhteys ei avaudu tähän kohteeseen channel_open_forward failed channel_open_forward epäonnistui channel_open_session failed channel_open_session epäonnistui channel_request_exec failed channel_request_exec epäonnistui error writing to socket socket-yhteydessä on kirjoitusvirhe error reading channel kanavan lukuvirhe channel_write failed channel_write epäonnistui error reading tcp socket tcp-socketin lukuvirhe SshProcess Error creating socket Virhe socket-yhteyden luonnissa Error creating socket. Soketin avaus epäonnistui. Error binding Virhe yhteyden avauksessa XSettingsWidget Open File Avaa tiedosto Executable (*.exe) Suorittava ohjelma (*.exe) XSettingsWidgetUI Form Ruutu You must restart the X2Go Client for the changes to take effect Ota muutokset käyttöön käynnistämällä X2Go-asiakasohjelma uudelleen use integrated X-Server käytä integroitua X-palvelinta do not use primary clipboard älä käytä oletus-leikepöytää use custom X-Server käytä muokattua X-palvelinta custom X-Server muokattu X-palvelin executable: ohjelma: start X-Server on X2Go Client start käynnistä X-palvelin kun X2Go-asiakasohjelma käynnistyy command line options: komennon valinnat: X-Server command line options X-palvelimen komentorivin valinnat window mode: ikkunan tila: fullscreen mode: kokonäytön tila: single application: yksi sovellus: whole display: kokonäyttö: x2goclient-4.1.2.3/res/i18n/x2goclient_fr.ts0000644000000000000000000045551414447111613015330 0ustar AppDialog Published Applications Applications publiées Search: Rechercher : &Start &Démarrer &Close &Fermer Multimedia Multimedia Development Développement Education Éducation Game Jeux Graphics Graphismes Network Internet Office Bureautique Settings Préférences System Système Utility Accessoires Other Autres BrokerPassDialogUi Dialog Fenêtre de dialogue Old password: Ancien mot de passe : New password: Nouveau mot de passe : Confirm password: Confirmez le mot de passe : TextLabel Libellé textuel BrokerPassDlg Passwords do not match Les mots de passe ne correspondent pas CUPSPrintWidget Idle Inactive Printing En cours d'impression Stopped Arrêtée Yes Oui No Non Form Formulaire Name: Nom : Properties Propriétés State: État : Accepting jobs: En attente de travaux : Type: Type : Location: Emplacement : Comment: Commentaire : CUPSPrinterSettingsDialog No option selected Aucune option séléctionnée This value is in conflict with other option Cette valeur est en conflit avec une autre option Options conflict Conflits d'options This value is in conflict with another option. Cette valeur entre en conflit avec une autre option. Options conflict. Conflit entre options. ConTest Connectivity test Test de connectivité HTTPS connection: Connection HTTPS : SSH connection: Connection SSH : Connection speed: Vitesse de connection : Failed Échec 0 Kb/s 0 Kb/s OK Ok Failed: Échec : Socket operation timed out. Temps d'attente écoulé. ConfigDialog General Général Display icon in system tray Afficher l'icone dans la barre d'état Hide to system tray when minimized Cacher dans la barre d'état à la réduction de la fenêtre Hide to system tray when closed Cacher dans la barre d'état à la fermeture de la fenêtre Hide to system tray after connection is established Cacher dans la barre d'état quand la session est établie Restore from system tray after session is disconnected Cacher dans la barre d'état quand la session est déconnectée Use LDAP Utiliser LDAP Server URL: URL du serveur : BaseDN: BaseDN : Failover server 1 URL: Failover en backup ? secours plutôt. URL du premier serveur de secours : Failover server 2 URL: URL du second serveur de secours : X-Server settings Préférences du serveur X X11 application: Application X11 : X11 version: Version X11 : Find X11 application Trouver une application X11 Clientside SSH port for file system export usage: Port SSH coté client pour l'export du système de fichiers: Start session embedded inside website Démarrer une session embarquée dans le site web Advanced options Options avancées Defaults Défauts &OK &Ok &Cancel &Annuler Settings Préférences Printing Impression Warning Attention x2goclient could not find any suitable X11 Application. Please install Apple X11 or select the path to the application x2goclient ne peut pas trouve d'application X11 adaptée. Merci d'installer Apple X11 ou de séléctionner le chemin de l'application Your are using X11 (Apple X-Window Server) version Vous utilisez X11 (Server X-Window Apple) version . This version causes problems with X-application in 24bit color mode. You should update your X11 environment (http://trac.macosforge.org/projects/xquartz). Cette version pose des problèmes avec les applications X en mode de couleurs 24bits. Vous devriez mettre à jour votre environement X11 (http://trac.macosforge.org/projects/xquartz). No suitable X11 application found in selected path Pas d'application X11 trouvée dans le chemin sélectionné. &Connection &Connection &Settings &Préférences &Input/Output &Entrées/Sorties &Media &Media X.Org Server settings Réglages de X.Org Server Clientside (local) SSH daemon port for file system export usage: "partage" plutôt que "export" ? "dossiers partagés" plutôt que "système de fichiers" ? Port du démon SSH côté client (local) pour l'export du système de fichiers: Pulseaudio settings Paramétrage de Pulseaudio Disable audio input Désactiver l'entrée son <font size="5">You must restart the X2Go Client for the changes to take effect</font><br><br> <font size="5">Vous devez redémarrer X2Go Client pour que les modifications soient prises en compte</font><br><br> Your XQuartz version is too old. La version de votre XQuartz est trop ancienne. Your are using XQuartz (X Window System Server for OS X) version %1. Vous utilisez XQuartz (Serveur de Système X Window pour OS X) version %1. This version causes problems with X applications in 24bit color mode. You should update your X11 environment. MacPorts users please follow the steps outlined on: <center><a href="https://guide.macports.org/chunked/using.common-tasks.html">https://guide.macports.org/chunked/using.common-tasks.html</a></center> Users who have installed XQuartz via the installer package can find updated versions on: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> Cette version provoque des problèmes avec les applications X en mode couleur 24bit. Vous devriez mettre à jour votre environnement X11. Utilisateurs de MacPorts, veuillez suivre les instructions sur : <center><a href="https://guide.macports.org/chunked/using.common-tasks.html">https://guide.macports.org/chunked/using.common-tasks.html</a></center> Les utilisateurs qui ont installé XQuartz par le paquet d'installation peuvent trouver des versions mises à jour sur : <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> No valid XQuartz application selected. Aucune application XQuartz valide sélectionnée. You did not select a valid XQuartz application. Please try again. Some standard installation locations may be: <center><b>/Applications/Utilities/X11.app</b></center> <center><b>/Applications/Utilities/XQuartz.app</b></center> <center><b>/Applications/MacPorts/X11.app</b></center> Vous n'avez pas sélectionné d'application XQuartz valide. Veuillez essayer à nouveau. Vous la trouverez peut-être dans l'un de ces emplacements standards : <center><b>/Applications/Utilities/X11.app</b></center> <center><b>/Applications/Utilities/XQuartz.app</b></center> <center><b>/Applications/MacPorts/X11.app</b></center> PulseAudio settings Paramétrage de PulseAudio Disable sound input Désactiver l'entrée son Disable PulseAudio Désactiver PulseAudio ConnectionWidget &Connection speed Vitesse de &connection Connection speed: Vitesse de connection : C&ompression C&ompression C&ompression Method: Méthode : Compression method: Méthode de compression : Image quality: Qualité d'image : CupsPrinterSettingsDialog Dialog Fenêtre de dialogue General Général Page size: Taille de page : Paper type: Type de papier : Paper source: Source de papier : Duplex Printing Impression recto-verso None Aucune (recto seulement) Long side Bord long Short side Bord court Driver settings Préférences de pilote Option Option Value Valeur No option selected Pas d'option sélectionnée text texte EditConnectionDialog &Session &Session &Connection &Connexion &Settings &Préférences &Shared folders &Dossiers partagés &OK &Ok &Cancel &Cancel Defaults Défauts Session preferences - Paramétrage de la session - &Input/Output &Entrées/Sorties &Media &Media ExportDialog &Cancel &Annuler &share &Partager &Preferences ... &Préférences ... &Custom folder ... &Dossier personnalisé ... Delete Delete Effacer share folders partager des dossiers Select folder Choisir un dossier Share Folders Partager des dossiers FolderButton Sessions folder Dossier des sessions FolderExplorer Folders Dossiers Create New Folder Créer un nouveau dossier Open picture Ouvrir une image Pictures Images X2Go Client "Client X2Go" ? X2Go Client Folder Name: Nom du dossier : Error Erreur Unable to remove " Impossible d'enlever " Delete folder " Enlever dossier " New Folder Nouveau dossier Rename Folder ... Renommer le dossier ... Change Icon ... Changer d'icône ... Delete Folder ... Enlever le dossier ... ". Folder is not empty. Please remove the contents of this directory and try again. ". Le dossier n'est pas vide. Veuillez supprimer le contenu de ce dossier et essayer à nouveau. Help Shows this message. Montre ce message. Prints version information. Affiche le numéro de version. Shows the changelog. Montre le journal des modifications. Shows git information as used at compile time. [Deprecated: please use --version.] Montre les informations git utilisées au moment de la compilation. [Déprécié : veuillez utiliser --version.] Shows available pack methods. Montre les méthodes de compression disponibles. Do not resume sessions automatically. Ne pas restaurer les sessions automatiquement. Hides menu bar. Cache la barre de menu. Disables session editing. Désactive la modification de session. Starts maximized. Démarre maximisé. Starts hidden (minimized to system tray where available.) Démarre caché (minimisé dans la barre d'état si présente.) Starts in "portable" mode. Démarre en mode "portable". Forces OpenPGP smart card authentication. Force l'authentification par carte à puce OpenPGP. Enables Xinerama by default. Active Xinerama par défaut. Allows client side printing in LDAP mode. Permet l'impression côté client en mode LDAP. Enables thinclient mode. Starts without a window manager. Active le mode client fin. Démarre sans gestionnaire de fenêtre. Enables shutdown button. Active le bouton d'arrêt. Adds RSA key fingerprint to ".ssh/known_hosts" if authenticity of the server can't be determined. Ajoute l'empreinte de la clé RSA à ".ssh/known_hosts" si l'authenticité du serveur ne peut être vérifiée. Starts with LDAP support. Example: --ldap=ldapserver:389:o=organization,c=de Démarre avec la prise en charge de LDAP. Exemple : --ldap=ldapserver:389:o=organisation,c=fr Defines the first LDAP failover server. Définit le premier serveur LDAP de secours. Defines the second LDAP failover server. Définit le second serveur LDAP de secours. Defines the remote SSH server port. Default: 22. Définit le port du serveur SSH distant. Par défaut : 22. Defines the local machine's SSH server port. Needed for Client-Side Printing and File Sharing support. Default: 22. Définit le numéro du port du serveur SSH de la machine locale. Requis pour la prise en charge de l'impression côté client et du partage de fichiers. Par défaut : 22. Sets the default command. Default: 'KDE' (Desktop Session) Donne la commande par défaut. Par défaut : 'KDE' (Session de bureau) Starts the session named "session". Démarre la session nommée "session". Sets the user name for connecting to the remote SSH server to "username". Donne le nom d'utilisateur "username" pour la connexion au serveur SSH distant. Sets the default window geometry. Default: 800x600. Donne les dimensions de la fenêtre initiale. Par défaut : 800x600. Sets the remote X2Go Agent's DPI value to "dpi". Default: same as local display. Règle la valeur de la définition (DPI) de l'agent X2Go distant. Par défaut : celle de l'affichage local. Sets the default link type. Default: "adsl". Définit le type de lien. Par défaut : "adsl". Sets default pack method. Default: "16m-jpeg-9". Définit la méthode de compression. Par défaut : "16m-jpeg-9". Sets the default clipboard mode. Default: "both". Règle le mode du presse-papier par défaut. Par défaut : "both". Sets the default keyboard layout to "layout". "layout" may be a comma-separated list. Choisit la disposition du clavier "layout". "layout" peut être une liste de noms séparés par des virgules. Sets the default keyboard type. Définit le type du clavier par défaut. Sets the user's home directory. Définit le dossier de départ ("home") de l'utilisateur. Enables or disables overwriting the current keyboard settings. Active ou désactive le remplacement des réglages actuels du clavier. Automatically launches the application(s) "app", "app2", ... on session start in Published Applications mode. Lance automatiquement la ou les application(s) "app", "app2", ... au démarrage de la session dans le mode "Applications publiées". Defines an alternative session config file path. Définit le chemin du fichier d'une session alternative. Force-enables session system tray icon. Force la présence dans la barre d'état système de l'icône de la session. Automatically closes X2Go Client after a disconnect. Ferme automatiquement X2Go Client après une déconnexion. Hides all Folder-Sharing-related options. Cache toutes les options liées au partage de fichiers. Sets the broker name to display in X2Go Client. This parameter is optional. Définit le nom du broker à afficher dans X2Go Client. Ce paramètre est optionnel. Sets the path to an SSH key to use for authentication against an SSH session broker. The client's behavior is undefined if this flag is used for non-SSH session brokers. Définit le chemin d'une clé SSH à utiliser pour l'authentification auprès d'un broker de session SSH. Le comportement du client est indéfini si cette option est utilisée pour des brokers de sessions non-SSH. Enables the use of the default SSH key or SSH agent for authentication against an SSH session broker. The client's behavior is undefined if this flag is used for non-SSH session brokers. Permet l'utilisation de la clé SSH par défaut ou de l'agent SSH pour l'authentification auprès d'un broker de session SSH. Le comportement du client est indéfini si cette option est utilisée pour des brokers de sessions non-SSH. Does not ask for user credentials during session broker authentication. This can be useful if you are using an HTTP(S) session broker without authentication. If you run an HTTP(S) server without authentication, but with user-specific profiles, then put the user name into the broker URL (refer to --broker-url.) The user name then will be extracted from the broker URL and be sent to the session broker. The client's behavior is undefined if this flag is used for non-HTTP(S) session brokers. Ne demande pas les informations d'identification de l'utilisateur pendant l'authentification auprès du broker de session. Ceci peut être utile sivous utilisez un broker de session HTTP(S) sans authentification. Si vous faites tourner un serveur HTTP(S) sans authentification, mais avec des profiles propres à chaque utilisateur, alors mettez le nom d'utilisateur dans l'URL du broker (voir --broker-url). Le nom d'utilisateur sera alors extrait de l'URL du broker et envoyé au broker de session. Le comportement du client est indéfini si cette option est utilisée pour des brokers de session non-HTTP(S). Disable PulseAudio. Désactiver PulseAudio. Disable sound input. Désactiver l'entrée son. Use broker credentials as session user/password credentials when using broker mode with broker authentication. Currently only affects direct RDP sessions. Utiliser les codes d'accès au broker comme codes d'accès utilisateur/mot de passe quand on utilise le mode broker avec l'authentification broker. Ne concerne pour l'instant que les sessions RDP directes. Use a custom/branded background image (SVG format) for X2Go Client's main window. If a directory is given, will randomly pick an SVG file inside of it. Utilise une image de fond personnalisée/marquée (au format SVG) pour la fenêtre principale de X2Go Client. Si un dossier est donné, choisira au hasard un fichier SVG dans le dossier. Use a custom icon (SVG format) for additional branding to replace the default in the lower left corner of X2Go Client's main window. Utilise un icône personnalité (au format SVG) pour marquage additionnel pour remplacer l'original dans le coin inférieur gauche de la fenêtre principale de X2Go Client. Enables broker logout button. Active le bouton de déconnexion du broker. Disables X2Go Client's UNIX cleanup helper. This will prevent X2Go Client from terminating spawned processes after the main program terminates or crashes. Use with care and when in doubt, do not use this parameter at all. Désactive l'assistant de nettoyage UNIX de X2Go Client. Ceci empêchera X2Go Client d'arrêter les processus enfants après l'arrêt ou le plantage du programme principal. À utiliser avec précaution et dans le doute, ne pas utiliser ce paramètre du tout. HelpDialog Options Options HttpBrokerClient Error Erreur Login failed!<br>Please try again Identification échouée !<br>Merci de réessayer Host key for server changed. It is now: La clef du serveur a changée. C'est maintenant : For security reasons, connection will be stopped Pour des raisons de sécurité, la connection va être stoppée. The host key for this server was not found but an othertype of key exists.An attacker might change the default server key toconfuse your client into thinking the key does not exist La clef de ce serveur n'a pas été trouvée mais un autre type de clef existe. Un attaquant peut avoir changé la clef par défaut du serveur pour faire croire à votre client que la clef n'existe pas Could not find known host file.If you accept the host key here, the file will be automatically created Impossible de trouver le fichier des hôtes connus. Si vous acceptez l'hôte maintenant, le fichier sera créé automatiquement The server is unknown. Do you trust the host key? Public key hash: Le serveur n'est pas connu. Avez-vous confiance en cette clef ? Hash de la clef publique : Host key verification failed La vérification de la clef d'hôte a échouée Yes Oui No Non Enter passphrase to decrypt a key Entrez la phrase de passe pour déchiffrer la clef Authentication failed Identification échouée <br><b>Server uses an invalid security certificate.</b><br><br> <br><b>Le serveur utilise un certificat de sécurité invalide.</b><br><br> <p style='background:#FFFFDC;'>You should not add an exception if you are using an internet connection that you do not trust completely or if you are not used to seeing a warning for this server.</p> <p style='background:#FFFFDC;'>Vous ne devriez pas ajouter d'exeption si vous n'avez pas une entière confiance en la connection Internet que vous utilisez ou si vous n'avez pas l'habitude de voir cet avertissement pour ce serveur.</p> Secure connection failed Connection sécurisée échouée Issued to: Accordé à : Common Name(CN) Common Name(CN) Organization(O) Organization(O) Organizational Unit(OU) Organizational Unit(OU) Serial Number Numéro de série Issued by: Accordé par : Validity: Validité : Issued on Accordé le expires on expire le Fingerprints: Fingerprints : SHA1 SHA1 MD5 MD5 Exit X2Go Client Quitter X2Go Client Add exception Ajouter une exception Verification code: Code de vérification : For security reasons, the connection attempt will be aborted. Par sécurité, la tentative de connexion va être abandonnée. The host key for this server was not found but another type of key exists. An attacker might have changed the default server key to trick your client into thinking the key does not exist yet. La clé d'hôte de ce serveur n'a pas été reconnue mais un autre type de clef existe. Un attaquant peut avoir changé la clé par défaut du serveur pour faire croire à votre client que la clé n'existe pas encore. Could not find known hosts file. If you accept the host key here, the file will be automatically created. Impossible de trouver le fichier des hôtes connus. Si vous acceptez l'hôte maintenant, le fichier sera créé automatiquement. Host key verification failed. La vérification de la clef d'hôte a échoué. Authentication failed. Echec de l'authentification. Login failed!<br>Please try again. Identification échouée !<br>Merci de réessayer. Secure connection failed. Echec de la connection sécurisée. Enter user account password: Entrez le mot de passe du compte utilisateur : InteractionDialog Terminal output: Sortie du terminal : Cancel Annuler Reconnect Reconnecter MediaWidget Sound Son Enable sound support Activer le son Start sound daemon Démarrer le démon du son Use running sound daemon Utiliser le démon du son en cours d'execution Use SSH port forwarding to tunnel sound system connections through firewalls Transmettre le son par un tunel SSH pour passer à travers les pare-feux Use default sound port Utiliser le port par défaut pour le son Sound port: Port pour le son : Client side printing support Gestion de l'impression côté client Deprecation Warning Avertissement d'obsolescence ARTS support is scheduled to be removed soon. Please upgrade to PulseAudio. La prise en charge d'ARTS sera bientôt abandonnée. Veuillez passer à PulseAudio. ESounD support is scheduled to be removed soon. Please upgrade to PulseAudio. La prise en charge de ESounD sera bientôt abandonnée. Veuillez passer à PulseAudio. ONMainWindow us us pc105/us pc105/us X2Go Client X2Go Client connecting Connection en cours Internet browser Navigateur Internet Email client Client e-mail OpenOffice.org OpenOffice.org Terminal Terminal &Settings ... &Préférences ... Support ... Support ... About X2GO client Apropos de X2Go Client Share folder... Partager le dossier... Suspend Suspendre Terminate Achever Reconnect Reconnecter Detach X2Go window Détacher la fenêtre X2Go Minimize toolbar Réduire la barre d'outils Session: Session : &Quit &Quiter Ctrl+Q Quit Quitter &New session ... &Nouvelle session ... Ctrl+N Session management... Gestion de sessions... Ctrl+E &Create session icon on desktop... &Créer une icone de session sur le bureau... &Set broker password... Configurer le mot de passe du broker... &Connectivity test... Test de &Connectivité... Show toolbar Afficher la barre d'outils About Qt À propos de Qt &Session &Session &Options &Options &Help &Aide Login: Identifiant : Operation failed Opération échouée Password changed Mot de passe modifié Wrong password! Mauvais mot de passe ! <b>Authentication</b> <b>Identification</b> Restore Réstauration Not connected Non connecté Multimedia Development Développement Education Éducation Game Jeux Graphics Graphismes Network Internet Office Bureautique Settings Préférences System Système Utility Accessoires Other Autres Left mouse button to hide/restore - Right mouse button to display context menu Bouton de gauche de la souris pour cacher/afficher - Bouton de droite de la souris pour afficher le menu contextuel Error Erreur Please check LDAP settings Merci de vérifier les réglages LDAP no X2Go server found in LDAP Pas de serveur X2Go trouvé dans LDAP Create session icon on desktop Créer une icone de session sur le bureau Desktop icons can be configured not to show x2goclient (hidden mode). If you like to use this feature you'll need to configure login by a gpg key or gpg smart card. Use x2goclient hidden mode? Les icones de bureau peuvent être configurées pour ne pas afficher X2Go Client (mode caché). Si vous voulez utiliser cette fonctionnalité, vous aurez besoin de configurer l'identification par clef GPG ou par Smart Card GPG. Utiliser le mode caché de X2Go Client ? New Session Nouvelle session X2Go sessions not found Sessions X2Go non trouvées Are you sure you want to delete this session? Êtes vous sûr de vouloir effacer cette session ? KDE RDP connection Connection RDP XDMCP Connection to local desktop Connection au bureau local on <b>Connection failed</b> <b>Connection échouée</b> <b>Wrong password!</b><br><br> <b>Mauvais mot de passe !</b><br><br> unknown inconnu No server availabel Pas de serveur disponible Select session: Sélectionnez la session : running en cours suspended suspendue Desktop Bureau single application application spécifique shadow session session fantôme Information Information No accessible desktop found Aucun bureau distant trouvé Filter Filtre Select desktop: Selectionnez un bureau : Warning Attention Your current color depth is different to the color depth of your x2go-session. This may cause problems reconnecting to this session and in most cases <b>you will loose the session</b> and have to start a new one! It's highly recommended to change the color depth of your Display to La profondeur de couleur de votre serveur X est différente de celle de votre session X2Go. Cela peut pauser problème pour se reconnecter et la plupart du temps, <b>vous allez perdre la session</b>. Vous êtes fortement encouragé à changer la profondeur de couleur de couleur de votre serveur X à 24 or 32 24 ou 32 bit and restart your X-server before you reconnect to this x2go-session.<br>Resume this session anyway? bits et redémarrer votre serveur X avant de vous reconnecter à votre session.<br>Souhaitez-vous tout de même rétablir cette session ? Yes Oui Enter passphrase to decrypt a key Entrez une phrase de passe pour déchiffrer une clef Host key for server changed. It is now: La clef d'hôte du serveur a changé. La nouvelle clef est : For security reasons, connection will be stopped Pour des raisons de sécurité, la connection va être stoppée The host key for this server was not found but an othertype of key exists.An attacker might change the default server key toconfuse your client into thinking the key does not exist La clef d'hôte pour ce serveur n'a pas été trouvée mais un autre type de clef a été trouvé. Un attaquant peut avoir changé la clef par défaut du serveur pour faire croire à votre client que la clef n'existe pas Could not find known host file.If you accept the host key here, the file will be automatically created Impossible de trouver le fichier des hôtes connus. Si vouss acceptez la clef d'hôte ici, le fichier sera automatiquement créé The server is unknown. Do you trust the host key? Public key hash: Le serveur est inconnu. Avez vous confiance en la clef d'hôte ? Hash de la clef publique : No Non Host key verification failed La vérification de la clef d'hôte a échouée Authentication failed L'autentification a échouée Enter password for SSH proxy Entrez un mot de passe pour le proxy SSH Server not availabel Le serveur n'est pas disponible suspending suspension en cours terminating achèvement <b>Wrong Password!</b><br><br> <b>Mauvais mot de passe !</b><br><br> Unable to create folder: Impossible de créer le dossier: Unable to write file: Impossible de créer le fichier: Attach X2Go window Atacher la fenêtre X2Go Unable to create SSL tunnel: Impossible de créer un tunnel SSL: Unable to create SSL Tunnel: Impossible de créer un tunnel SSL: Finished Fini starting démarrage resuming rétablissement Connection timeout, aborting Connection expirée, abandon en cours aborting abandon en cours Session Session Display Affichage Creation time Heure de création (can't open file) (ne peut pas ouvrir le fichier) Support Support Unable to create file: Impossible de créer le fichier : Unable to execute: Impossible d'executer : X2Go Session Session X2Go Password: Mot de passe : Keyboard layout: Disposition de clavier : Ok Ok Cancel Annuler <b>Session ID:<br>Server:<br>Username:<br>Display:<br>Creation time:<br>Status:</b> <b>Id. de session :<br>Serveur :<br>Nom d'utilisateur :<br>Affichage :<br>Heure de création :<br>État :</b> Applications... Applications... Abort Interrompre Show details Montrer les informations Resume Reprendre New Nouvelle Full access Accès complet View only Visualisation seule Status État Command Commande Type Type Server Serveur Client IP IP du client Session ID Id. de session User Utilisateur Only my desktops Seulement mes bureaux Restore toolbar Rétablir la barre d'outil <br><b>&nbsp;&nbsp;&nbsp;Click this button&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;to restore toolbar&nbsp;&nbsp;&nbsp;</b><br> <br><b>&nbsp;&nbsp;&nbsp;Cliquer sur ce bouton&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;pour rétablir la barre d'outil&nbsp;&nbsp;&nbsp;</b><br> Connecting to broker Connection au broker WINDOWS-1252 WINDOWS-1252 ISO8859-1 ISO8859-1 Can't load translator: Ne peut charger le traducteur : Translator: Traducteur : No X2Go sessions found, closing. Session X2Go introuvable, fermeture. Starting connection to server: Démarrage de la connexion au serveur : to vers Authentication failed: Echec de l'authentification : Connection failed: Echec de la connexion : - Wrong password. - Mauvais mot de passe. New session started Nouvelle session démarrée Session resumed Session restaurée Unable to create folder: Impossible de créer le dossier : Unable to write file: Impossible de créer le fichier : Emergency exit. pas tout à fait ça Issue de secours. Waiting for proxy to exit. Attente de la sortie du mandataire. Wrong parameter: Mauvais paramètre : RSA file empty. Fichier RSA vide. Card not configured. Carte non configurée. If you accept the new host key the security of your connection may be compromised. Do you want to update the host key? Si vous acceptez la nouvelle clé d'hôte, la sécurité de votre connexion pourrait être compromise. Voulez-vous mettre à jour la clé d'hôte ? Verification code: Code de vérification : Help Aide Changelog Journal des modifications Git Info Information git SSH Error Erreur SSH SSH daemon failed to open the application's public key used for exporting folders and printers. Le démon SSH n'a pas réussi à utiliser la clé publique de l'application, utilisée pour exporter les dossiers et les imprimantes. Starting X2Go Client %1... Démarrage de X2Go Client %1... Starting X2Go Client in portable mode. Data directory is: Démarrage de X2Go Client en mode portable. Le dossier des données est : About X2Go Client À Propos de X2Go Client Started X2Go Client. X2Go Client démarré. found. trouvé. English language requested, not loading translator. Langue anglaise demandée, pas de traducteur à charger. Non-fatal: can't load translator: Pas fatal : impossible de charger le traducteur : Trying to load language with lower preference, if existent. Tentative de chargement d'une langue moins prioritaire, si pertinent. Session management ... Gestion des sessions ... &Create session icon on desktop ... &Créer un icône pour la session sur le bureau ... &Set broker password ... &Saisir le mot de passe du broker ... &Connectivity test ... Test de &connectivité ... Share folder ... Partager le dossier ... A left click hides or restores the window. A right click displays the context menu. Un clic gauche cache ou affiche la fenêtre. Un clic droit affiche le menu contextuel. Closing X2Go Client ... Fermeture de X2Go Client ... Finished X2Go Client closing hooks. "crochets" ? Fini X2Go Client par la fermeture des "hooks". Broker authentication failed! Echec de l'authentification du broker ! no X2Go Server found in LDAP serveur X2Go introuvable dans le LDAP Connection error: Erreur de connexion : Couldn't find an SSH connection. Connexion SSH introuvable. This can be an indication of a man-in-the-middle attack. Somebody might be eavesdropping on you. For security reasons, it is recommended to stop the connection attempt. Do you want to terminate the connection? Cela peut indiquer le cas d'une attaque par "l'homme-au-milieu". Quelqu'un pourrait vouloir vous espionner. Par sécurité, il est recommandé d'abandonner la tentative de connexion. Voulez vous mettre fin à la connexion ? Host key verification failed. La vérification de la clef d'hôte a échoué. The host key for this server was not found but another type of key exists. An attacker might have changed the default server key to trick your client into thinking the key does not exist yet. For security reasons, it is recommended to stop the connection attempt. Do you want to terminate the connection? La clé d'hôte de ce serveur n'a pas été reconnue mais un autre type de clef existe. Un agresseur peut avoir changé la clé par défaut du serveur pour faire croire à votre client que la clé n'existe pas encore. Par sécurité, il est recommandé d'arrêter toute tentative de connexion. Voulez-vous mettre fin à la connexion ? Could not find known hosts file. If you accept the host key here, the file will be automatically created. Impossible de trouver le fichier des hôtes connus. Si vous acceptez l'hôte maintenant, le fichier sera créé automatiquement. Authentication failed. Echec de l'authentification. <b>Connection failed.</b> <b>Échec de la connexion</b> No server available. Aucun serveur disponible. Server not available. Le serveur n'est pas disponible. No accessible desktop found. Bureau accessible introuvable. Your current color depth is different from the session's color depth. This may cause problems reconnecting to this session and in most cases <b>you will loose the session</b> and have to start a new one! It's highly recommended to change the color depth of your display to La profondeur de couleur de votre serveur X est différente de celle de votre session X2Go. Cela peut pauser problème pour se reconnecter et la plupart du temps, <b>vous allez perdre la session</b>. Vous êtes fortement encouragé à changer la profondeur de couleur de couleur de votre serveur X à bits and restart your X.Org Server before you reconnect to this X2Go session.<br />Do you want to resume this session anyway? bits et redémarrer votre serveur X avant de vous reconnecter à votre session.<br />Souhaitez-vous tout de même rétablir cette session ? Unable to create SSH tunnel for X2Go session (NX) startup: Impossible de créer le tunnel SSH pour démarrer la session X2Go (NX) : Unable to create SSH tunnel for audio data: Impossible de créer le tunnel des données audio : failed to start. Echec du démarrage. This likely means the binary is not available. The current search path is: Cela signifie probablement que le binaire n'est pas disponible. Le chemin de recherche en vigueur est : returned a non-zero exit code or crashed otherwise. a retourné un code de suppression différent de zéro ou a planté d'une autre manière. Execution failed, exit code was: Echec d'execution, le code de sortie était : didn't start up in time. n'a pas démarré à temps. This error shouldn't come up. Cette erreur ne devrait pas arriver. didn't accept a write operation. N'a pas accepté d'opération en écriture. It is probably not running correctly or crashed in-between. Ça ne marche probablement pas bien ou plante au milieu. Unable to read from xmodmap. Impossible de lire de xmodmap. encountered an unknown error during start up or execution. rencontré une erreur inconnue pendant le démarrage ou l'execution. experienced an undefined error. rencontré une erreur indéfinie. X2Go Client will now terminate. File a bug report as outlined on the <a href="http://wiki.x2go.org/doku.php/wiki:bugs">bugs wiki page</a>. X2Go Client va se terminer maintenant. Enregistrez un rapport de bug comme expliqué sur <a href="http://wiki.x2go.org/doku.php/wiki:bugs">la page de wiki des bugs</a>. Proxy didn't terminate after 3 seconds. Killing the proxy. Le mandataire n'a pas rendu la main après 3 secondes. Tuons le mandataire. Closing X2Go Client because it was started in hidden mode. Fermons X2Go Client parce qu'il a été démarré en mode caché. Closing X2Go Client because the --close-disconnect parameter was passed. Fermons X2Go Client parce que le paramètre --close-disconnect a été fourni. Are you sure you want to terminate this session? Unsaved documents will be lost. Êtes-vous certain que vous voulez mettre fin à cette session ? Les documents qui n'ont pas été sauvegardés seront perdus. <b>Connection failed.</b> : <b>Échec de la connexion.</b> : (file does not exist) (le fichier n'existe pas) (directory does not exist) (le dossier n'existe pas) Invalid value for parameter "--link". Valeur invalide pour le paramètre "--link". Invalid value for parameter "--clipboard". Valeur invalide pour le paramètre "--clipboard". Invalid value for parameter "--sound". Valeur invalide pour le paramètre "--sound". Invalid value for parameter "--geometry". Valeur invalide pour le paramètre "--geometry". Invalid value for parameter "--set-kbd". Valeur invalide pour le paramètre "--set-kbd". Invalid value for parameter "--ldap". Valeur invalide pour le paramètre "--ldap". Invalid value for parameter "--ldap1". Valeur invalide pour le paramètre "--ldap1". Invalid value for parameter "--ldap2". Valeur invalide pour le paramètre "--ldap2". Invalid value for parameter "--pack". Valeur invalide pour le paramètre "--pack". Available pack methods: "pack" ? Méthodes de pack disponibles : Pack Methods Méthodes de Pack Option is not available in this build. "build" ? Cette opton n'est pas disponible dans ce build. Unable to create directory: Incapable de créer le dossier : Cannot open key: Ne peut pas ouvrir la clé : <br>(C) 2005-2016 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> <br>(C) 2005-2016 par <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> <br>X2Go Plugin mode was sponsored by <a href="http://www.foss-group.de/">FOSS-Group GmbH (Freiburg)</a><br> <br>le mode X2Go Plugin a été sponsorisé par <a href="http://www.foss-group.de/">FOSS-Group GmbH (Freiburg)</a><br> <br>This is a client to access the X2Go network-based computing environment. This client will be able to connect to X2Go Server(s) and start, stop, resume and terminate (running) desktop sessions. X2Go Client stores different server connections and may automatically request authentication data from LDAP directories. Furthermore, it can be used as a fullscreen login screen (replacement for login managers like XDM). Please visit <a href="http://www.x2go.org">the project home page at x2go.org</a> for further information. <br>Ceci est un client pour accéder à l'environnement informatique par le réseau X2Go. Ce client sera capable de se connecter à un ou des serveur(s) X2Go et démarrer, arréter, restaurer et mettre fin à des sessions de bureau. X2Go Client conserve differentes connexions serveurs et peut automatiquement demander les données d'authentification à des annuaires LDAP. De plus, il peut être utilisé comme un écran de connexion en plein écran (en replacement des gestionnaires de session comme XDM). Visitez <a href="http://www.x2go.org">la page du projet sur x2go.org</a> pour plus d'information. <b>X2Go Client v. <b>X2Go Client v. Please check LDAP Settings. Vérifiez les réglages LDAP. Check whether the package providing "scdaemon" is installed. The current search path is: Vérifiez si le paquet qui fournit "scdaemon" est installé. Le chemin de recherche en vigueur est : didn't start yet. pas encore démarré. Unable to read from scdaemon. Incapable de lire à partir de scdeamon. No valid card found. Pas de carte valide trouvée. This card is unknown to the X2Go system. Cette carte est inconnue par le système X2Go. Can't start X.Org Server. Please check your installation. Ne peut pas démarrer X.Org Server. Vérifiez votre installation. Remote server does not support file system exports through SSH tunnels. Please update your x2goserver package. Le serveur distant ne gère pas l'export du système de fichiers par des tunnels SSH. Mettez à jour votre paquet x2goserver. Unable to create SSH tunnel for Folder Sharing and Printing support: Incapable de créer le tunnel SSH pour le partage de dossiers et la gestion des impressions : Unable to read: Incapable de lire : Unable to write: Incapable d'écrire : Error getting window geometry. (Did you close the window?) Erreur en prennant la géométrie de la fenêtre. (Est-ce que vous avez fermé la fenêtre ?) Invalid value for argument "speed" Valeur invalide pour le paramètre "speed" Applications ... Applications ... SSH daemon could not be started. Le démon SSH n'a pas pu être démarré. SSH daemon is not running. Le démon SSH n'est pas en cours d'execution. You have enabled Remote Printing or File Sharing. These features require a running and functioning SSH server on your computer. <b>Printing and File Sharing will be disabled for this session.</b> Please also check the <b>Clientside SSH port</b> in the general settings. Vous avez activé l'impression à distance ou le partage de fichier. Vous devez installer et démarrer un serveur SSH sur votre ordinateur pour permettre ces fonctionnalités. <b>L'impression et le partage de fichiers seront désactivés pour cette session.</b> Regardez aussi le <b>port SSH côté client</b> dans les préférences générales. Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server. If you see this message, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Normalement, ceci ne devrait pas arriver car X2Go Client pour Windows vient avec son propre serveur SSH interne. Si vous voyez ce message, faites connaitre ce bug sur : <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> The SSH server failed to start. Le serveur SSH n'a pas pu démarrer. X2Go Client did not detect a globally running SSH server on your machine and was unable to start its own. Please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> X2Go Client n'a pas détecté de serveur SSH en cours d'execution sur votre machine et fut incapable de démarrer son propre serveur SSH. Veuillez rapporter ce bug sur : <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> The SSH server is currently not started. Le serveur SSH n'est pour l'instant pas démarré. On OS X, please follow the following steps to enable SSH service:<ul><li>Open <b>System Preferences</b> (Applications -> System Preferences)</li><li>Go to <b>Sharing</b></li><li>Tick the checkbox besides <b>Remote Login</b></li><li>Check that <b>Allow access for:</b> is set to either:<ul><li>All users: <b>no further steps necessary</b></li><li>Only these users <b>and your user name is included in the list</b></li></ul><li>Optionally, add your user name to the allowed list via the <b>Plus Button</b></li></ul><b>Warning: enabling SSH access will allow any user on the network to connect to your machine. It is your responsibility to set a strong password for every user that is allowed to log in via SSH.</b> Sur OS X, suivez ces étapes pour activer le service SSH :<ul><li>Ouvrez les <b>Préférences Système</b> (Applications -> Préferences Système)</li><li>Allez à <b>Partage</b></li><li>Cochez la case devant <b>Connexion à distance</b></li><li>Vérifiez que <b>Permettre l'accès pour :</b> est soit :<ul><li>Tous les utilisateurs: <b>pas d'autre étape nécessaire</b></li><li>Seulement ces utilisateurs<b> et que votre nom d'utilisateur est dans la liste</b></li></ul><li>En option, ajoutez votre nom d'utilisateur à la liste des autorisations via le <b>Bouton Plus</b></li></ul><b>Attention : permettre l'accès SSH permettra à n'importe quel utilisateur de votre réseau de se connecter à votre machine. Définir un mot de passe difficile à deviner pour chaque utilisateur qui peut se connecter par SSH est de votre responsabilité.</b> Please ask your system administrator to provide the SSH service on your computer. Veuillez demander à votre administrateur système d'activer le service SSH sur votre ordinateur. Disabling Remote Printing or File Sharing support in the session settings will get rid of this message. Désactiver l'impression à distance et la gestion des dossiers partagés dans les réglages de la session évitera l'affichage de ce message. SSH daemon failed to open its public host key. Le démon SSH n'a pas réussi à ouvrir sa clé publique. You have enabled Remote Printing or File Sharing. These features require a running and functioning SSH server on your computer. <b>Printing and File Sharing will be disabled for this session.</b> The SSH server is currently not configured correctly. Please ensure that the server's public exists. Vous avez activé l'impression à distance ou le partage de fichiers. Vous devez installer et démarrer un serveur SSH sur votre ordinateur pour permettre ces fonctionnalités. <b>L'impression et le partage de fichiers seront désactivés pour cette session.</b> Le serveur SSH n'est pas configuré correctement pour l'instant. Vérifiez que la clé publique du serveur existe. Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server and automatically generates the required keys. If you see this message, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Normalement, ceci ne devrait pas arriver car X2Go Client pour Windows vient avec son propre serveur SSH interne et génère automatiquement les clés requises. Si vous voyez ce message, faites connaitre ce bug sur : <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> X2Go Client was unable to create SSH host keys. Please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> X2Go Client n'a pas réussi à créer les clés SSH de l'hôte. Merci de rapporter ce bug sur : <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> On OS X, please follow these steps to generate the required keys:<ul><li>Open a <b>Terminal Window</b> (Applications -> Utilities -> Terminal)</li><li>Run this command: <b>ssh -p Sur OS X, suivez ces étapes pour générer les clés requises :<ul><li>Ouvrez une <b>Fenêtre de Terminal</b> (Applications -> Utilitaires -> Terminal)</li><li>Tapez cette commande : <b>ssh -p Please ask your system administrator to generate the required host keys. If you are administrating this system yourself, please run: <center><b>sudo ssh-keygen -A</b></center> Veuillez demander à votre administrateur système de générer les clés d'hôtes requises. Si vous administrez vous-même ce système, tapez ceci : <center><b>sudo ssh-keygen -A</b></center> SSH daemon failed to open the application's authorized_keys file. Le démon SSH n'a pas réussi à ouvrir le fichier authorized_keys de l'application. Unable to create or append to file: Impossible de créer ou de compléter le fichier : Unable to change the permissions of file: Impossible de changer les permissions du fichier : This is an error because sshd would deny such a file. Ceci est une erreur parce que sshd refuserait un tel fichier. Unable to change the permissions of directory: Impossible de changer les permissions du dossier : This is an error because sshd would deny such a directory. Ceci est une erreur parce que sshd refuserait un tel dossier. Unable to find the sftp-server binary. Neither bundled, nor found in $PATH nor additional directories. Impossible de trouver l'executable sftp-serveur. Ni empaqueté, ni trouvé dans $PATH ni dans les dossiers supplémentaires. If you are using a Linux-based operating system, please ask your system administrator to install the package containing the sftp-server binary. Common names are <b>openssh</b>, <b>openssh-server</b> or <b>openssh-sftp-server</b> depending upon distribution. If the sftp-server binary is installed on your system, please report a bug mentioning its path on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Si vous utilisez un système d'exploitation basé sur Linux, veuillez demander à votre administrateur système d'installer le paquet qui contient le fichier executable sftp-server. Les noms courants sont <b>openssh</b>, <b>openssh-server</b> ou <b>openssh-sftp-server</b> selon la distribution. Si l'executable sftp-server est installé sur votre système, veuillez rapporter le bug en précisant son chemin sur : <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> SSH key type selection error Erreur de selection du type de clé SSH Unknown SSH key selected. Clé SSH selectionnée inconnue. Terminating application. Arrêt de l'application. SSH key base directory creation error Erreur de création du dossier de base de la clé SSH Unable to create SSH key base directory '%1'. Impossible de créer le dossier de base de la clé SSH '%1'. ssh-keygen launching error Erreur de démarrage de ssh-keygen Unable to start the ssh-keygen binary. Impossible de démarrer l'executable ssh-keygen. ssh-keygen crashed ssh-keygen a planté The ssh-keygen binary crashed. L'executable ssh-keygen a planté. ssh-keygen program error Erreur du programme ssh-keygen The ssh-keygen binary did not exit cleanly. L'executable ssh-keygen ne s'est pas terminé proprement. It was probably called with unknown arguments. Il a probablement été appelé avec des arguments inconnus. Unable to open newly generated %1 public host key file. Impossible d'ouvrir le fichier de clé d'hôte publique nouvelle généré %1. %1 public host key file empty. Le fichier de clé d'hôte publique %1 est vide. You have enabled Remote Printing or File Sharing. These features require a running and functioning SSH server on your computer. <b>Printing and File Sharing will be disabled for this session.</b> Vous avez activé l'impression à distance ou le partage de fichiers. Ces fonctionnalités reposent sur un serveur SSH démarré et fonctionnel sur votre ordinateur. <b>L'impression et le partage de fichiers seront désactivés pour cette session.</b> Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server. If you see this message, please report a bug on: Normalement, ceci ne devrait pas arriver parce que X2Go Client pour Windows est livré avec son propre serveur SSH interne. Si vous voyez ce message, veuillez rapporter un bug sur : The SSH server failed to start. Please report a bug on: Le serveur SSH n'a pas démarré. Veuillez rapporter un bug sur : <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server and automatically generates the required keys. If you see this message, please report a bug on: Normalement, ceci ne devrait pas arriver parce que X2Go Client pour Windows est livré avec son propre serveur SSH interne et génère automatiquement les clés requises. Si vous voyez ce message, veuillez rapporter un bug sur : X2Go Client was unable to create SSH host keys. Please report a bug on: X2Go Client n'a pas réussi à créer les clés d'hôte SSH. Veuillez rapporter le bug sur : <br>(C) 2005-2023 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> Translators, feel free to add a localized version of your translation including a copyright notice and your name(s). Remember to keep a <br> at the end, though. English example for a potential translation: <br>(C) 2005-2023 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br>English version: (C) 20AB-20CD Trans Lator <trans@la.tor><br> <br>(C) 2005-2023 par <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> Your current color depth is different from the session's color depth. This may cause problems reconnecting to this session and in most cases <b>you will lose the session</b> and have to start a new one! Votre profondeur de couleur est différente de la profondeur de couleur de la session. Cela peut pauser problème pour se reconnecter et la plupart du temps, <b>vous allez perdre la session</b> et devrez en démarrer une nouvelle! It's highly recommended to change the color depth of your display to %n bit(s) and restart your X.Org Server before you reconnect to this X2Go session. %n will be replaced with a number Il est fortement recommandé de changer la profondeur de couleur de l'affichage à %n bit et redémarrer votre X.Org Server avant de vous reconnecter à cette session X2Go. Il est fortement recommandé de changer la profondeur de couleur de l'affichage à %n bits et redémarrer votre X.Org Server avant de vous reconnecter à cette session X2Go. <br />Do you want to resume this session anyway? <br />Voulez-vous quand même restaurer cette session ? Failed to start RDP or XDMCP client Échec de démarrage du client RDP ou XDMCP Check session settings and ensure that selected client is installed on your system. Check et ensure sont très proches de vérifier. Mais pour éviter la répétition j'ai choisi regarder pour le premier. Regardez les réglages de la session et vérifiez que le client sélectionné est bien installé sur votre système. XDM XDM RDP RDP PulseAudio is not running PulseAudio n'est pas en cours d'execution Sound output will be disabled for this session. Please enable PulseAudio in the configuration dialog or disable sound in the session settings La sortie audio sera désactivée pour cette session. Veuillez activer PulseAudio dans la fenêtre de configuration ou désactivez le son dans les réglages de la session libssh initialization failure Échec d'initialisation de libssh Unable to initialize libssh. Impossible d'initialiser libssh. Enter user account password: Entrez le mot de passe du compte utilisateur : Check whether the package providing "pcsc_scan" is installed. The current search path is: Vérifiez si le paquet qui fournit "pcsc_scan" est installé. Le chemin de recherche en vigueur est : Can't start X.Org Server. Impossible de démarrer le serveur X.Org. Please check your installation. Veuillez vérifier votre installation. X.Org Server did not launch correctly after %n tries. %n will be substituted with the current number of tries Le serveur X.Org n'a pas démarré correctement après %n essai. Le serveur X.Org n'a pas démarré correctement malgré %n essais. A click displays the context menu. Un clic affiche le menu contextuel. X2GoKDrive session Session X2GoKDrive PrintDialog Print Impression Print - X2Go Client Impression - X2Go Client You've deactivated the X2Go Client printing dialog. Vous avez désactivé la fenêtre de dialogue d'impression de X2Go Client. You may reactivate this dialog using the X2Go Client settings dialog. To do so, follow this path in the menu bar: Options -> Settings bizarre cette parenthèse toute seule Vous pouvez réactiver cette fenêtre de dialogue en utilisant la fenêtre des préférences de X2Go Client. Pour ce faire, suivez ce chemin dans la barre de menu : Options -> Préférences) PrintProcess Save File Sauvegarder le fichier PDF Document (*.pdf) Document PDF (*.pdf) Failed to execute command: Echec d'execution de la commande : Printing error. Erreur d'impression. PrintWidget Form Formulaire Print Impression View as PDF Voir en PDF Print settings Réglages de l'impression Printer: Imprimante : Print using default Windows PDF Viewer (Viewer application needs to be installed) Imprimer en utilisant le visualiseur de PDF de Windows par défaut (L'application de visualisation doit être installée) Printer command: Commande d'impression : ... ... Viewer settings Réglages du visualiseur Open in viewer application Ouvrir dans l'application de visualisation Command: Commande : Save to disk Enregistrer sur le disque Show this dialog before start printing Montrer cette fenêtre de dialogue avant de commencer à imprimer Please configure your client side printing settings.<br><br>If you want to print the created file, you'll need an external application. Typically you can use <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> and <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>You can find further information <a href="http://www.x2go.org/index.php?id=49">here</a>. Veuillez configurer vos réglages d'impression côté client.<br><br>Si vous voulez imprimer le fichier créé, vous aurez besoin d'une application externe. Généralement on utilise <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> et <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>Vous trouverez plus d'information <a href="http://www.x2go.org/index.php?id=49">ici</a>. PrinterCmdDialog Please enter your customized or individual printing command. Example: Veuillez entrer votre commande d'impression personnalisée ou spécifique. Exemple : <Path to gsprint.exe> -query -color <Chemin vers gsprint.exe> -query -color Printer command Commande d'impression Command Commande Please enter your customized or individual printing command. Examples: kprinter lpr -P hp_laserjet Veuillez entrer votre commande d'impression personnalisée ou spécifique. Exemples : kprinter lpr -P hp_laserjet Output format Format de sortie Please choose the printing file format (regarding to your printing environment - if you use CUPS you may use PDF) Choisissez le format du fichier d'impression (dépendant de votre environnement d'impression - si vous utilisez CUPS vous pouvez choisir PDF) PDF PDF PS PS Data structure Structure des données Please choose the method of printing file input (some commands accepting printing files as program options, some are awaiting data on standard input): Choisissez la méthode d'impression des fichiers fournis en entrée (certaines commandes prennent les fichiers à imprimer en options de la ligne de commande, d'autres s'attendent à ce qu'on leur fournisse sur l'entrée standard) : standard input (STDIN) Entrée standard (STDIN) Specify path as program parameter Donner le chemin en paramètre au programme PulseManager Unable to find the PulseAudio binary. Neither bundled, nor found in $PATH nor additional directories. Executable PulseAudio introuvable. Ni empaqueté, ni trouvé dans $PATH ni dans aucun dossier supplémentaire. If you downloaded the bundled, pre-compiled version from the official home page, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Si vous avez téléchargé la version empaquetée, pré-compilée à partir du site officiel, veuillez rapporter un bug sur : <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Could not allocate buffer for getting current working directory! Impossible d'allouer un buffer pour obtenir le répertoire courant ! getcwd() failed! getcwd() a échoué ! PulseAudio failed to start! PulseAudio a échoué au démarrage ! Sound support will not be available. If you downloaded the bundled, pre-compiled version from the official home page, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> La prise en charge du son sera indisponible. Si vous avez téléchargé la version empaquetée, pré-compilée à partir du site officiel, veuillez rapporter un bug sur : <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Error fetching PulseAudio version number! Erreur de récupération du numéro de version PulseAudio ! Unexpected character found when parsing version string for major version number Trouvé un caractère inattendu pendant l'interprétation de la chaîne du numéro de version pour trouver le numéro majeur de version Unexpected character found when parsing version string for minor version number Trouvé un caractère inattendu pendant l'interprétation de la chaîne du numéro de version pour trouver le numéro mineur de version Unexpected character found when parsing version string for micro version number Trouvé un caractère inattendu pendant l'interprétation de la chaîne du numéro de version pour trouver le numéro micro de version Supposed to skip major version number. Something is wrong. Censé sauter le numéro de version majeur. Quelque chose ne va pas. Unable to convert major version number string to integer. Impossible de convertir la chaïne du numéro de version majeur en entier. Unable to convert minor version number string to integer. Impossible de convertir la chaïne du numéro de version mineur en entier. Unable to convert micro version number string to integer. Impossible de convertir la chaïne du numéro de version micro en entier. Unexpected format encountered. Rencontré un format inattendu. Unable to start PulseAudio binary. Impossible de démarrer l'executable PulseAudio. Unable to play startup sound. Impossible de jouer le son d'initialisation. If you downloaded the bundled, pre-compiled version from the official home page or the upstream Linux packages, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Si vous avez téléchargé la version empaquetée, pré-compilée à partir du site officiel ou les paquets Linux amonts, veuillez rapporter un bug sur : <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Sound support will not be available. La prise en charge du son sera indisponible. QObject No response received from the remote server. Do you want to terminate the current session? "terminer" ici serait un anglicisme. Aucune réponse reçue du serveur distant. Voulez-vous mettre fin à la session en cours ? X2Go Client could not find any suitable X11 server. X2Go Client n'a pas réussi à trouver un serveur X11 convenable. X2Go Client could not start X11 server. X2Go Client n'a pas réussi à démarrer le serveur X11. X2Go Client requires XQuartz to be installed. If XQuartz is already installed on your system, please select the correct path in the now upcoming dialog. Refer to the end of this message for path examples, in case you do not know the exact location yourself. Should you have <b>not</b> installed XQuartz yet, please follow the outlined steps: X2Go Client a besoin d'avoir XQuartz installé. Si XQuartz est déjà installé sur le système, veuillez sélectionner le chemin correct dans la fenêtre de dialogue qui va apparaitre maintenant. Vous trouverez des exemples de chemins ci-dessous, au cas où vous ne connaitriez pas l'emplacement exact. Si vous n'avez <b>pas encore</b> installé XQuartz, veuillez suivre les recommandations ci-après : MacPorts users, please install either the port <b>xorg-server</b> or the port <b>xorg-server-devel</b>. Upon successful installation, please follow the instructions printed by the port utility to autostart/load the server. All other users, please obtain and install XQuartz from: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> Afterwards, restart X2Go Client and select the correct path to the X11 application in the general X2Go Client settings. This will most likely be <center><b>/Applications/MacPorts/X11.app</b></center> or <center><b>/Applications/Utilities/XQuartz.app</b></center> Utilisateurs de MacPorts, installez soit le port <b>xorg-server</b>, soit le port <b>xorg-server-devel</b>. Une fois l'installation réussie, suivez les instructions fournies par l'utilitaire du port pour le démarrage et le chargement automatiques du serveur. Pour tous les autres utilisateurs : téléchargez et installez XQuartz à partir de : <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> Puis redémarrez X2Go Client et spécifiez le chemin correct de l'application X11 dans les réglages dans les préférences générales de X2Go Client. Ce sera probablement <center><b>/Applications/MacPorts/X11.app</b></center> ou <center><b>/Applications/Utilities/XQuartz.app</b></center> SessionButton Delete session Supprimer cette session Session actions Actions sur cette session Select type Choisir le type Select resolution Choisir la résolution Toggle sound support Activer ou désactiver le son New Session Nouvelle session running en cours suspended suspendue KDE KDE RDP connection Connection RDP XDMCP XDMCP Connection to local desktop Connection au bureau local Published applications Applications publiées fullscreen plein écran Display Affichage window fenêtre Maximum Maximum Enabled Activé Disabled Désactivé Session preferences ... Réglages de la session ... Create session icon on desktop ... Créer un icône pour cette session sur le bureau ... SessionExplorer Back Retour Create session icon on desktop Créer une icone de session sur le bureau Desktop icons can be configured not to show x2goclient (hidden mode). If you like to use this feature you'll need to configure login by a gpg key or gpg smart card. Use x2goclient hidden mode? Les icones de bureau peuvent être configurées pour ne pas afficher X2Go Client (mode caché). Si vous voulez utiliser cette fonctionnalité, vous aurez besoin de configurer l'identification par clef GPG ou par Smart Card GPG. Utiliser le mode caché de X2Go Client ? Show session tray icon when running Montrer l'icone de session dans la barre d'état, pendant l'utilisation New Session Nouvelle session X2Go Link to session Lien X2Go vers la session Are you sure you want to delete this session? Êtes vous certain(e) de vouloir effacer cette session ? Create session icon on desktop. Créer une icone de session sur le bureau. Desktop icons can be configured not to show X2Go Client (hidden mode.) If you like to use this feature you'll need to configure login via a GPG key or GPG Smart Card. Use X2Go Client's hidden mode? Les icônes de bureau peuvent être configurés pour ne pas montrer le X2Go Client (mode caché). Si vous voulez utiliser cette fonctionnalité vous devrez configurer l'identification par une clé GPG ou une smartcard GPG. Utiliser le mode caché de X2Go Client ? SessionManageDialog E&xit &Fermer &New session &Nouvelle session &Session preferences &Réglages de la session &Delete session &Effacer la session &Create session icon on desktop... &Créer une icone de session sur le bureau... Delete Delete Effacer Session management Gestion des sessions &Create session icon on desktop ... &Créer un icône pour la session sur le bureau ... SessionWidget Session name: Nom de la session : << change icon << changer d'icône &Server &Serveur Host: Hôte : Login: Identifiant : SSH port: Port SSH : Use RSA/DSA key for ssh connection: Utiliser une clé RSA/DSA pour la connexion SSH : Kerberos 5 (GSSAPI) authentication Authentification Kerberos 5 (GSSAPI) Use Proxy server for SSH connection Utiliser un serveur mandataire pour la connexion SSH Proxy server Serveur mandataire SSH SSH HTTP HTTP Same login as on X2Go Server Même identifiant que sur le serveur X2Go Same password as on X2Go Server Même mot de passe que sur le serveur X2Go RSA/DSA key: Clé RSA/DSA : Type: Type : Port: Port : &Session type Type de &session Session type: Type de session : XDMCP XDMCP Connect to local desktop Se connecter au bureau local Custom desktop Bureau personnalisé Single application Application spécifique Published applications Command: Commande : Advanced options... Options avancées... Path to executable Chemin vers l'executable RDP port: Port RDP : Open picture Ouvrir une image Pictures Images Open key file Ouvrir le fichier de la clé All files Tous les fichiers Server: Serveur : XDMCP server: Serveur XDMCP : rdesktop command line options: options de la ligne de commande rdesktop : New session Nouvelle session Error Erreur Delegation of GSSAPI credentials to the server Délégation de l'identification GSSAPI au serveur Path: Chemin : Try auto login (via SSH Agent or default SSH key) Essayer l'authentification automatique (via l'agent SSH ou la clé SSH par défaut) SSH Agent or default SSH key Agent SSH ou clé SSH par défaut Connect to Windows Terminal Server Se connecter au serveur de terminaux Windows Direct RDP connection Connection RDP directe X2Go Client is running in portable mode. You should use a path on your USB device to be able to access your data wherever you are. X2Go Client est démarré en mode portable. Vous devriez utiliser un chemin sur votre appareil USB pour pouvoir accéder à vos données où que vous soyez. Values ranging from <b>0</b> to <b>65535</b> are allowed.<br />A value of <b>0</b> will either use the port specified in the SSH configuration file belonging to a host or shortname, or use the default of <b>22</b>. Les valeurs entre <b>0</b> et <b>65535</b> sont autorisées.<br />Une valeur de <b>0</b> va soit utiliser le port donné dans le fichier de configuration de SSH appartenant à l'hôte ou nom court, soit utiliser la valeur par défaut <b>22</b>. Direct XDMCP connection Connexion XDMCP directe direct XDMCP connection connexion XDMCP directe Run in X2GoKDrive (experimental) Démarrer dans X2GoKDrive (expérimental) X2Go/X11 Desktop Sharing Bureau X2Go/X11 Partagé SettingsWidget &Display &Affichage &Keyboard &Clavier Fullscreen Plein écran Custom Personnalisé Window Fenêtre Use whole display Occuper tout l'écran Maximum available Le maximum disponible Set display DPI Régler la définition (en point par pouce) Xinerama extension (support for two or more physical displays) Extension Xinerama (gestion de plusieurs écrans physiques) Width: Largeur : Height: Hauteur : &Display: &Ecran : &Identify all displays &Identifier tous les écrans Additional parameters: Paramètres supplémentaires : Command line: Ligne de commande : us us us pc105/us pc105/us password Mot de passe Do not configure keyboard Ne pas configurer le clavier Configure keyboard Configurer le clavier Model: Modèle : Layout: Disposition : Variant: Variante : Bidirectional copy and paste Copier-coller dans les deux sens Copy and paste from client to server copier-coller du client au serveur Copy and paste from server to client Copier-coller du serveur vers le client Disable clipboard completely Complètement désactiver le presse-papier &Clipboard mode Mode du &presse-papier Auto-detect keyboard settings Détection automatique des réglages du clavier RDP client Client RDP XDMCP client client XDMCP FreeRDP/X11 (pre-2.x style options) FreeRDP/X11 (style d'options pre-2.x) FreeRDP/X11 (2.x style options) FreeRDP/X11 (style d'options 2.x) ShareWidget &Folders &Dossiers Path Chemin Automount Monter automatiquement Add Ajouter Delete Enlever Path: Chemin : Select folder Choisir un dossier Filename encoding Encodage des noms des fichiers WINDOWS-1252 WINDOWS-1252 ISO8859-1 ISO8859-1 local: local : remote: distant : Error Erreur Use SSH port forwarding to tunnel file system connections through firewalls Transmettre le système de fichier par un tunnel SSH pour passer à travers les pare-feux X2Go Client is running in portable mode. You should use a path on your USB device to be able to access your data wherever you are. X2Go Client est démarré en mode portable. Vous devriez utiliser un chemin sur votre appareil USB pour pouvoir accéder à vos données où que vous soyez. SshMasterConnection SSH proxy connection error: Erreur de connexion au mandataire SSH : Cannot connect to Ne peut pas se connecter à channel_request_exec failed échec de channel_request_exec SSH proxy connection error. Erreur de connexion au mandataire SSH. Failed to create SSH proxy tunnel. Impossible de créer le tunnel par mandataire SSH. Cannot initialize libssh. Échec à l'initialisation de libssh. Cannot create SSH session. Ne peut pas créer la session SSH. Cannot connect to proxy server. Impossible de se connecter au serveur mandataire. Authentication failed. Echec de l'authentification. Failed to start SSH client. Please check your installation and GSSApi configuration. Impossible de démarrer le client SSH. Veuillez vérifier votre installation et la configuration de GSSApi. Check your GSSApi configuration or choose another authentication method. Vérifiez la configuration de votre GSSApi ou choisissez une autre méthode d'authentification. Cannot open file Impossible d'ouvrir le fichier Cannot create remote file Impossible de créer le fichier distant Cannot write to remote file Impossible d'écrire dans le fichier distant channel_open_forward failed. échec de channel_open_forward. channel_open_session failed. échec de channel_open_session. Error writing to socket. Erreur lors de l'écriture dans un socket. Error reading channel. Erreur lors de la lecture du canal. channel_write failed. échec de channel_write. Error reading from TCP socket. Erreur de lecture à partir du socket TCP. Using environment-provided username. Utilisation du nom d'utilisateur fourni par l'environnement. %1 failed. Argument in this context will be a function name. échec de %1. Reconnect session Reconnecter la session SshProcess Error binding Erreur de connexion Error creating socket. Erreur de création de socket. XSettingsWidget Open File Ouvrir un fichier Executable (*.exe) Exécutable (*.exe) XSettingsWidgetUI Form Formulaire You must restart the X2Go Client for the changes to take effect Vous devez redémarrer X2Go Client pour que les modifications soient prises en compte use integrated X-Server utiliser le serveur X intégré use custom X-Server utiliser un serveur X spécifique custom X-Server Serveur X spécifique executable: exécutable : start X-Server on X2Go Client start "Client X2Go" ? démarrer le serveur X au démarrage de X2Go Client command line options: Options de la ligne de commande : X-Server command line options Options de la ligne de commande du serveur X window mode: mode fenêtré : fullscreen mode: mode plein écran : single application: application spécifique : do not use primary clipboard ne pas utiliser le presse-papier principal whole display: "tout l'affichage" ? toute la place : x2goclient-4.1.2.3/res/i18n/x2goclient_nb_no.ts0000644000000000000000000055355314447111613016016 0ustar AppDialog Published Applications Publiserte applikasjoner Search: Søk: &Start &Start &Close &Lukk Multimedia Multimedia Development Utvikling Education Opplæring Game Spill Graphics Grafikk Network Nettverk Office Kontor Settings Innstillinger System System Utility Verktøy Other Andre BrokerPassDialogUi Dialog Dialog Old password: Gammelt passord: New password: Nytt passord: Confirm password: Bekreft passordet: TextLabel TekstMerke BrokerPassDlg Passwords do not match Passordene stemmer ikke overens CUPSPrintWidget Idle Inaktiv Printing Skriver Stopped Stoppet Yes Ja No Nei Form Skjema Name: Navn: Properties Egenskaper State: Status: Accepting jobs: Aksepterer jobber: Type: Type: Location: Plassering: Comment: Kommentar: CUPSPrinterSettingsDialog No option selected Ingen alternativer er valgt This value is in conflict with other option Dette alternativet er i konflikt med et annet alternativ Options conflict Alternativskonflikt This value is in conflict with another option. Dette alternativet er i konflikt med et annet alternativ. Options conflict. Alternativskonflikt. ConTest Connectivity test Tilkoblingstest HTTPS connection: HTTPS tilkobling: SSH connection: SSH tilkobling: Connection speed: Sambandsfart: Failed Feilet 0 Kb/s 0 Kb/s OK OK Socket operation timed out Sokkel handlingen ble tidsavbrutt Failed: Feilet: Socket operation timed out. Socket handlingen ble tidsavbrutt. ConfigDialog General Generelt Display icon in system tray Vis ikon i systemkurven Hide to system tray when minimized Skjul til systemkurven ved minimering Hide to system tray when closed Skjul til systemkurven ved lukking Hide to system tray after connection is established Skjul til systemkurven etter at tilkoblingen er opprettet Restore from system tray after session is disconnected Gjenopprett fra systemkurven etter at økten er frakoblet Use LDAP Benytt LDAP Server URL: Server URL: BaseDN: BaseDN: Failover server 1 URL: URL til reserveserver 1: Failover server 2 URL: URL til reserveserver 2: X-Server settings X-Server innstillinger X11 application: X11 applikasjon: X11 version: X11 versjon: Find X11 application Søk X11 applikasjon Clientside SSH port for file system export usage: Klientside SSH port for bruk ved eksport av filsystem: Start session embedded inside website Start økt innebygd i nettsiden Advanced options Avanserte alternativer Defaults Standardoppsett &OK &OK &Cancel &Avbryt Settings Innstillinger Printing Utksrift Warning Advarsel x2goclient could not find any suitable X11 Application. Please install Apple X11 or select the path to the application x2goclient kan ikke finne en passende X11 applikasjon. Vennligst installer Apple X11, eller oppgi stien til applikasjonen Your are using X11 (Apple X-Window Server) version Du benytter X11 (Apple X-Window Server) versjon . This version causes problems with X-application in 24bit color mode. You should update your X11 environment (http://trac.macosforge.org/projects/xquartz). . Denne versjonen forårsaker problemer med X-applikasjoner i 24biters fargemodus. Du burde oppdatere ditt X11 oppsett (http://trac.macosforge.org/projects/xquartz). No suitable X11 application found in selected path Ingen passende X11 applikasjon ble funnet i valgt sti &Connection &Tilkobling &Settings &Innstillinger &Input/Output &Inndata/Utdata &Media &Media X.Org Server settings X.Org Server innstillinger Clientside (local) SSH daemon port for file system export usage: Klientside SSH port for bruk ved eksport av filsystem: Pulseaudio settings Pulseaudio innstillinger Disable audio input Skru av lydopptak <font size="5">You must restart the X2Go Client for the changes to take effect</font><br><br> <font size="5">Du må restarte X2Go klienten for at endringene skal tre i kraft</font><br><br> Your XQuartz version is too old. Din XQuartz versjon er for gammel. Your are using XQuartz (X Window System Server for OS X) version %1. Du benytter XQuartz (OS X X Window System Server) versjon %1. This version causes problems with X applications in 24bit color mode. You should update your X11 environment. MacPorts users please follow the steps outlined on: <center><a href="https://guide.macports.org/chunked/using.common-tasks.html">https://guide.macports.org/chunked/using.common-tasks.html</a></center> Users who have installed XQuartz via the installer package can find updated versions on: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> Denne versjonen lager problemer med X-program som kjører med 24bit fargemodus. Du burde oppgradere ditt X11 oppsett. MacPorts brukere, vennligst følg denne beskrivelsen: <center><a href="https://guide.macports.org/chunked/using.common-tasks.html">https://guide.macports.org/chunked/using.common-tasks.html</a></center> Brukere som har installert XQuartz via installasjonspakke kan finne oppdaterte versjoner på: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> No valid XQuartz application selected. Ingen gyldig XQuartz applikasjon ble valgt. You did not select a valid XQuartz application. Please try again. Some standard installation locations may be: <center><b>/Applications/Utilities/X11.app</b></center> <center><b>/Applications/Utilities/XQuartz.app</b></center> <center><b>/Applications/MacPorts/X11.app</b></center> Du valgte ingen gyldig XQuartz applikasjon. Vennligts forsøk igjen. Noen vanlige lokasjoner er: <center><b>/Applications/Utilities/X11.app</b></center> <center><b>/Applications/Utilities/XQuartz.app</b></center> <center><b>/Applications/MacPorts/X11.app</b></center> PulseAudio settings PulseAudio innstillinger Disable sound input Skru av lydopptak Disable PulseAudio Skru av PulseAudio ConnectionWidget &Connection speed &Sambandsfart Connection speed: Sambandsfart: C&ompression &Komprimering Method: Metode: Compression method: Komprimeringsmetode: Image quality: Bildekvalitet: CupsPrinterSettingsDialog Dialog Dialog General Generelt Page size: Arkstørrelse: Paper type: Papirtype: Paper source: Papirkilde: Duplex Printing Tosidig utskrift None Ingen Long side Langsiden Short side Kortsiden Driver settings Driver innstillinger Option Alternativ Value Verdi No option selected Ingen alternativer er valgt text tekst EditConnectionDialog &Session &Økt &Connection &Tilkobling &Settings &Innstillinger &Shared folders &Delte mapper &OK &OK &Cancel &Avbryt Defaults Standardoppsett Session preferences - Øktinnstillinger - &Input/Output &Inndata/Utdata &Media &Media ExportDialog &Cancel &Avbryt &share d&el &Preferences ... &Innstillinger ... &Custom folder ... &Egentilpasset mappe ... Delete Delete Slett share folders del mapper Select folder Velg mappe Share Folders Del mapper FolderButton Sessions folder Øktmappe FolderExplorer Folders Mapper Create New Folder Lag en ny mappe Rename Folder... Lag nytt navn på mappe... Change Icon... Endre ikon ... Delete Folder... Slett mappe... Open picture Åpne bilde Pictures Bilder X2Go Client X2Go klient Folder Name: Navn på mappe: Error Feil Unable to remove " Klarte ikke å fjerne " ". Folder is not empty. Please remove content of folder and try again. " mappen er ikke tom. Fjern innholdet i mappa, og forsøk pånytt. Delete folder " Slett mappe " New Folder Ny mappe Rename Folder ... Lag nytt navn på mappe ... Change Icon ... Endre ikon ... Delete Folder ... Slett mappe ... ". Folder is not empty. Please remove the contents of this directory and try again. ". Mappen er ikke tom. Fjern innholdet i mappa, og forsøk pånytt. Help Shows this message. Vis denne meldingen. Prints version information. Skriv ut informasjon om versjon. Shows the changelog. Vis endringsloggen. Shows git information as used at compile time. [Deprecated: please use --version.] Vis git informasjon som ble brukt ved kompilering. [Avlegs: bruk heller --version.] Shows available pack methods. Viser tilgjengelige pakkemetoder. Do not resume sessions automatically. Ikke gjennoppta økter automatisk. Hides menu bar. Skjuler menylinja. Disables session editing. Fjerner mulighet for å redigerer økter. Starts maximized. Starter maksimert. Starts hidden (minimized to system tray where available.) Starter skjult (minimalisert til systemkurven, om tilgjengelig.) Starts in "portable" mode. Starter i "flyttbar" modus. Forces OpenPGP smart card authentication. Tvinger OpenPGP smartcard modus. Enables Xinerama by default. Skrur på Xinerama som standard. Allows client side printing in LDAP mode. Tillatt klientside utskriftsstøtte i LDAP-modus. Enables thinclient mode. Starts without a window manager. Skrur på tynnklientmodus. Starer uten en vindusbehandler. Enables shutdown button. Muliggjør skruav-knapp. Adds RSA key fingerprint to ".ssh/known_hosts" if authenticity of the server can't be determined. Legger RSA nøkkel fingeravtrykk til ".ssh/known_hosts" hvis autentisiteten til serveren ikke kan fastslås. Starts with LDAP support. Example: --ldap=ldapserver:389:o=organization,c=de Starter med LDAP støtte. Eksempel: --ldap=ldapserver:389:o=organisasjon,c=no Defines the first LDAP failover server. Definerer første LDAP reserveserver. Defines the second LDAP failover server. Definerer andre LDAP reserveserver. Defines the remote SSH server port. Default: 22. Definerer SSH port på fjernserver. Standard: 22. Defines the local machine's SSH server port. Needed for Client-Side Printing and File Sharing support. Default: 22. Definerer porten på lokal maskin som brukes for SSH server. Dette trengs for å kunne skrive ut lokalt, og for fildeling. Standard er: 22. Sets the default command. Default: 'KDE' (Desktop Session) Setter standard-kommando. Standard er 'KDE' (Skriverbordsøkt) Starts the session named "session". Starter økt kalt "session". Sets the user name for connecting to the remote SSH server to "username". Setter brukernavnet som brukes for å koble til SSH-server til "username". Sets the default window geometry. Default: 800x600. Setter størrelsen på standardvindu. Standard: 800x600. Sets the remote X2Go Agent's DPI value to "dpi". Default: same as local display. Setter ekstern X2Go Agent sin DPI-verdi til 'dpi'. Standard: samme som lokalt. Sets the default link type. Default: "adsl". Setter standard oppkoblingstype. Standard: "adsl". Sets default pack method. Default: "16m-jpeg-9". Setter standard kompresjonsmetode. Standard: "16m-jpeg-9". Sets the default clipboard mode. Default: "both". Setter stanard klippebord modus. Standard: "begge". Sets the default keyboard layout to "layout". "layout" may be a comma-separated list. Setter standard tastaturtype til "layout", dette kan være en kommaseparert liste. Sets the default keyboard type. Setter standard tastaturtype. Sets the user's home directory. Setter brukerens hjemmeområde. Enables or disables overwriting the current keyboard settings. Aktiverer eller deaktiverer muligheten for å overstyre gjeldendene tastaturoppsett. Automatically launches the application(s) "app", "app2", ... on session start in Published Applications mode. Starter autonatisk applikasjon "app", "app2", ... når X2Go klient er startet i såkalt Published Applications mode. Defines an alternative session config file path. Definerer stien til en alternativ øktkonfigurasjonsfil. Force-enables session system tray icon. Tvinger bruk av ikon i oppgavekurven. Automatically closes X2Go Client after a disconnect. Lukker X2Go klienten automatisk etter avslutting. Hides all Folder-Sharing-related options. Skjuler alle valg som har med fildeling å gjøre. Sets the broker name to display in X2Go Client. This parameter is optional. Setter meglernavnet som visningsnavn i X2Go klienten. Dette er valgfritt. Sets the path to an SSH key to use for authentication against an SSH session broker. The client's behavior is undefined if this flag is used for non-SSH session brokers. Sett stien til SSH-nøkkelen som skal brukes ved autentisering mot en såkalt SSH session broker. Dette valget kan ha en udefinert virkemåte om du ikke autentisering mot en SSH session broker. Enables the use of the default SSH key or SSH agent for authentication against an SSH session broker. The client's behavior is undefined if this flag is used for non-SSH session brokers. Aktiverer bruken av standard SSH-nøkkel eller SSH-agent ved autentisering mot en såkalt SSH session broker. Dette valget kan ha en udefinert virkemåte om du ikke autentisering mot en SSH session broker. Does not ask for user credentials during session broker authentication. This can be useful if you are using an HTTP(S) session broker without authentication. If you run an HTTP(S) server without authentication, but with user-specific profiles, then put the user name into the broker URL (refer to --broker-url.) The user name then will be extracted from the broker URL and be sent to the session broker. The client's behavior is undefined if this flag is used for non-HTTP(S) session brokers. Spør ikke om brukerens legitimasjon ved autentisering mot broker. Dette kan være nyttig om du bruker HTTP(S) session-broker uten autentisering. Om du bruker en HTTP(S) uten autentisering, men med bruker-spesifikke profiler, så putter du brukernavnet inn i broker URL (se --broker-url). Brukernavnet vil så bli hentet fra broker-url, og sendt til session-broker. Dette valget kan ha en udefinert virkemåte om du ikke benytter deg av en HTTP(S) session-broker. Disable PulseAudio. Skru av PulseAudio. Disable sound input. Skru av lydopptak. Use broker credentials as session user/password credentials when using broker mode with broker authentication. Currently only affects direct RDP sessions. Bruk broker legitimasjon som brukernavn/passord for en økt når du bruker broker med broker-autentisering. Dette valget gjelder foreløpig kun for RDP økter. Use a custom/branded background image (SVG format) for X2Go Client's main window. If a directory is given, will randomly pick an SVG file inside of it. Bruk et eget bakgrunnsbilde (SVG format) i X2Go klienten sitt hovedvindu. Hvis en mappe oppgis, så vil en tilfeldig valgt SVG fil bli brukt. Use a custom icon (SVG format) for additional branding to replace the default in the lower left corner of X2Go Client's main window. Bruk et eget ikon (SVG format), bytter ut ikonet som er nede i venstre hjørne i X2Go klienten sitt hovedvindu. Enables broker logout button. Aktiverer logut-knappen i broker. Disables X2Go Client's UNIX cleanup helper. This will prevent X2Go Client from terminating spawned processes after the main program terminates or crashes. Use with care and when in doubt, do not use this parameter at all. Skrur av X2Go klienten sin UNIX ryddehjelper. Dette vil forhindre X2GO klienten fra å avslutte prosesser selv om hovedprogrammet avsluttes eller krasjer. Må brukes med forsiktighet, og er du i tvil, så ikke bruk dette parameteret. HelpDialog Options Alternativer HttpBrokerClient us no pc105/us pc105/no Host key for server changed. It is now: Vertsnøkkel for serveren har endret seg. Den er nå: For security reasons, connection will be stopped Av hensyn til sikkerheten vil tilkoblingen bli stoppet The host key for this server was not found but an othertype of key exists.An attacker might change the default server key toconfuse your client into thinking the key does not exist Vertsnøkkelen for denne serveren ble ikke funnet, men en annen type av nøkkel eksisterer. En angriper kan endre standard servernøkkel for å lure klienten din til å tro at nøkkelen ikke finnes Could not find known host file.If you accept the host key here, the file will be automatically created Kan ikke finne "known host" filen. Om du aksepterer vertsnøkkelen her vil filen automatisk bli opprettet The server is unknown. Do you trust the host key? Public key hash: Serveren er ukjent. Stoler du på vertsnøkkelen? Offentlig nøkkel: Host key verification failed Verifiseringen av vertsnøkkelen feilet Yes Ja No Nei Enter passphrase to decrypt a key Oppgi passordfrase for å dekryptere en nøkkel Authentication failed Autentisering feilet Error Feil Login failed!<br>Please try again Innlogging feilet! <br>Vennligst forsøk igjen <br><b>Server uses an invalid security certificate.</b><br><br> <br><b>Servereren benytter et ugyldig sikkerhetssertifikat.</b><br><br> <p style='background:#FFFFDC;'>You should not add an exception if you are using an internet connection that you do not trust completely or if you are not used to seeing a warning for this server.</p> <p style='background:#FFFFDC;'>Du burde ikke legge til et unntak om du benytter en internett forbindelse som du ikke stoler 100% på, eller om du ikke er vant med å se advarsler for denne serveren.</p> Secure connection failed Sikker tilkobling feilet Issued to: Utstedt til: Common Name(CN) Navn (CN) Organization(O) Organisation (O) Organizational Unit(OU) Organisasjonsenhet (OU) Serial Number Serienummer Issued by: Utstedt av: Validity: Gyldighet: Issued on Utstedt den expires on Utløper den Fingerprints: Fingeravtrykk: SHA1 SHA1 MD5 MD5 Exit X2Go Client Avslutt X2Go Klienten Add exception Legg til unntak Your session was disconnected. To get access to your running session, please return to the login page or use the "reload" function of your browser. Sesjonen din ble koblet ned. For å få tilgang til den kjørende sesjonen din, vennligst returner til innloggingssiden, eller benytt "oppdater" funksjonen i nettleseren din. Verification code: Verifikasjonskode: For security reasons, the connection attempt will be aborted. Av sikkerhetshensyn, vil tilkoblingen bli stoppet. The host key for this server was not found but another type of key exists. An attacker might have changed the default server key to trick your client into thinking the key does not exist yet. Vertsnøkkelen for denne serveren ble ikke funnet, men en annen type av nøkkel eksisterer. En angriper kan ha endret standard servernøkkel for å lure klienten din til å tro at nøkkelen ikke finnes ennå. Could not find known hosts file. If you accept the host key here, the file will be automatically created. Kan ikke finne known host filen. Om du aksepterer vertsnøkkelen her vil filen automatisk bli opprettet. Host key verification failed. Verifiseringen av vertsnøkkelen feilet. Authentication failed. Autentisering feilet. Login failed!<br>Please try again. Innlogging feilet! <br>Vennligst forsøk igjen. Secure connection failed. Sikker tilkobling feilet. Enter user account password: Oppgi passordet til brukerkontoen: InteractionDialog Terminal output: Terminal utdata: Cancel Avbryt Reconnect Koble til på nytt MediaWidget Sound Lyd Enable sound support Aktiver lydstøtte Start sound daemon Start lydtjeneren Use running sound daemon Benytt kjørende lydtjener Use SSH port forwarding to tunnel sound system connections through firewalls Benytt SSH port videresendring for å tunnelere lydsystem forbindelser gjennom brannmurer Use default sound port Benytt standard lyd port Sound port: Lydport: Client side printing support Klientside utskrifts støtte Deprecation Warning Utfasingsvarsel ARTS support is scheduled to be removed soon. Please upgrade to PulseAudio. Støtte for ARTS er planlagt å snart bli fjernet. Oppgradert til PulseAudio. ESounD support is scheduled to be removed soon. Please upgrade to PulseAudio. Støtte for EsoundD er planlagt å snart bli fjernet. Oppgradert til PulseAudio. ONMainWindow us no pc105/us pc105/de Support ... Støtte ... Session: Økt: &Quit &Avslutt Ctrl+Q Ctrl+Q Quit Avslutt &New Session ... &Neue Sitzung ... Ctrl+N Ctrl+N Session Management... Sitzungsverwaltung... Ctrl+E Ctrl+E LDAP &Settings ... LDAP &Konfiguration ... Restore toolbar Gjenopprett verktøylinjen About X2GO Client Über X2GO Client About Qt Om Qt Session Økt Ctrl+Q exit Ctrl+Q &Session &Økt &Options &Innstillinger &Help &Hjelp Verification code: Verifikasjons kode: This can be an indication of a man-in-the-middle attack. Somebody might be eavesdropping on you. For security reasons, it is recommended to stop the connection. Do you want to terminate the connection? Dette kan være et tegn på såkalt man-in-the-middle angrep. Noen kan forsøke å avlytte din forbindelse. Av hensyn til din sikkerhet, så bør du avbryte tilkoblingen. Vil du avbryte tilkoblingen? If you accept the new host key the security of your connection may be compromised. Do you want to update the host key? Hvis du aksepterer den nye vertsnøkkelen, så kan din tilkobling bli avlyttet. Vil du oppdateren den nye vertsnøkkelen? The host key for this server was not found but an othertype of key exists. An attacker might change the default server key to confuse your client into thinking the key does not exist. For security reasons, it is recommended to stop the connection. Do you want to terminate the connection? Vertsnøkkelen for denne serveren ble ikke funnet, men en annen type nøkkel finnes. En angriper kan endre standard vertsnøkkel for serveren for å lure din klient til å tro at nøkkelen ikke finnes. Av hensyn til din sikkerhet så bør du avbryte tilkoblingen. Vil du avbryte tilkoblingen? New session started Ny økt startet Session resumed Økt gjenopptatt Unable to create folder: Klarer ikke å opprette katalogen: Unable to write file: Klarer ikke å skrive til filen: Emergency exit. Avsluttning grunnet nødstilfelle. Waiting for proxy to exit. Venter på at proxy skal avslutte. Failed, killing the proxy. Feilet, dreper derfor proxy. Wrong parameter: Feil parameter: RSA file empty. RSA filen er tom. Can not open key: Kan ikke åpne nøkkelfilen: Card not configured. Kortet er ikke konfigurert. Error getting window geometry (window closed)? Feil under uthenting av vindusgeometrien (Er vinduet lukket)? Password: Passord: Keyboard layout: Tastatur utseende: Ok Ok Cancel Avbryt Applications... Applikasjoner... Invalid reply from broker Ugyldig svar fra megleren Error Feil KDE KDE on Login: Brukernavn: Select session: Velg økt: Resume Gjenoppta Suspend Hvilemodus Terminate Avslutte New Ny Display Skjerm Status Status Server Server Creation Time Startzeit Client IP Klient IP running aktiv suspended i hvilemodus Unable to create Folder: Ordner kann nicht erzeugt werden: Unable to write File: Datei kann nicht geschrieben werden: Unable to create SSL Tunnel: Klarer ikke å opprette SSL tunnel: Warning Advarsel connecting kobler til starting starter resuming gjenopptar Connection timeout, aborting Tilkoblingen tidsavbrutt, avbryter aborting avbryter <b>Session ID:<br>Server:<br>Username:<br>Display:<br>Creation Time:<br>Status:</b> <b>Sitzungs ID:<br>Server:<br>Login:<br>Display:<br>Startzeit:<br>Status:</b> Abort Avbryt Show Details Zeige Details (can't open file) (kan ikke åpne filen) (file not exists) (filen finnes ikke) (directory not exists) (mappen finnes ikke) wrong value for argument"--link" ugyldig verdi for parameteren "--link" wrong value for argument"--sound" ugyldig verdi for parameteren "--sound" wrong value for argument"--geometry" ugyldig verdi for parameteren "--geometry" wrong value for argument"--set-kbd" ugyldig verdi for parameteren "--set-kbd" wrong value for argument"--ldap" ugyldig verdi for parameteren "--ldap" wrong value for argument"--pack" ugyldig verdi for parameteren "--pack" wrong parameter: ugyldig parameter: Available pack methodes: Tilgjengelige pakkemetoder: Support Støtte </b><br> (C. 2005-2016 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br> </b><br> (C. 2005-2016 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br> Please check LDAP Settings Vennligst sjekk LDAP innstillingene no X2Go Server found in LDAP ingen X2Go server ble funnet i LDAP Are you sure you want to delete this Session? Sind Sie sicher, dass Sie die Sitzung löschen wollen? <b>Connection failed</b> <b>Tilkoblingen feilet</b> No Server availabel es konnte kein Server gefunden werden Session ID Økt ID suspending setter i hvilemodus terminating avslutter <b>Connection failed</b> : <b>Tilkoblingen feilet</b> : Share Folder... Ordner freigeben... Usage: x2goclient [Options] Options: --help Print this message --help-pack Print availabel pack methods --no-menu Hide menu bar --maximize Start maximized --add-to-known-hosts Add RSA key fingerprint to .ssh/known_hosts if authenticity of server can't be established --ldap=<host:port:dn> Start with LDAP Support. Example: --ldap=ldapserver:389:o=organization,c=de --command=<cmd> Set default command, default value 'KDE' --sound=<0|1> Enable sound, default value '1' --geomerty=<W>x<H>|fullscreen Set default geometry, default value '800x600' --link=<modem|isdn|adsl|wan|lan> Set default link type, default 'lan' --pack=<packmethod> Set default pack method, default '16m-jpeg-9' --kbd-layout=<layout> Set default keyboard layout, default 'us' --kbd-type=<typed> Set default keyboard type, default 'pc105/us' --set-kbd=<0|1> Overwrite current keyboard settings, default '0' Usage: x2goclient [Options] Options: --help Print this message --help-pack Print availabel pack methods --no-menu Hide menu bar --maximize Start maximized --add-to-known-hosts Add RSA key fingerprint to .ssh/known_hosts if authenticity of server can't be established --ldap=<host:port:dn> Start with LDAP Support. Example: --ldap=ldapserver:389:o=organization,c=de --command=<cmd> Set default command, default value 'KDE' --sound=<0|1> Enable sound, default value '1' --geomerty=<W>x<H>|fullscreen Set default geometry, default value '800x600' --link=<modem|isdn|adsl|wan|lan> Set default link type, default 'lan' --pack=<packmethod> Set default pack method, default '16m-jpeg-9' --kbd-layout=<layout> Set default keyboard layout, default 'us' --kbd-type=<typed> Set default keyboard type, default 'pc105/us' --set-kbd=<0|1> Overwrite current keyboard settings, default '0' Unable to read : Klarer ikke å lese: Unable to write : Klarer ikke å skrive: <b>X2Go Client V. 2.0.1</b><br> (C. 2006-2007 Oleksandr Shneyder, Heinz-Markus Graesing)<br><br>Client for use with the X2Go network based computing environment. This Client will be able to connect to X2Go server(s) and start, stop, resume and terminate (running) desktop sessions. X2Go Client stores different server connections and may automatically request authentication data from LDAP directories. Furthermore it can be used as fullscreen loginscreen (replacement for loginmanager like xdm). Please visit x2go.org for further information. <b>X2Go Client V. 2.0.1</b><br> (C. 2006-2007 Oleksandr Shneyder, Heinz-Markus Graesing)<br><br>Ein Client für den Zugriff auf die serverbasierende Anwendungsumgebung X2Go. Mit Hilfe dieser Anwendung können Sie Sitzungen eines X2Go Servers starten, stoppen, laufende Sitzungen fortführen oder anhalten und verschiedene Sitzungskonfigurationen verwalten. Die Authentifizierung kann über LDAP erfolgen und das Programm kann im Vollbildmodus (als Ersatz für XDM) gestartet werden. Weitere Informationen erhalten SIe auf x2go.org. <b>Wrong Password!</b><br><br> <b>Feil passord!</b><br><br> wrong value for argument"--ldap1" ugyldig verdi for parameteren "--ldap1" wrong value for argument"--ldap2" ugyldig verdi for parameteren "--ldap2" Usage: x2goclient [Options] Options: --help Print this message --help-pack Print availabel pack methods --no-menu Hide menu bar --maximize Start maximized --add-to-known-hosts Add RSA key fingerprint to .ssh/known_hosts if authenticity of server can't be established --ldap=<host:port:dn> Start with LDAP Support. Example: --ldap=ldapserver:389:o=organization,c=de --ldap1=<host:port> LDAP Failover Server #1 --ldap2=<host:port> LDAP Failover Server #2 --command=<cmd> Set default command, default value 'KDE' --sound=<0|1> Enable sound, default value '1' --geomerty=<W>x<H>|fullscreen Set default geometry, default value '800x600' --link=<modem|isdn|adsl|wan|lan> Set default link type, default 'lan' --pack=<packmethod> Set default pack method, default '16m-jpeg-9' --kbd-layout=<layout> Set default keyboard layout, default 'us' --kbd-type=<typed> Set default keyboard type, default 'pc105/us' --set-kbd=<0|1> Overwrite current keyboard settings, default '0' Usage: x2goclient [Options] Options: --help Print this message --help-pack Print availabel pack methods --no-menu Hide menu bar --maximize Start maximized --add-to-known-hosts Add RSA key fingerprint to .ssh/known_hosts if authenticity of server can't be established --ldap=<host:port:dn> Start with LDAP Support. Example: --ldap=ldapserver:389:o=organization,c=de --ldap1=<host:port> LDAP Failover Server #1 --ldap2=<host:port> LDAP Failover Server #2 --command=<cmd> Set default command, default value 'KDE' --sound=<0|1> Enable sound, default value '1' --geomerty=<W>x<H>|fullscreen Set default geometry, default value '800x600' --link=<modem|isdn|adsl|wan|lan> Set default link type, default 'lan' --pack=<packmethod> Set default pack method, default '16m-jpeg-9' --kbd-layout=<layout> Set default keyboard layout, default 'us' --kbd-type=<typed> Set default keyboard type, default 'pc105/us' --set-kbd=<0|1> Overwrite current keyboard settings, default '0' Unable to create file: Klarer ikke å lage filen: No valid card found Ingen gyldige kort ble funnet This card is unknown by X2Go System Diese Karte ist dem X2Go System unbekannt &Settings ... &Innstillinger ... Options Alternativer Can't read host rsa key: RSA Schlüssel konnte nicht gelesen werden: Can't connect to X-Server Klarte ikke å koble til X-Serveren Can't connect to X server Please check your settings Klarte ikke å koble til X-Serveren Vennligst sjekk innstillingene dine Can't start X-Server X-Server konnte nicht gestartet werden Can't start X Server Please check your settings Klarte ikke å starte X-Serveren Vennligst sjekk instillingene dine Your current color depth is different to the color depth of your x2go-session. This may cause problems reconnecting to this session and in most cases <b>you will loose the session</b> and have to start a new one! It's highly recommended to change the color depth of your Display to Din nåværende fargedybde er forskjellig fra fargedybden i din x2go sesjon. Dette kan skape problemer ved gjenoppkobling til denne sesjonen, og i de fleste tilfellene <b>vil du miste hele sesjonen</b>. og du må starte en ny en! Det er sterkt anbefalt å endre fargedybden på skjemen din til 24 or 32 24 eller 32 bit and restart your X-server before you reconnect to this x2go-session.<br>Resume this session anyway? bit og deretter restarte X-Serveren før du kobler til denne x2go sesjonen. <br>Gjenoppta denne sesjonen uansett? Yes Ja No Nei <b>X2Go Client V. <b>X2Go Client V. </b><br> (C. 2006-2007 Oleksandr Shneyder, Heinz-Markus Graesing)<br><br>Client for use with the X2Go network based computing environment. This Client will be able to connect to X2Go server(s) and start, stop, resume and terminate (running) desktop sessions. X2Go Client stores different server connections and may automatically request authentication data from LDAP directories. Furthermore it can be used as fullscreen loginscreen (replacement for loginmanager like xdm). Please visit x2go.org for further information. </b><br> (C. 2006-2007 Oleksandr Shneyder, Heinz-Markus Graesing)<br><br>Ein Client für den Zugriff auf die serverbasierende Anwendungsumgebung X2Go. Mit Hilfe dieser Anwendung können Sie Sitzungen eines X2Go Servers starten, stoppen, laufende Sitzungen fortführen oder anhalten und verschiedene Sitzungskonfigurationen verwalten. Die Authentifizierung kann über LDAP erfolgen und das Programm kann im Vollbildmodus (als Ersatz für XDM) gestartet werden. Weitere Informationen erhalten SIe auf x2go.org. </b><br> (C. 2006-2008 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br><br>Client for use with the X2Go network based computing environment. This Client will be able to connect to X2Go server(s) and start, stop, resume and terminate (running) desktop sessions. X2Go Client stores different server connections and may automatically request authentication data from LDAP directories. Furthermore it can be used as fullscreen loginscreen (replacement for loginmanager like xdm). Please visit x2go.org for further information. </b><br> (C. 2006-2008 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br><br>Ein Client für den Zugriff auf die serverbasierende Anwendungsumgebung X2Go. Mit Hilfe dieser Anwendung können Sie Sitzungen eines X2Go Servers starten, stoppen, laufende Sitzungen fortführen oder anhalten und verschiedene Sitzungskonfigurationen verwalten. Die Authentifizierung kann über LDAP erfolgen und das Programm kann im Vollbildmodus (als Ersatz für XDM) gestartet werden. Weitere Informationen erhalten SIe auf x2go.org. OpenOffice.org OpenOffice.org Terminal Terminal unknown ukjent Command Kommando Type Type Desktop Skrivebord single application enkel applikasjon shadow session skyggeøkt <br>Sudo configuration error <br>Fehler in der Sudo Konfiguration Unable to execute: Klarte ikke å utføre: X2Go Client X2Go klient Internet browser Nettleser Email client Epost program &New session ... &Ny økt ... Session management... Sesjonshåndtering... Show toolbar Vis verktøylinje About X2GO client Om X2GO klient Please check LDAP settings Vennligst sjekk LDAP innstillingene no X2Go server found in LDAP Inge X2Go server ble funnet i LDAP Are you sure you want to delete this session? Er du sikker på at du ønsker å fjerne denne sesjonen? <b>Wrong password!</b><br><br> <b>Feil passord!</b><br><br> No server availabel Ingen tilgjengelig server Not connected Ikke tilkoblet Creation time Opprettelsestidspunkt Unable to create folder: Klarer ikke å opprette katalogen: Enter passphrase to decrypt a key Oppgi passordfrase for å dekryptere en nøkkel No X2Go sessions found, closing. Ingen X2Go økter ble funnet, lukker. Starting connection to server: Starter tilkobling til server: to til Connection Error( Tilkoblingsfeil( Couldn't find a SSH connection. Klarte ikke å finne en SSH tilkobling. Host key for server changed. It is now: Vertsnøkkel for serveren har endret seg. Den er nå: For security reasons, connection will be stopped Av hensyn til sikkerheten vil tilkoblingen bli stoppet The host key for this server was not found but an othertype of key exists.An attacker might change the default server key toconfuse your client into thinking the key does not exist Vertsnøkkelen for denne serveren ble ikke funnet, men en annen type av nøkkel eksisterer. En angriper kan endre standard server nøkkel for å lure klienten din til å tro at nøkkelen ikke finnes Could not find known host file.If you accept the host key here, the file will be automatically created Kan ikke finne "known host" filen. Om du aksepterer vertsnøkkelen her vil filen automatisk bli opprettet The server is unknown. Do you trust the host key? Public key hash: Serveren er ukjent. Stoler du på vertsnøkkelen? Offentlig nøkkel: Host key verification failed Verifiseringen av vertsnøkkelen feilet Authentication failed: Autentisering feilet: Authentication failed Pålogging feilet Enter password for SSH proxy Oppgi passord for SSH proxy Connection failed: Tilkoblingen feilet: - Wrong password. - Feil passord. Server not availabel Serveren er ikke tilgjengelig Unable to write file: Klarer ikke å skrive til filen: Unable to create SSL tunnel: Klarte ikke å opprette SSL tunnel: <b>Session ID:<br>Server:<br>Username:<br>Display:<br>Creation time:<br>Status:</b> <b>Økt ID:<br>Server:<br>Brukernavn:<br>Skjerm:<br>Opprettet:<br>Status:</b> Share folder... Del mappe... Show details Vis detaljer This card is unknown by X2Go system Dette kortet er ukjent for X2Go systemet Can't start X server Please check your settings Klarte ikke å starte X-Serveren Vennligst sjekk instillingene dine Remote server does not support file system export through SSH Tunnel Please update to a newer x2goserver package Serveren støtter ikke eksport av filsystemet over en SSH Tunnel Vennligst oppdater til en nyere x2goserver pakke &Create session icon on desktop... &Opprett sesjonsikon på skrivebordet... Starting x2goclient... Starter x2goclient... Starting x2goclient in portable mode... data directory is: Starter x2goclient i portabel modus... data-katalogen er: Started x2goclient. Startet x2goclient. Can't load translator: Kan ikke laste oversetter: Translator: Oversetter: installed. installert. &Set broker password... &Sett megler passord... &Connectivity test... &Tilkoblings-test... Operation failed Handlingen feilet Password changed Passordet er endret Wrong password! Feil passord! <b>Authentication</b> <b>Autentisering</b> Restore Gjenopprett Multimedia Multimedia Development Utvikling Education Opplæring Game Spill Graphics Grafikk Network Nettverk Office Kontor Settings Innstillinger System System Utility Verktøy Other Andre Left mouse button to hide/restore - Right mouse button to display context menu Venstre museknapp for å skjule/gjenopprette - Høyre museknapp viser sprettoppmeny Closing x2goclient... Lukker x2goclient... Closed x2goclient. Lukket x2goclient. Create session icon on desktop Opprett sesjonsikon på skrivebordet Desktop icons can be configured not to show x2goclient (hidden mode). If you like to use this feature you'll need to configure login by a gpg key or gpg smart card. Use x2goclient hidden mode? Skrivebordsikoner kan konfigureres til å ikke vise x2goklient (skjult modus). Om du ønsker å benytte denne muligheten må du konfigurere pålogging ved bruk av en GPG-nøkkel, eller et GPG basert smartkort. Ønsker du å aktivere skjult modus for x2goklient? Show session tray icon when running Hvis sesjonsikon i systemkurven når sesjonen kjører New Session Ny sesjon X2Go sessions not found X2Go sesjoner ble ikke funnet RDP connection RDP tilkobling X2Go Link to session X2Go kobling til sesjon Detach X2Go window Løsne X2Go vindu Attach X2Go window Feste X2Go vindu Finished Ferdig Are you sure you want to terminate this session? Unsaved documents will be lost Er du sikker på at du vil avslutte denne sesjonen? Ulagrede data vil gå tapt </b><br> (C. 2006-2010 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br><br>Client for use with the X2Go network based computing environment. This Client will be able to connect to X2Go server(s) and start, stop, resume and terminate (running) desktop sessions. X2Go Client stores different server connections and may automatically request authentication data from LDAP directories. Furthermore it can be used as fullscreen loginscreen (replacement for loginmanager like xdm). Please visit x2go.org for further information. </b><br> (C. 2006-2009 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br><br>Ein Client für den Zugriff auf die serverbasierende Anwendungsumgebung X2Go. Mit Hilfe dieser Anwendung können Sie Sitzungen eines X2Go Servers starten, stoppen, laufende Sitzungen fortführen oder anhalten und verschiedene Sitzungskonfigurationen verwalten. Die Authentifizierung kann über LDAP erfolgen und das Programm kann im Vollbildmodus (als Ersatz für XDM) gestartet werden. Weitere Informationen erhalten SIe auf x2go.org. Can't start X Server Please check your installation Klarer ikke å starte X Serveren Vennligst sjekk din installasjon X2Go Session X2Go økt Minimize toolbar Minimer verktøylinje <br><b>&nbsp;&nbsp;&nbsp;Click this button&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;to restore toolbar&nbsp;&nbsp;&nbsp;</b><br> <br><b>&nbsp;&nbsp;&nbsp;Trykk her&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;for å gjenopprette&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;verktøylinjen&nbsp;&nbsp;&nbsp;</b><br> Can't open config file: Konfigurationsdatei lässt sich nicht öffnen: sshd not started, you'll need sshd for printing and file sharing you can install sshd with <b>sudo apt-get install openssh-server</b> sshd er ikke startet og du trenger denne for skriver- og fildeling. Du kan installere sshd med: <b>sudo apt-get install openssh-server</b> Connection to local desktop Tilkobling til lokalt skrivebord Information Informasjon Filter Filter Select desktop: Velg skrivebord: View only Kun vis User Bruker XDMCP XDMCP No accessible desktop found Ingen tilgjengelige skrivebord ble funnet Full access Full tilgang Only my desktops Kun mine skrivebord Reconnect Gjenoppkoble Connecting to broker Koble til megleren </b><br> (C. 2006-2010 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br> </b><br> (C. 2006-2010 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br> <br>x2goplugin mode was sponsored by <a href="http://www.foss-group.de/">FOSS-Group GmbH(Freiburg)</a><br> <br>x2goplugin modusen ble sponset av <a href="http://www.foss-group.de/">FOSS-Group GmbH(Freiburg)</a><br> <br>Client for use with the X2Go network based computing environment. This Client will be able to connect to X2Go server(s) and start, stop, resume and terminate (running) desktop sessions. X2Go Client stores different server connections and may automatically request authentication data from LDAP directories. Furthermore it can be used as fullscreen loginscreen (replacement for loginmanager like xdm). Please visit x2go.org for further information. <br>Ein Client für den Zugriff auf die serverbasierende Anwendungsumgebung X2Go. Mit Hilfe dieser Anwendung können Sie Sitzungen eines X2Go Servers starten, stoppen, laufende Sitzungen fortführen oder anhalten und verschiedene Sitzungskonfigurationen verwalten. Die Authentifizierung kann über LDAP erfolgen und das Programm kann im Vollbildmodus (als Ersatz für XDM) gestartet werden. Weitere Informationen erhalten SIe auf x2go.org. WINDOWS-1252 WINDOWS-1252 ISO8859-1 ISO8859-1 wrong value for argument"speed" wrong value for argument"speed" application/x2go:x2go:Configuration File for X2Go Session application/x2go:x2go:Konfiguration Datei für eine X2Go Sitzung Help Hjelp Pack Methodes Pakkemetode Option is not availabel in this build Valget er ikke aktivet i denne versjonen Changelog Endringslogg Git Info Git info SSH Error SSH feil SSH daemon could not be started. You'll need SSH daemon for printing and file sharing. Normally, this should not happen as X2Go Client for Windows ships its internal sshd.exe. If you see this message, please report a bug against the X2Go bugtracker. SSH demonen kunne ikke starte. Du trenger SSH demone for å kunne skrive ut og for fildeling. Noramlt skal ikke dette skje siden X2Goklienten for Windows inneholder den interne sshd.exe. Hvis du ser denne meldingen, vennligst opprett en feilmelding i X2Go sin feilmeldingshåndterer. SSH daemon is not running. You'll need SSH daemon for printing and file sharing Please ask your system administrator to provide the SSH service on your computer. SSH daemon could not be started. You'll need SSH daemon for printing and file sharing. Vennligst be din systemadministrator og å tilby SSH på din datamaskin. SSH daemon failed to open the application's public host key. SSH demonen klarte ikke å åpne applikasjonens offentlige vertsnøkkel. SSH daemon failed to open the application's public key used for exporting folders and printers. SSH demonen klarte ikke å åpne applikasjonens offentlige nøkke for å eksportere mapper og skrivere. SSH daemon failed to open the application's authoized_keys file. SSH demonen klarte ikke å åpne applikasjonens authorized_keys fil. wrong value for argument"--clipboard" feil verdi til argumentet"--clipboard" Starting X2Go Client %1... Starter X2Go klienten %1... Starting X2Go Client in portable mode. Data directory is: Starter X2Go klienten i portabel modus... data-katalogen er: About X2Go Client Om X2Go klienten Started X2Go Client. Startet X2Go klienten. found. funnet. English language requested, not loading translator. English language requested, not loading translator. Non-fatal: can't load translator: Please translate this. Non-fatal: can't load translator: Trying to load language with lower preference, if existent. Please translate this. Trying to load language with lower preference, if existent. Session management ... Økthåndtering ... &Create session icon on desktop ... &Opprett øktikon på skrivebordet ... &Set broker password ... &Sett meglerpassord ... &Connectivity test ... &Tilkoblings-test ... Share folder ... Del mappe ... A left click hides or restores the window. A right click displays the context menu. Venstre museknapp for å skjule/gjenopprette - Høyre museknapp viser sprettoppmeny. Closing X2Go Client ... Lukker X2Go klienten ... Finished X2Go Client closing hooks. Ferdig med å lukke X2Go klientens hooks. Broker authentication failed! Brokerens autentisering feilet! Connection error: Tilkoblingen feilet: Couldn't find an SSH connection. Klarte ikke å finne en SSH tilkobling. This can be an indication of a man-in-the-middle attack. Somebody might be eavesdropping on you. For security reasons, it is recommended to stop the connection attempt. Do you want to terminate the connection? Dette kan være et tegn på såkalt man-in-the-middle angrep. Noen kan forsøke å avlytte din forbindelse. Av hensyn til din sikkerhet, så bør du avbryte tilkoblingen. Vil du avbryte tilkoblingen? Host key verification failed. Verifiseringen av vertsnøkkelen feilet. The host key for this server was not found but another type of key exists. An attacker might have changed the default server key to trick your client into thinking the key does not exist yet. For security reasons, it is recommended to stop the connection attempt. Do you want to terminate the connection? Vertsnøkkelen for denne serveren ble ikke funnet, men en annen type nøkkel finnes. En angriper kan endre standard vertsnøkkel for serveren for å lure din klient til å tro at nøkkelen ikke finnes. Av hensyn til din sikkerhet så bør du avbryte tilkoblingen. Vil du avbryte tilkoblingen? Could not find known hosts file. If you accept the host key here, the file will be automatically created. Kan ikke finne known host filen. Om du aksepterer vertsnøkkelen her vil filen automatisk bli opprettet. Authentication failed. Autentisering feilet. <b>Connection failed.</b> <b>Tilkoblingen feilet</b> No server available. Ingen tilgjengelig server. Server not available. Serveren er ikke tilgjengelig. No accessible desktop found. Ingen tilgjengelige skrivebord ble funnet. Your current color depth is different from the session's color depth. This may cause problems reconnecting to this session and in most cases <b>you will loose the session</b> and have to start a new one! It's highly recommended to change the color depth of your display to Din nåværende fargedybde er forskjellig fra fargedybden i din X2Go sesjon. Dette kan skape problemer ved gjenoppkobling til denne sesjonen, og i de fleste tilfellene <b>vil du miste hele sesjonen</b>. og du må starte en ny en! Det er sterkt anbefalt å endre fargedybden på skjemen din til bits and restart your X.Org Server before you reconnect to this X2Go session.<br />Do you want to resume this session anyway? bit og deretter restarte X.Org Server før du kobler til denne X2Go sesjonen.<br />Gjenoppta denne sesjonen uansett? Unable to create SSH tunnel for X2Go session (NX) startup: Klarte ikke å opprette SSH tunnel for X2Go økt (NX) oppstart: Unable to create SSH tunnel for audio data: Klarte ikke å opprette SSH tunnel for lyddata: failed to start. klarte ikke å starte. This likely means the binary is not available. The current search path is: Dette betyr trolig at binæren ikke er tilgjengelig. Søkebanen som er i bruk er: returned a non-zero exit code or crashed otherwise. returnerte en ikke-null verdi, eller krasjet på annen måte. Execution failed, exit code was: Klarte ikke å utføre kommandoen, avslutningskoden var: didn't start up in time. startet ikke opp tidsnok. This error shouldn't come up. Denne feilen skulle ikke ha inntruffet. didn't accept a write operation. aksepterte ikke skriveoperasjonen. It is probably not running correctly or crashed in-between. Den kjører enten ikke korrekt, eller har krasjet underveis. Unable to read from xmodmap. Klarte ikke å lese fra xmodmap. encountered an unknown error during start up or execution. traff en ukjent feil under oppstart eller utførelse. experienced an undefined error. en ukjent feil har oppstått. X2Go Client will now terminate. File a bug report as outlined on the <a href="http://wiki.x2go.org/doku.php/wiki:bugs">bugs wiki page</a>. X2Go klienten avslutter. Rapporter en feilrapport slik det er beskrevet på <a href="http://wiki.x2go.org/doku.php/wiki:bugs">bugs wiki page</a>. Proxy didn't terminate after 3 seconds. Killing the proxy. Proxy stoppet ikke etter 3 sekunder. Tvinger stans av proxy. Closing X2Go Client because it was started in hidden mode. Lukker X2Go klienten fordi den ble startet i såkalt skjult modus. Closing X2Go Client because the --close-disconnect parameter was passed. Lukker X2Go klienten fordi den ble startet med --close-disconnect parameter. Are you sure you want to terminate this session? Unsaved documents will be lost. Er du sikker på at du vil avslutte denne økten? Ulagrede data vil gå tapt. <b>Connection failed.</b> : <b>Tilkoblingen feilet</b> : (file does not exist) (filen finnes ikke) (directory does not exist) (mappen finnes ikke) Invalid value for parameter "--link". Ugyldig verdi for parameteren "--link". Invalid value for parameter "--clipboard". Ugyldig verdi til argumentet"--clipboard". Invalid value for parameter "--sound". Ugyldig verdi for parameteren "--sound". Invalid value for parameter "--geometry". Ugyldig verdi for parameteren "--geometry". Invalid value for parameter "--set-kbd". Ugyldig verdi for parameteren "--set-kbd". Invalid value for parameter "--ldap". Ugyldig verdi for parameteren "--ldap". Invalid value for parameter "--ldap1". Ugyldig verdi for parameteren "--ldap1". Invalid value for parameter "--ldap2". Ugyldig verdi for parameteren "--ldap2". Invalid value for parameter "--pack". Ugyldig verdi for parameteren "--pack". Available pack methods: Tilgjengelige pakkemetoder: Pack Methods Pakkemetoder Option is not available in this build. Valget er ikke aktivert i denne versjonen. Unable to create directory: Klarer ikke å lage katalogen: Cannot open key: Kan ikke åpne nøkkelen: <br>(C) 2005-2016 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> <br>(C) 2005-2016 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> <br>X2Go Plugin mode was sponsored by <a href="http://www.foss-group.de/">FOSS-Group GmbH (Freiburg)</a><br> <br>X2Go plugin modusen ble sponset av <a href="http://www.foss-group.de/">FOSS-Group GmbH (Freiburg)</a><br> <br>This is a client to access the X2Go network-based computing environment. This client will be able to connect to X2Go Server(s) and start, stop, resume and terminate (running) desktop sessions. X2Go Client stores different server connections and may automatically request authentication data from LDAP directories. Furthermore, it can be used as a fullscreen login screen (replacement for login managers like XDM). Please visit <a href="http://www.x2go.org">the project home page at x2go.org</a> for further information. <br>Dette er en klient for å få tilgang til et X2Go nettverksbasert datasystem. Denne klienten kan koble seg til X2Go servere og starte, stoppe, gjennoppta og avslutte kjørende desktop økter. X2Go klienten lagrer de forskjellige forbindelsene til servere, og kan automatisk be om autentisering fra LDAP kataloger. Den kan også bli brukt som en påloggingsskjerm i fullskjermmodus (kan brukes istedenfor loginhåndtere slik som XDM). Vennligst besøk <a href="http://www.x2go.org">prosjektets hjemmeside på x2go.org</a> for mer informasjon. <b>X2Go Client v. <b>X2Go klient v. Please check LDAP Settings. Vennligst sjekk LDAP innstillingene. Check whether the package providing "scdaemon" is installed. The current search path is: Sjekk om pakken som tilbyr "scdaemon" er installert. Søkebanen som er i bruk er: didn't start yet. er ikke startet ennå. Unable to read from scdaemon. Klarte ikke å lese fra scdaemon. No valid card found. Ingen gyldige kort ble funnet. This card is unknown to the X2Go system. Dette kortet er ukjent for X2Go systemet. Can't start X.Org Server. Please check your installation. Klarer ikke å starte X.Org Server. Vennligst sjekk din installasjon. Remote server does not support file system exports through SSH tunnels. Please update your x2goserver package. Serveren støtter ikke eksport av filsystemet over en SSH Tunnel. Vennligst oppdater til en nyere x2goserver pakke. Unable to create SSH tunnel for Folder Sharing and Printing support: Klarte ikke å opprette SSH tunnel for mappedeling og utskriftstøtte: Unable to read: Klarer ikke å lese: Unable to write: Klarer ikke å skrive: Error getting window geometry. (Did you close the window?) Feil under henting av vindusgeometrien. (Er vinduet lukket?) Invalid value for argument "speed" Ugyldig verdi for parameteren "speed" Applications ... Applikasjoner ... SSH daemon could not be started. SSH daemonen kunne ikke startes. SSH daemon is not running. SSH daemonen kjører ikke. You have enabled Remote Printing or File Sharing. These features require a running and functioning SSH server on your computer. <b>Printing and File Sharing will be disabled for this session.</b> Please also check the <b>Clientside SSH port</b> in the general settings. Du har skrudd på enten ekstern utskrift eller fildeling. Dette er ting som krever en startet og fungerende SSH server på din datamaskin- <b>Utskrift og fildeling vil bli skrudd av i denne sesjonen.</b> Vennligst sjekk innstillingene for <b>SSH port på server</b> under generelle innstillinher. Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server. If you see this message, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Dette skal normalt ikke hende siden X2Go klienten for Windows kommer med sin egne innebygde SSH server. Hvis du ser denne meldingen, vennligst rapporter dette på: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> The SSH server failed to start. SSH serveren klarte ikke å starte. X2Go Client did not detect a globally running SSH server on your machine and was unable to start its own. Please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> X2Go klienten fant ingen global kjørende SSH server på din datamaskin, og klarte heller ikke å starte sin egen. Vennligst rapporter denne feilen på: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> The SSH server is currently not started. SSH serveren er ikke startet. On OS X, please follow the following steps to enable SSH service:<ul><li>Open <b>System Preferences</b> (Applications -> System Preferences)</li><li>Go to <b>Sharing</b></li><li>Tick the checkbox besides <b>Remote Login</b></li><li>Check that <b>Allow access for:</b> is set to either:<ul><li>All users: <b>no further steps necessary</b></li><li>Only these users <b>and your user name is included in the list</b></li></ul><li>Optionally, add your user name to the allowed list via the <b>Plus Button</b></li></ul><b>Warning: enabling SSH access will allow any user on the network to connect to your machine. It is your responsibility to set a strong password for every user that is allowed to log in via SSH.</b> På Mac OS X vennligst følg denne beskrivelsen for å starte SSH serveren:<ul><li>Åpne <b>Systemvalg</b> (Program -> Systemvalg)</li><li>Gå til <b>Deling</b></li><li>Sett kryss på <b>Ekstern pålogging</b></li><li>Sjekk at <b>Tillatt tildang for:</b> er satt til enten <ul><li>Alle brukere: <b>da trenger du ikke å gjøre noe mer</b></li><li>Bare disse brukere <b>og at din bruker er i listen</b></li></ul><li>Eventuelt, legg til din bruker i listen over godkjente brukere via <b>Pluss knappen</b></li></ul><b>Advarsel: å skru på SSh tilgang vil gjøre det mulig for alle brukere på nettverket å koble seg på. Det er ditt ansvar å sørge for at du har et sterkt passord for hver bruker som kan logge seg inn via SSH.</b> Please ask your system administrator to provide the SSH service on your computer. Spør din systemadministrator om SSH tjenesten kan installeres på din datamaskin. Disabling Remote Printing or File Sharing support in the session settings will get rid of this message. Ved å skru av utskrift til ekstern, eller fildeling i denne økten, så vil du bli kvitt denne meldingen. SSH daemon failed to open its public host key. SSH demonen klarte ikke å åpne den offentlige vertsnøkkel. You have enabled Remote Printing or File Sharing. These features require a running and functioning SSH server on your computer. <b>Printing and File Sharing will be disabled for this session.</b> The SSH server is currently not configured correctly. Please ensure that the server's public exists. Du har skrudd på enten ekstern utskrift eller fildeling. Dette er ting som krever en startet og fungerende SSH server på din datamaskin- <b>Utskrift og fildeling vil bli skrudd av i denne sesjonen.</b> SSH serveren er ikke korrekt konfigurert. Vennligst sjekk at serverens vertsnøkler eksisterer. Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server and automatically generates the required keys. If you see this message, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Dette skal normalt ikke hende siden X2Go klienten for Windows kommer med sin egne innebygde SSH server som automatisk lager de nødvendige nøklene. Hvis du ser denne meldingen, vennligst rapporter dette på: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> X2Go Client was unable to create SSH host keys. Please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> X2Go klienten klarte ikke å lage SSH vertsnøkler. Vennligst rapporter denne feilen på: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> On OS X, please follow these steps to generate the required keys:<ul><li>Open a <b>Terminal Window</b> (Applications -> Utilities -> Terminal)</li><li>Run this command: <b>ssh -p På Mac OS X vennligst følg denne beskrivelsen for å lage de nødvendige nøklene:<ul><li>Åpne et <b>Terminal Window</b> (Program -> Verktøy -> Terminal)</li><li>Kjør denne kommandoen: <b>ssh -p Please ask your system administrator to generate the required host keys. If you are administrating this system yourself, please run: <center><b>sudo ssh-keygen -A</b></center> Vennligst be din systemadministrator om å lage de nødvendige vertsnøklene. Hvis det er du som er administratoren, vennligst kjør: <center><b>sudo ssh-keygen -A</b></center> SSH daemon failed to open the application's authorized_keys file. SSH demonen klarte ikke å åpne applikasjonens authorized_keys fil. Non-fatal: can't load translator: Ikke-kritisk: kunne ikke laste inn oversettelse: Trying to load language with lower preference, if existent. Forsøker å laste en annen oversettelse, hvis det finnes. Unable to create or append to file: Kunne ikke lage, eller legge til fil: Unable to change the permissions of file: Kunne ikke endre rettigheter på fil: This is an error because sshd would deny such a file. Dette er en feil, fordi sshd ikke ville tillatt en slik fil. Unable to change the permissions of directory: Kunne ikke endre rettigheter på mappen: This is an error because sshd would deny such a directory. Dette er en feil, siden sshd ikke ville tillatt en slik mappe. Unable to find the sftp-server binary. Neither bundled, nor found in $PATH nor additional directories. Kunne ikke finne sftp-server-binæren. Fant den verken inkludert, eller i $PATH eller i ekstra-mapper. If you are using a Linux-based operating system, please ask your system administrator to install the package containing the sftp-server binary. Common names are <b>openssh</b>, <b>openssh-server</b> or <b>openssh-sftp-server</b> depending upon distribution. If the sftp-server binary is installed on your system, please report a bug mentioning its path on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Hvis du bruker et Linux-basert operativsystem, så be din administrator om å installere pakken som inneholder sftp-server-binæren. Vanlige navn er <b>openssh</b>, <b>openssh-server</b> eller <b>openssh-sftp-server</b> avhengig av Linux-distribusjon. Hvis sftp-server-binæren faktisk er installert, venligst rapprter dette som en feil, og oppgi hvor den er installert på: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> SSH key type selection error Feil ved valg av SSH nøkkel type Unknown SSH key selected. Ukjent SSH nøkkel valgt. Terminating application. Avslutter program. SSH key base directory creation error Feil ved oppretting av mappe for SSH nøkler Unable to create SSH key base directory '%1'. Kunne ikke opprette mappe for SSH nøkler '%1'. ssh-keygen launching error feil ved start av ssh-keygen Unable to start the ssh-keygen binary. Kunne ikke starte ssh-keygen binæren. ssh-keygen crashed ssh-keygen krasjet The ssh-keygen binary crashed. Binæren til ssh-keygen krasjet. ssh-keygen program error ssh-keygen programfeil The ssh-keygen binary did not exit cleanly. ssh-keygen binæren avsluttet feilaktig. It was probably called with unknown arguments. Den ble trolig startet med ukjente argumenter. Unable to open newly generated %1 public host key file. Kunne ikke åpne nylig opprettet %1 offentlig vertsnøkkelfil. %1 public host key file empty. %1 offentlig vertsnøkkelfil er tom. You have enabled Remote Printing or File Sharing. These features require a running and functioning SSH server on your computer. <b>Printing and File Sharing will be disabled for this session.</b> Du har aktivert fjern-utskrift eller fjern-fildeling. Disse valgene krever en kjørende og fungerende SSH-server på din datamaskin. <b>Utskrift og fildeling vil ikke være skrudd på for denne økten.</b> Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server. If you see this message, please report a bug on: Dette skal vanligvis ikke skje, siden X2Go klienten for Windows kommer med egen innebygd SSH-server. Hvis du ser denne meldingen, så rapporter dette som feil på: The SSH server failed to start. Please report a bug on: SSH serveren klarte ikke å starte. Rapporter dette som en feil på: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server and automatically generates the required keys. If you see this message, please report a bug on: Dette skal vanligvis ikke skje, siden X2Go klienten for Windows kommer med egen innebygd SSH-server, og automatisk lager nødvendige nøkler. Hvis du ser denne meldingen, så rapporter dette som feil på: X2Go Client was unable to create SSH host keys. Please report a bug on: X2Go klienten klarte ikke å lage SSH vertsnøkler. Rapporter dette som en feil på: <br>(C) 2005-2023 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> Translators, feel free to add a localized version of your translation including a copyright notice and your name(s). Remember to keep a <br> at the end, though. English example for a potential translation: <br>(C) 2005-2023 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br>English version: (C) 20AB-20CD Trans Lator <trans@la.tor><br> <br>(C) 2005-2023 av <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> Your current color depth is different from the session's color depth. This may cause problems reconnecting to this session and in most cases <b>you will lose the session</b> and have to start a new one! Din fargedybde er forskjellig fra den i økten. Dette kan lage problemer når du kobler til økten igjen, og vil i de fleste tilfeller føre til at du <b>mister økten</b> og du må da starte en ny økt! It's highly recommended to change the color depth of your display to %n bit(s) and restart your X.Org Server before you reconnect to this X2Go session. %n will be replaced with a number Det anbefales at du endrer fargedybden til %n bit, og deretter restarter din X.Org-server før du kobler til din X2Go økt. Det anbefales at du endrer fargedybden til %n biter, og deretter restarter din X.Org-server før du kobler til din X2Go økt. <br />Do you want to resume this session anyway? <br />Vil du gjennoppta denne økten allikevel? Failed to start RDP or XDMCP client Kunne ikke starte RDP eller XDMCP klient Check session settings and ensure that selected client is installed on your system. Kontroller innstillingene for økten, og sjekk at den aktuelle klienten er installert på ditt system. XDM XDM RDP RDP PulseAudio is not running PulseAudio kjører ikke Sound output will be disabled for this session. Please enable PulseAudio in the configuration dialog or disable sound in the session settings Avspilling av lyd vil ikke være mulig for denne økten. Du må enten skru på PulseAudio i ditt oppsett, eller skru av lyd i dine økt-innstillinger libssh initialization failure start av libssh feilet Unable to initialize libssh. Kunne ikke starte libssh. Enter user account password: Oppgi passordet til brukerkontoen: Check whether the package providing "pcsc_scan" is installed. The current search path is: Sjekk om pakken som tilbyr "pcsc_scan" er installert. Søkebanen som er i bruk er: Can't start X.Org Server. Klarte ikke å starte X.Org serveren. Please check your installation. Vennligst sjekk din installasjon. X.Org Server did not launch correctly after %n tries. %n will be substituted with the current number of tries X.Org serveren startet ikke etter %n forsøk. X.Org serveren startet ikke etter %n forsøk. A click displays the context menu. Et klikk viser hurtigmenyen. X2GoKDrive session X2GoKDrive økt PrintDialog Print - X2Go Client Utskrift - X2Go klient Print Skriv ut You've deactivated the x2go client printing dialog. Du har deaktivert X2Go klientens utskriftsdialog. You may reactivate this dialog using the x2goclient settings dialog (Menu -> Options -> Settings) Du kan reaktivere denne dialogen ved å benytte x2goclient innstillingene (Meny -> Innstillinger -> Innstillinger) You've deactivated the X2Go Client printing dialog. Du har deaktivert X2Go klientens utskriftsdialog. You may reactivate this dialog using the X2Go Client settings dialog. To do so, follow this path in the menu bar: Options -> Settings) X2Go Client should be X2Go klienten or whatever is appropriate in Bokmal, because all other strings say X2Go klienten Du kan reaktivere denne dialogen ved å benytte X2Go Client innstillingene (Innstillinger -> Innstillinger) You may reactivate this dialog using the X2Go Client settings dialog. To do so, follow this path in the menu bar: Options -> Settings Please adapt this to the new message, note that it has changed. Du kan reaktivere denne dialogen ved å benytte X2Go Client innstillingene (Innstillinger -> Innstillinger) You may reactivate this dialog using the X2Go Client settings dialog. To do so, follow this path in the menu bar: Options -> Settings Du kan reaktivere denne dialogen ved å benytte X2Go klient innstillingene (Innstillinger -> Innstillinger) PrintProcess Save File Lagre fil PDF Document (*.pdf) PDF Dokument (*.pdf) Failed to execute command: Klarte ikke å utføre kommandoen: Printing error Utskriftsfeil Printing error. Utskriftsfeil. PrintWidget Form Skjema Print Utskrift View as PDF Vis som PDF Print settings Utskriftsinnstillinger Printer: Skriver: Print using default Windows PDF Viewer (Viewer application needs to be installed) Skriv ut via standard Windows PDF leser (programmet må være installert) Printer command: Utskriftskommando: ... ... Viewer settings Instillinger for PDF leser Open in viewer application Åpne i leseprogrammet Command: Kommando: Save to disk Lagre til disk Show this dialog before start printing Vis denne dialogen før start av utskrift Please configure your client side printing settings.<br><br>If you want to print the created file, you'll need an external application. Typically you can use <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> and <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>You can find further information <a href="http://www.x2go.org/index.php?id=49">here</a>. Vennligst sett opp innstillingene for utskrift på klientsiden.<br><br>Om du ønsker å skrive ut den opprettede filen så trengs en ekstern applikasjon. Typisk kan du benytte<a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> og <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>Du kan finne ytterlig informasjon <a href="http://www.x2go.org/index.php?id=49">her</a>. Please configure your client side printing settings.<br><br>If you want to print the created file, you'll need an external application. Typically you can use <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> and <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>You can find further information <a href="http://www.x2go.org/index.php?id=49">here</a>. Vennligst sett opp innstillingene for utskrift på klientsiden.<br><br>Om du ønsker å skrive ut den opprettede filen så trengs en ekstern applikasjon. Typisk kan du benytte<a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> og <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>Du kan finne ytterlig informasjon <a href="http://www.x2go.org/index.php?id=49">her</a>. PrinterCmdDialog Printer command Utskriftskommando Command Kommando Please enter your customized or individual printing command. Examples: kprinter lpr -P hp_laserjet Vennligst skriv inn din egen, eller individuelle utskriftskommando. Eksempler: kprinter lpr -P hp_laserjet Output format Utformat Please choose the printing file format (regarding to your printing environment - if you use CUPS you may use PDF) Vennligst velg filformat for utskrift (relatert til ditt uskriftsoppsett - om du benytter CUPS kan du bruke PDF) PDF PDF PS PS Data structure Datastruktur Please choose the method of printing file input (some commands accepting printing files as program options, some are awaiting data on standard input): Vennligst velg metoden for inndatafil for utskrift (noen kommandoer aksepterer utskriftsfiler som programparametere, noen forventer data på standard inn): standard input (STDIN) Standard inn (STDIN) Specify path as program parameter Spesifiser stien som programparameter Please enter your customized or individual printing command. Example: Vennligst skriv inn din egen, eller individuelle utskriftskommando. Eksempel: <Path to gsprint.exe> -query -color <Sti til gsprint.exe> -query -color PulseManager Could not allocate buffer for getting current working directory! Kunne ikke allokere nok buffer til å finne gjeldene arbeidsmappe! getcwd() failed! getcwd() feilet! PulseAudio failed to start! PulseAudio kunne ikke starte! Error fetching PulseAudio version number! Kunne ikke finne versjonsnummeret til PulseAudio! Unexpected character found when parsing version string for major version number Uventet tegn funnet i "major"-versjonsnummer Unexpected character found when parsing version string for minor version number Uventet tegn funnet i "minor"-versjonsnummer Unexpected character found when parsing version string for micro version number Uventet tegn funnet i "micro"-versjonsnummer Supposed to skip major version number. Something is wrong. Skal hoppe over "major"-versjonsnummer. Noe er feil. Unable to convert major version number string to integer. Kunne ikke konvertere "major"-versjonsnummer til heltall. Unable to convert minor version number string to integer. Kunne ikke konvertere "minor"-versjonsnummer til heltall. Unable to convert micro version number string to integer. Kunne ikke konvertere "micro"-versjonsnummer til heltall. Unexpected format encountered. Fant uventet format. Unable to start PulseAudio binary. Kunne ikke starte PulseAudio binæren. Unable to play startup sound. Kunne ikke spille oppstartslyd. Sound support will not be available. Lydstøtte vil ikke være tilgjengelig. If you downloaded the bundled, pre-compiled version from the official home page or the upstream Linux packages, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Om du lastet ned din versjon fra den offisielle hjemmesiden, eller fra oppstrøm, vennligst rapporter feil på: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> QObject No response received from the remote server. Do you want to terminate the current session? Ingen respons mottatt fra serveren. Ønsker du å avslutte gjeldende økt? X2Go Client could not find any suitable X11 server. X2Go klienten kunne ikke finne noen passende X11-server. X2Go Client could not start X11 server. X2Go klienten klarte ikke å starte X11-serveren. X2Go Client requires XQuartz to be installed. If XQuartz is already installed on your system, please select the correct path in the now upcoming dialog. Refer to the end of this message for path examples, in case you do not know the exact location yourself. Should you have <b>not</b> installed XQuartz yet, please follow the outlined steps: X2Go klienten krever at XQuartz er installert. Hvis XQuartz allerede er installert, vennligst oppgi korrekt plassering i dialogboksen som nå dukker opp. På slutten av denne meldingen kan du se noen eksempler på aktuelle steder hvor XQuartz kan være installert. Hvis du derimot<b>ikke</b> har XQuartz installert ennå, vennligst følg denne beskrivelsen: MacPorts users, please install either the port <b>xorg-server</b> or the port <b>xorg-server-devel</b>. Upon successful installation, please follow the instructions printed by the port utility to autostart/load the server. All other users, please obtain and install XQuartz from: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> Afterwards, restart X2Go Client and select the correct path to the X11 application in the general X2Go Client settings. This will most likely be <center><b>/Applications/MacPorts/X11.app</b></center> or <center><b>/Applications/Utilities/XQuartz.app</b></center> MacPorts brukere, vennligst installer enten port <b>xorg-server</b> eller port <b>xorg-server-devel</b>. Etter installasjon, vennligst følg beskrivelsen som kommer fra port-verktøyet for å autostarte/starte serveren. Alle andre brukere henter XQuartz fra: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> Etterpå, restart X2Go klienten og velg korrekt plassering for X11-programmet i X2Go sin generelle innstillinger. Denne er trolig <center><b>/Applications/MacPorts/X11.app</b></center> eller <center><b>/Applications/Utilities/XQuartz.app</b></center> SessionButton Session preferences... Sesjonsinnstillinger... Create session icon on desktop... Opprett sesjonsikon på skrivebordet... Delete session Slett økt Session actions Økthandlinger Select type Velg type Select resolution Velg oppløsning Toggle sound support Slå av/på lydstøtte New Session Ny økt running aktiv suspended i hvilemodus KDE KDE RDP connection RDP tilkobling XDMCP XDMCP Connection to local desktop Tilkobling til lokalt skrivebord Published applications Publiserte applikasjoner fullscreen fullskjerm Display Skjerm window vindu Maximum Maksimalt Enabled Aktivert Disabled Deaktivert Session preferences ... Øktinnstillinger ... Create session icon on desktop ... Opprett øktikon på skrivebordet ... SessionExplorer Back Tilbake Create session icon on desktop Opprett sesjonsikon på skrivebordet Desktop icons can be configured not to show x2goclient (hidden mode). If you like to use this feature you'll need to configure login by a gpg key or gpg smart card. Use x2goclient hidden mode? Skrivebordsikoner kan konfigureres til å ikke vise x2goklient (skjult modus). Om du ønsker å benytte denne muligheten må du konfigurere pålogging ved bruk av en GPG-nøkkel, eller et GPG basert smartkort. Ønsker du å aktivere skjult modus for x2goklient? Show session tray icon when running Hvis øktikon i systemkurven når økt kjører New Session Ny økt X2Go Link to session X2Go kobling til økt Are you sure you want to delete this session? Er du sikker på at du ønsker å fjerne denne økten? Create session icon on desktop. Opprett øktikon på skrivebordet. Desktop icons can be configured not to show X2Go Client (hidden mode.) If you like to use this feature you'll need to configure login via a GPG key or GPG Smart Card. Use X2Go Client's hidden mode? X2Go Client should be X2Go klienten or whatever is appropriate in Bokmal, because all other strings say X2Go klienten Skrivebordsikoner kan konfigureres til å ikke vise X2Go Client (skjult modus). Om du ønsker å benytte denne muligheten må du konfigurere pålogging ved bruk av en GPG-nøkkel, eller et GPG basert smartkort. Ønsker du å aktivere skjult modus for X2Go Client? Desktop icons can be configured not to show X2Go Client (hidden mode.) If you like to use this feature you'll need to configure login via a GPG key or GPG Smart Card. Use X2Go Client's hidden mode? Skrivebordsikoner kan konfigureres til å ikke vise X2Go Client (skjult modus). Om du vil benytte denne muligheten må du konfigurere pålogging ved bruk av en GPG-nøkkel, eller et GPG basert smartkort. Ønsker du å aktivere skjult modus for X2Go Client? SessionManageDialog E&xit &Avslutt &New session &Ny økt &Session preferences &Øktinnstillinger &Delete session S&lett økt &Create session icon on desktop... &Opprett sesjonsikon på skrivebordet... Delete Delete Slett Session management Økthåndtering &Create session icon on desktop ... &Opprett øktikon på skrivebordet ... SessionWidget Session name: Øktnavn: << change icon << endre ikon &Server &Server Host: Vert: Login: Brukernavn: SSH port: SSH port: Use RSA/DSA key for ssh connection: Bruk RSA/DSA nøkkel for SSH tilkobling: Try auto login (ssh-agent or default ssh key) Forsøk automatisk pålogging (SSH agent, eller standard SSH nøkkel) Kerberos 5 (GSSAPI) authentication Kerberos 5 (GSSAPI) autentisering Delegation of GSSAPI credentials to the server Delegering av GSSAPI fullmakt til server Use Proxy server for SSH connection Bruk proxyserver for SSH tilkobling Proxy server Proxyserver SSH SSH HTTP HTTP Same login as on X2Go Server Samme innlogging som på X2Go Server Same password as on X2Go Server Samme passord som på X2Go Server RSA/DSA key: RSA/DSA nøkkel: ssh-agent or default ssh key SSH-agent, eller standard SSH nøkkel Type: Type: Port: Port: &Session type &Økttype Session type: Økttype: Connect to Windows terminal server Koble til Windows terminal server XDMCP XDMCP Connect to local desktop Koble til lokalt skrivebord Custom desktop Selvvalgt skrivebord Single application Enkel applikasjon Published applications Publiserte applikasjoner Command: Kommando: Advanced options... Avanserte alternativer... Path to executable Sti til programfil Direct RDP Connection Direktekobling med RDP RDP port: RDP port: Open picture Åpne bilde Pictures Bilder Open key file Åpne nøkkelfil All files Alle filer Error Feil x2goclient is running in portable mode. You should use a path on your usb device to be able to access your data whereever you are x2goclient kjører i portabel modus. Du burde bruke en sti på din USB enhet for å kunne benytte dataene dine uavhengig av hvor du er Server: Server: XDMCP server: XDMCP server: rdesktop command line options: rdesktop kommandolinjevalg: New session Ny økt Path: Sti: Try auto login (via SSH Agent or default SSH key) Forsøk automatisk pålogging (SSH agent, eller standard SSH nøkkel) SSH Agent or default SSH key SSH-agent, eller standard SSH nøkkel Connect to Windows Terminal Server Koble til Windows terminal server Direct RDP connection Direktekobling med RDP X2Go Client is running in portable mode. You should use a path on your USB device to be able to access your data wherever you are. X2Go Client should be X2Go klienten or whatever is appropriate in Bokmal, because all other strings say X2Go klienten X2Go Clientt kjører i portabel modus. Du burde bruke en sti på din USB enhet for å kunne benytte dataene dine uavhengig av hvor du er. X2Go Client is running in portable mode. You should use a path on your USB device to be able to access your data wherever you are. X2Go Client kjører i portabel modus. Du burde bruke en sti på din USB enhet for å kunne benytte dataene dine uavhengig av hvor du er. Values ranging from <b>0</b> to <b>65535</b> are allowed.<br />A value of <b>0</b> will either use the port specified in the SSH configuration file belonging to a host or shortname, or use the default of <b>22</b>. Verdier mellom <b>0</b> og <b>65535</b> er tillat.<br />Verdien <b>0</b> vil enten bruke porten som er spesifisert i SSH sin konfigurasjonsfil for en spesifikk maskin, ellers brukes standardport <b>22</b>. Direct XDMCP connection Direkte XDMCP oppkobling direct XDMCP connection direkte XDMCP oppkobling Run in X2GoKDrive (experimental) Kjør i X2GoKDrive (eksperimentelt) X2Go/X11 Desktop Sharing X2Go/X11 Skrivebords-deling SettingsWidget &Display &Skjerm &Keyboard &Tastatur Sound Lyd Auto detect keyboard settings Oppdag automatisk tastaturopplegget Do not configure keyboard Ikke konfigurer tastaturet Configure keyboard Konfigurer tastaturet Model: Model: Layout: Utseende: Variant: Variant: RDP Client RDP klient Fullscreen Fullskjerm Custom Tilpasset Window Vindu Use whole display Bruk hele skjermen Maximum available Maksimalt tilgjengelig Set display DPI Sett skjermens DPI Xinerama extension (support for two or more physical displays) Xinerama utvidelse (støtte for to, eller flere fysiske skjermer) Width: Bredde: Height: Høyde: &Display: &Skjerm: &Identify all displays &Identifiser alle skjermer Keep current keyboard Settings Behold gjeldende tastaturoppsett Keyboard layout: Tastatur utseende: Keyboard model: Tastatur modell: Enable sound support Aktiver lydstøtte Start sound daemon Start lydtjeneren Use running sound daemon Benytt kjørende lydtjener Use SSH port forwarding to tunnel sound system connections through firewalls Benytt SSH port videresendring for å tunnelere lydsystem forbindelser gjennom brannmurer Use default sound port Benytt standard lyd port Sound port: Lyd port: Client side printing support Klientside utskrifts støtte Additional parameters: Ekstra parametere: Command line: Kommandolinje: us no pc105/us pc105/no password passord &Clipboard Mode &Clipboard Modus Bidirectional copy and paste Toveis klipp og lim Copy and paste from client to server Klipp og lim fra klient til server Copy and paste from server to client Klipp og lim fra server til klient Disable clipboard completely Skru av utklippstavla &Clipboard mode &Clipboard Modus Auto-detect keyboard settings Oppdag automatisk tastaturopplegget RDP client RDP klient XDMCP client XDMCP klient FreeRDP/X11 (pre-2.x style options) FreeRDP/X11 (før 2.X versjonsvalg) FreeRDP/X11 (2.x style options) FreeRDP/X11 (2.X versjonsvalg) ShareWidget &Folders &Mapper Path Sti Automount Automonter Add Legg til Delete Slett Path: Sti: Filename encoding Tegnkoding av filnavn local: lokal: remote: fjerntliggende: Use ssh port forwarding to tunnel file system connections through firewalls Benytt SSH port videresendring for å tunnelere lydsystem forbindelser gjennom brannmurer Select folder Velg mappe Error Feil x2goclient is running in portable mode. You should use a path on your usb device to be able to access your data whereever you are x2goclient kjører i portabel modus. Du burde bruke en sti på din USB enhet for å kunne benytte dataene dine uavhengig av hvor du er WINDOWS-1252 WINDOWS-1252 ISO8859-1 ISO8859-1 Use SSH port forwarding to tunnel file system connections through firewalls Benytt SSH port videresendring for å tunnelere lydsystem forbindelser gjennom brannmurer X2Go Client is running in portable mode. You should use a path on your USB device to be able to access your data wherever you are. X2Go Client should be X2Go klienten or whatever is appropriate in Bokmal, because all other strings say X2Go klienten X2Go Client kjører i portabel modus. Du burde bruke en sti på din USB enhet for å kunne benytte dataene dine uavhengig av hvor du er. X2Go Client is running in portable mode. You should use a path on your USB device to be able to access your data wherever you are. X2Go Client kjører i portabel modus. Du burde bruke en sti på din USB enhet for å kunne benytte dataene dine uavhengig av hvor du er. SshMasterConnection SSH proxy connection error SSH proxy tilkoblingsfeil SSH proxy connection error: SSH proxy tilkoblingsfeil: Failed to create SSH proxy tunnel Klarte ikke å opprette SSH proxy tunnel Can not initialize libssh Klarer ikke å initiere libssh Can not create ssh session Klarer ikke å opprette ssh sesjon Can not connect to proxy server Klarte ikke å koble til proxyserver Can not connect to Klarer ikke å koble til Authentication failed Autentisering feilet channel_forward_listen failed channel_forward_listen feilet Failed to start SSH Client. Please check your installation and GSSApi configuration Klarte ikke å starte SSH-klient. Sjekk ditt oppsett og din GSSApi innstillinger Check your GSSApi configuration or choose another authentication method Sjekk ditt GSSApi oppsett, eller velg en annen autentiserings metode Can not open file Kan ikke åpne filen Can not create remote file Klarer ikke å opprette fil over nettverket Can not write to remote file Klarer ikke å skrive til filen over nettverket Cannot connect to Klarer ikke å koble til channel_open_forward failed channel_open_forward feilet channel_open_session failed channel_open_session feilet channel_request_exec failed channel_request_exec feilet error writing to socket feil ved skriving til sokkelen error reading channel feil under lesing av kanalen channel_write failed channel_write feilet error reading tcp socket feil ved lesing av tcp sokkelen SSH proxy connection error. SSH proxy tilkoblingsfeil. Failed to create SSH proxy tunnel. Klarte ikke å opprette SSH proxy tunnel. Cannot initialize libssh. Klarer ikke å initiere libssh. Cannot create SSH session. Klarer ikke å opprette ssh økt. Cannot connect to proxy server. Klarte ikke å koble til proxyserver. Authentication failed. Autentisering feilet. Failed to start SSH client. Please check your installation and GSSApi configuration. Klarte ikke å starte SSH-klient. Sjekk ditt oppsett og dine GSSApi innstillinger. Check your GSSApi configuration or choose another authentication method. Sjekk ditt GSSApi oppsett, eller velg en annen autentiserings metode. Cannot open file Kan ikke åpne filen Cannot create remote file Klarer ikke å opprette fil over nettverket Cannot write to remote file Klarer ikke å skrive til filen over nettverket channel_open_forward failed. channel_open_forward feilet. channel_open_session failed. channel_open_session feilet. Error writing to socket. feil ved skriving til sokkelen. Error reading channel. feil under lesing av kanalen. channel_write failed. channel_write feilet. Error reading from TCP socket. Feil ved lesing av tcp sokkelen. Using environment-provided username. Benytter brukernavn fra omgivelsene. %1 failed. Argument in this context will be a function name. %1 feilet. Reconnect session Koble til på nytt SshProcess Error creating socket feil under opprettelse av sokkelen Error binding Feil ved binding Error creating socket. Feil under opprettelse av sokkelen. XSettingsWidget Open File Åpne fil Executable (*.exe) Programfil (*.exe) XSettingsWidgetUI Form Skjema You must restart the X2Go Client for the changes to take effect Du må restarte X2Go klienten for at endringene skal tre i kraft use integrated X-Server Benytt integrert X-Server do not use primary clipboard ikke benytt primær utklippstavle use custom X-Server Benytt egentilpasset X-Server custom X-Server egentilpasset X-Server executable: programfil: start X-Server on X2Go Client start start X-Serveren når X2Go klienten startes command line options: kommandolinjevalg: X-Server command line options X-Server kommandolinjevalg window mode: Vindus-modus: fullscreen mode: fullskjerm-modus: single application: enkeltapplikasjon: whole display: hele skjermen: x2goclient-4.1.2.3/res/i18n/x2goclient_nl.ts0000644000000000000000000071577614447111613015343 0ustar AppDialog Published Applications Gepubliceerde applicaties Search: Zoeken: &Start &Start &Close &Sluiten Multimedia Multimedia Development Ontwikkeling Education Educatie Game Games Graphics Grafisch Network Netwerk Office Kantoor Settings Instellingen System Systeem Utility Gereedschap Other Overig BrokerPassDialogUi Dialog Dialoog Old password: Oud wachtwoord: New password: Nieuw wachtwoord: Confirm password: Wachtwoord bevestigen: TextLabel Tekstlabel BrokerPassDlg Passwords do not match Wachtwoorden komen niet overeen CUPSPrintWidget Form Formulier Name: Naam: Properties Eigenschappen State: Status: Accepting jobs: Opdrachten accepteren: Type: Type: Location: Locatie: Comment: Opmerking: Idle Idle Printing Printen Stopped Geannuleerd Yes Ja No Nee CUPSPrinterSettingsDialog No option selected Geen optie geselecteerd This value is in conflict with another option. Deze waarde geeft een conflict met een andere optie. Options conflict. Opties zijn tegenstrijdig. This value is in conflict with other option Deze waarde geeft een conflict met een andere optie Options conflict Opties zijn tegenstrijdig ConTest Connectivity test Testen van verbinding HTTPS connection: HTTPS connectie: SSH connection: SSH connectie: Connection speed: Verbindingssnelheid: Failed Mislukt 0 Kb/s 0 Kb/s OK OK Socket operation timed out. Time out opgetreden bij verbinden socket. Socket operation timed out Time out opgetreden bij verbinden socket Failed: Mislukt: ConfigDialog General Algemeen Display icon in system tray Icoon in taakbalk weergeven Hide to system tray when minimized In taakbalk weergeven indien geminimaliseerd Hide to system tray when closed In taakbalk weergeven indien gesloten Hide to system tray after connection is established In taakbalk weergeven nadat verbinding tot stand gekomen is Restore from system tray after session is disconnected Vanaf taakbalk herstellen nadat sessie is verbroken Use LDAP Gebruik LDAP Server URL: Server URL: BaseDN: BasisDN: Failover server 1 URL: Failover server 1 URL: Failover server 2 URL: Failover server 2 URL: X.Org Server settings X.Org Server instellingen PulseAudio settings PulseAudio instellingen Disable PulseAudio PulseAudio uitschakelen Disable sound input Geluids invoer uitschakelen Clientside (local) SSH daemon port for file system export usage: Client SSH poort voor exporteren besstandssysteem: Pulseaudio settings Pulsaudio instellingen Disable audio input Audio input uitschakelen <font size="5">You must restart the X2Go Client for the changes to take effect</font><br><br> <font size="5">U moet de X2Go client herstarten om de wijzigingen door te voeren</font><br><br> Your XQuartz version is too old. Uw XQuartz versie is te oud. Your are using XQuartz (X Window System Server for OS X) version %1. U gebruikt de XQuartz (X-Window Server voor OS X) versie %1. This version causes problems with X applications in 24bit color mode. You should update your X11 environment. MacPorts users please follow the steps outlined on: <center><a href="https://guide.macports.org/chunked/using.common-tasks.html">https://guide.macports.org/chunked/using.common-tasks.html</a></center> Users who have installed XQuartz via the installer package can find updated versions on: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> Deze versie veroorzaakt problemen met X applicaties in 24bit kleuren modus. U moet uw X11 omgeving updaten. MacPorts gebruikers kunnen de stappen doorlopen die beschreven zijn op: <center><a href="https://guide.macports.org/chunked/using.common-tasks.html">https://guide.macports.org/chunked/using.common-tasks.html</a></center> Gebruikers die XQuartz geinstalleerd hebben via een installatie bestand kunnen de nieuwste versie downloaden via: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> No valid XQuartz application selected. Geen geschikte XQuartz applicatie geselecteerd. You did not select a valid XQuartz application. Please try again. Some standard installation locations may be: <center><b>/Applications/Utilities/X11.app</b></center> <center><b>/Applications/Utilities/XQuartz.app</b></center> <center><b>/Applications/MacPorts/X11.app</b></center> U heeft geen geldige XQuartz applicatie geselecteerd. Probeer het aub opnieuw. Locaties voor installatie kunnen de volgende zijn: <center><b>/Applications/Utilities/X11.app</b></center> <center><b>/Applications/Utilities/XQuartz.app</b></center> <center><b>/Applications/MacPorts/X11.app</b></center> X-Server settings X-server instellingen X11 application: X11 applicatie: X11 version: X11 versie: Find X11 application X11 applicatie zoeken Clientside SSH port for file system export usage: Client SSH poort voor exporteren besstandssysteem: Start session embedded inside website Sessie starten ingesloten binnen website Advanced options Uitgebreide opties Defaults Standaard &OK &OK &Cancel &Annuleren Settings Instellingen Printing Printen Warning Waarschuwing x2goclient could not find any suitable X11 Application. Please install Apple X11 or select the path to the application x2goclient kan geen geschikte X11 applicatie vinden. Installeer aub Apple X11 of selecteer het pad naar de applicatie Your are using X11 (Apple X-Window Server) version U gebruikt de X11 (Apple X-Window Server) versie . This version causes problems with X-application in 24bit color mode. You should update your X11 environment (http://trac.macosforge.org/projects/xquartz). . Deze versie veroorzaakt problemen met X-applicaties in 24bit kleurenmodus. U moet uw X11 omgeving updaten (http://trac.macosforge.org/projects/xquartz). No suitable X11 application found in selected path Geen geschikte X11 applicatie gevonden in geselecteerde pad &Connection &Verbinding &Input/Output &Input/Output &Media &Media &Settings &Instellingen ConnectionWidget &Connection speed &Verbindingssnelheid Connection speed: Verbindingssnelheid: C&ompression C&ompressie Method: Methode: Compression method: Compressiemethode: Image quality: Afbeeldingskwaliteit: CupsPrinterSettingsDialog Dialog Dialoog General Algemeen Page size: Pagina afmeting: Paper type: Papier soort: Paper source: Papier bron: Duplex Printing Duplex printen None Geen Long side Lange zijde Short side Korte zijde Driver settings Driver instellingen Option Optie Value Waarde No option selected Geen optie geselecteerd text tekst EditConnectionDialog &Session &Sessie &Connection &Verbinding &Input/Output &Input/Output &Media &Multimedia &Shared folders &Gedeelde mappen &OK &OK &Cancel &Annuleren Defaults Standaarden Session preferences - Sessie voorkeuren - ExportDialog &Cancel &Annuleren &share &delen &Preferences ... &Voorkeuren... &Custom folder ... &Aangepaste map... Delete Delete Delete Share Folders Gedeelde mappen share folders gedeelde mappen Select folder Selecteer map FolderButton Sessions folder Sessies map FolderExplorer Folders Mappen Create New Folder Nieuwe map aanmaken Rename Folder... Map hernoemen... Change Icon... Icoon wijzigen... Delete Folder... Map verwijderen... Rename Folder ... Map hernoemen... Change Icon ... Icoon aanpassen... Delete Folder ... Map verwijderen... Open picture Afbeelding openen Pictures Afbeeldingen X2Go Client X2Go client Folder Name: Map naam: Error Fout Unable to remove " Verwijderen niet mogelijk " ". Folder is not empty. Please remove the contents of this directory and try again. ". Map is niet leeg. Verwijder de inhoud van deze directorie en probeer het opnieuw. ". Folder is not empty. Please remove content of folder and try again. ". Deze map is niet leeg. Aub eerst de inhoud van deze map verwijderen en daarna opnieuw proberen. Delete folder " Map verwijderen " New Folder Nieuwe map Help Shows this message. Toont dit bericht. Prints version information. Print versie informatie. Shows the changelog. Toont de changelog. Shows git information as used at compile time. [Deprecated: please use --version.] Toont git informatie als gebruikt tijdens compile tijd. [Verouderd: gebruik aub --version.] Shows available pack methods. Toont beschikbare pack methoden. Do not resume sessions automatically. Sessies niet automatisch hervatten. Hides menu bar. Verbergt menu balk. Disables session editing. Deactiveert sessie bewerking. Starts maximized. Start gemaximaliseerd. Starts hidden (minimized to system tray where available.) Start verborgen (geminimaliseerd naar taakbalk indien beschikbaar.) Starts in "portable" mode. Start in "portable" modus. Forces OpenPGP smart card authentication. Forceert OpenPGP smartcard authenticatie. Disable PulseAudio. PulseAudio uitschakelen. Disable sound input. Geluidsinvoer uitschakelen. Enables Xinerama by default. Xinerama ingesteld als standaard. Allows client side printing in LDAP mode. Staat printen in LDAP modus toe aan client zijde. Enables thinclient mode. Starts without a window manager. Ingesteld als thinclient modus. Start zonder window manager. Enables shutdown button. Shutdown knop beschikbaar. Adds RSA key fingerprint to ".ssh/known_hosts" if authenticity of the server can't be determined. Voegt RSA key fingerprint toe aan ".ssh/known_hosts" als authenticiteit van de server niet vastgesteld kan worden. Starts with LDAP support. Example: --ldap=ldapserver:389:o=organization,c=de Start met LDAP ondersteuning. Bijvoorbeeld: --ldap=ldapserver:389:o=organisatie,c=nl Defines the first LDAP failover server. Definieert de eerste LDAP failover server. Defines the second LDAP failover server. Definieert de tweede LDAP failover server. Defines the remote SSH server port. Default: 22. Definieert de remote SSH server poort. Standaard: 22. Defines the local machine's SSH server port. Needed for Client-Side Printing and File Sharing support. Default: 22. Definieert de SSH poort van de locale machine. Nodig voor printen client zijde en ondersteuning voor delen van bestanden. Standaard: 22. Sets the default command. Default: 'KDE' (Desktop Session) Instelling voor standaard commando. Standaard: 'KDE' (Desktop sessie) Starts the session named "session". Start de sessie met de naam "session". Sets the user name for connecting to the remote SSH server to "username". Gebruikersnaam voor connectie met de remote SSH server ingesteld op "username". Sets the default window geometry. Default: 800x600. Standaard beeldscherminstelling. Standaard: 800x600. Sets the remote X2Go Agent's DPI value to "dpi". Default: same as local display. Stelt de remote X2Go agent DPI waarde in op "dpi". Standaard: dezelfde waarde als lokale instelling. Sets the default link type. Default: "adsl". Standaardinstelling voor verbindingstype. Standaard: "adsl". Sets default pack method. Default: "16m-jpeg-9". Standaardinstelling pack method. Standaard: "16m-jpeg-9". Sets the default clipboard mode. Default: "both". Standaardinstelling klembord. Standaard: "beide". Sets the default keyboard layout to "layout". "layout" may be a comma-separated list. Standaardinstelling toetsenbord ingesteld op "layout" kan een komma gescheiden lijst zijn. Sets the default keyboard type. Instelling standaard toetsenbord type. Sets the user's home directory. Instelling voor home directory gebruiker. Enables or disables overwriting the current keyboard settings. Overschrijven van de huidige toetstenbord instellingen wel of niet mogelijk. Automatically launches the application(s) "app", "app2", ... on session start in Published Applications mode. Automatisch starten van de applicatie(s) "app", "app2", ... bij starten sessie in Gepubliceerde Applicaties modus. Defines an alternative session config file path. Definieert een alternatief pad voor sessie configuratiebestand. Force-enables session system tray icon. Sessie icoon gedwongen beschikbaar in taakbalk. Automatically closes X2Go Client after a disconnect. X2Go Client zal automatisch afgesloten worden na een disconnect. Hides all Folder-Sharing-related options. Verbergen van alle opties voor bestandsdeling. Sets the broker name to display in X2Go Client. This parameter is optional. Instellen weergeven brokernaam in X2Go Client. Deze parameter is optioneel. Sets the path to an SSH key to use for authentication against an SSH session broker. The client's behavior is undefined if this flag is used for non-SSH session brokers. Instelling voor pad naar SSH sleutel voor authenticatie met een SSH sessie broker. Deze client instelling is niet actief bij gebruik van niet SSH sessie brokers. Enables the use of the default SSH key or SSH agent for authentication against an SSH session broker. The client's behavior is undefined if this flag is used for non-SSH session brokers. Activeert gebruik van de standaard SSH sleutel of SSH agent voor authenticatie met een SSH sessie broker. Deze client instelling is niet actief bij gebruik van niet SSH sessie brokers. Does not ask for user credentials during session broker authentication. This can be useful if you are using an HTTP(S) session broker without authentication. If you run an HTTP(S) server without authentication, but with user-specific profiles, then put the user name into the broker URL (refer to --broker-url.) The user name then will be extracted from the broker URL and be sent to the session broker. The client's behavior is undefined if this flag is used for non-HTTP(S) session brokers. Wordt niet om inloggegevens gevraagd tijdens authenticatie met sessie broker. Dit kan nuttig zijn als een HTTP(S) sessie broker in gebruik is zonder authenticatie. Als u een HTTP(S) server gebruikt zonder authenticatie, maar met specifieke gebruikersprofielen, plaats dan de gebruikersnaam in de broker URL. (Verwijs naar --broker-url.). De gebruikersnaam zal dan worden afgeleid uit de broker URL en naar de sessie broker worden verzonden. Deze client instelling is niet actief bij gebruik van niet HTTP(S) sessie brokers. Use broker credentials as session user/password credentials when using broker mode with broker authentication. Currently only affects direct RDP sessions. Gebruik de broker gebruikersgegevens zoals gebruiker/wachtwoord wanneer de broker met broker authenticatie in gebruik is. Betreft momenteel alleen direct RDP sessies. Enables broker logout button. Schakel broker uitlog knop in. Use a custom/branded background image (SVG format) for X2Go Client's main window. If a directory is given, will randomly pick an SVG file inside of it. Gebruik een eigen achtergrondafbeelding (SVG formaat) voor het hoofdvenster van de X2Go Client. Als een directory is opgegeven, zal een willekeurig bestand gekozen worden. Use a custom icon (SVG format) for additional branding to replace the default in the lower left corner of X2Go Client's main window. Gebruik een eigen icoon (SVG formaat) voor het personaliseren en ter vervanging van het standaard icoon links onderin het hoofdvenster van de X2Go Client. Disables X2Go Client's UNIX cleanup helper. This will prevent X2Go Client from terminating spawned processes after the main program terminates or crashes. Use with care and when in doubt, do not use this parameter at all. Schakeld de X2Go Clients UNIX opruim assistent uit. Dit verhinderd de X2Go Client om hangende sessies of processen te beeindigen nadat de werkelijke toepassing is gestopt of gecrashed is. Gebruik deze optie met de nodige voorzichtigheid en wanneer u twijfelt, gebruik deze instelling dan helemaal niet. HelpDialog Options Opties HttpBrokerClient Host key for server changed. It is now: Host sleutel van server aangepast. Het is nu: For security reasons, connection will be stopped Vanwege veiligheidsredenen zal deze verbinding verbroken worden The host key for this server was not found but an othertype of key exists.An attacker might change the default server key toconfuse your client into thinking the key does not exist De host sleutel voor deze server is niet gevonden maar een ander type sleutel is aanwezig. Een aanvaller heeft mogelijk de standaard serversleutel aangepast en wil uw client misleiden door deze te laten geloven dat de sleutel niet bestaat Could not find known host file.If you accept the host key here, the file will be automatically created Kon het known host bestand niet vinden. Als u deze sleutel accepteert zal het bestand automatisch aangemaakt worden The server is unknown. Do you trust the host key? Public key hash: Deze server is onbekend. Wilt u deze host sleutel vertrouwen? Publieke sleutel hash: Host key verification failed Verificatie van host sleutel mislukt Yes Ja No Nee Verification code: Verificatiecode: Enter passphrase to decrypt a key Ingeven wachtwoordzin om een sleutel te decoderen Authentication failed Authenticatie mislukt Error Fout Login failed!<br>Please try again Inloggen mislukt!<br>Opnieuw proberen aub <br><b>Server uses an invalid security certificate.</b><br><br> <br><b>Server gebruikt een ongeldig veiligheidscertificaat.</b><br><br> <p style='background:#FFFFDC;'>You should not add an exception if you are using an internet connection that you do not trust completely or if you are not used to seeing a warning for this server.</p> <p style='background:#FFFFDC;'>U moet geen uitzondering toevoegen wanneer u een internetverbinding gebruikt die u niet geheel kunt vertrouwen, of wanneer u niet gewend bent om een waarschuwing te krijgen vanaf deze server.</p> Secure connection failed Veilige verbinding mislukt For security reasons, the connection attempt will be aborted. Vanwege veiligheidsredenen zal deze verbinding verbroken worden. The host key for this server was not found but another type of key exists. An attacker might have changed the default server key to trick your client into thinking the key does not exist yet. De host sleutel voor deze server is niet gevonden maar een ander type sleutel is aanwezig. Een aanvaller heeft mogelijk de standaard serversleutel aangepast en wil uw client misleiden door deze te laten geloven dat de sleutel niet bestaat. Could not find known hosts file. If you accept the host key here, the file will be automatically created. Kon het known host bestand niet vinden. Als u deze sleutel accepteert zal het bestand automatisch aangemaakt worden. Host key verification failed. Verificatie van host sleutel mislukt. Enter user account password: Geef gebruikers wachtwoord in: Authentication failed. Authenticatie mislukt. Login failed!<br>Please try again. Inloggen mislukt!<br>Opnieuw proberen aub. Secure connection failed. Veilige verbinding mislukt. Issued to: Uitgegeven aan: Common Name(CN) Common Name(CN) Organization(O) Organisatie(O) Organizational Unit(OU) Organisatie eenheid(OU) Serial Number Serienummer Issued by: Uitgegeven door: Validity: Geldigheid: Issued on Uitgegeven op expires on Verloopt op Fingerprints: Vingerafdruk: SHA1 SHA1 MD5 MD5 Exit X2Go Client Afsluiten X2Go Client Add exception Uitzondering toevoegen InteractionDialog Terminal output: Terminal uitvoer: Cancel Annuleren Reconnect Opnieuw verbinden MediaWidget Sound Geluid Enable sound support Geluidsondersteuning inschakelen Start sound daemon Start geluids daemon Use running sound daemon Gebruik actieve geluids daemon Use SSH port forwarding to tunnel sound system connections through firewalls Gebruik SSH poort forwarding voor het tunnelen van geluidssysteemverbindingen door firewalls Use default sound port Gebruik standaard geluidspoort Sound port: Geluidspoort: Client side printing support Printer ondersteuning aan de zijde van client Deprecation Warning Vervallen waarschuwing ARTS support is scheduled to be removed soon. Please upgrade to PulseAudio. Ondersteuning voor ARTS komt binnenkort te vervallen. A.u.b upgraden naar PulseAudio. ESounD support is scheduled to be removed soon. Please upgrade to PulseAudio. Ondersteuning voor ESounD komt binnenkort te vervallen. A.u.b upgraden naar PulseAudio. ONMainWindow Starting x2goclient... X2Goclient wordt gestart... us us X2Go Client X2Go Client connecting verbinden Internet browser Internetbrowser Email client Email client OpenOffice.org OpenOffice.org Terminal Terminal Starting x2goclient in portable mode... data directory is: x2goclient wordt gestart in portable modus... data directory is: &Settings ... &Instellingen ... Support ... Ondersteuning... About X2GO client Over X2Go client Started x2goclient. Gestart x2goclient. Can't load translator: Kan vertaler niet laden: Translator: Vertaler: installed. geïnstalleerd. Share folder... Gedeelde map... Applications... Applicaties... Suspend Onderbreken Terminate Beëindigen Reconnect Opnieuw verbinden Detach X2Go window X2Go scherm losmaken Minimize toolbar Taakbalk minimaliseren Session: Sessie: &Quit &Afsluiten Ctrl+Q Ctrl+Q Quit Afsluiten &New session ... &Nieuwe sessie ... Ctrl+N Ctrl+N Session management... Sessiebeheer... Ctrl+E Ctrl+E &Create session icon on desktop... &Sessie icoon aanmaken op bureaublad ... &Set broker password... &Wachtwoord voor broker invoeren ... &Connectivity test... &Verbindingstest ... Show toolbar Taakbalk tonen About Qt Over Qt Ctrl+Q exit afsluiten Ctrl+Q Starting X2Go Client %1... X2Go Client %1 wordt gestart... Starting X2Go Client in portable mode. Data directory is: X2Go Client wordt gestart in portable modus... data directory is: About X2Go Client Over X2Go client Started X2Go Client. X2Go client gestart. found. gevonden. English language requested, not loading translator. Engelse taal gekozen, vertaling niet geladen. Non-fatal: can't load translator: Niet fatale fout: kan vertaling niet laden: Trying to load language with lower preference, if existent. Geprobeerd een taal te laden die een lagere prioriteit heeft, indien beschikbaar. Session management ... Sessiebeheer... &Create session icon on desktop ... &Sessie icoon aanmaken op bureaublad ... &Set broker password ... &Wachtwoord voor broker invoeren ... &Connectivity test ... &Verbindingstest ... &Session &Sessie &Options &Opties &Help &Help Login: Inloggen: Error Fout Operation failed Bewerking mislukt Password changed Wachtwoord veranderd Wrong password! Verkeerd wachtwoord! Connecting to broker Verbinden met broker <b>Authentication</b> <b>Authenticatie</b> Restore Herstellen Not connected Niet verbonden Multimedia Multimedia Development Ontwikkeling Education Educatie Game Games Graphics Grafisch Network Netwerk Office Kantoor Settings Instellingen System Systeem Utility Gereedschap Other Overige Share folder ... Gedeelde map... A click displays the context menu. Hier klikken zal een context menu tonen. A left click hides or restores the window. A right click displays the context menu. Linker muisknop voor verbergen/herstellen venster. Rechter muisknop om menu te tonen. Closing X2Go Client ... X2Go client sluiten... Finished X2Go Client closing hooks. X2Go client afgesloten. Broker authentication failed! Authenticatie met broker mislukt! no X2Go Server found in LDAP Geen X2Go server gevonden in LDAP Connection error: Verbindingsfout: Couldn't find an SSH connection. Kon geen SSH verbinding vinden. Enter user account password: Geef gebruikers account wachtwoord in: This can be an indication of a man-in-the-middle attack. Somebody might be eavesdropping on you. For security reasons, it is recommended to stop the connection attempt. Do you want to terminate the connection? Dit kan een indicatie zijn voor een " man in the middle" aanval. Iemand is u mogelijk aan het afluisteren. Vanwege veiligheidsoverwegingen is het aanbevolen de verbinding te verbreken. Wilt u de verbinding verbreken? Host key verification failed. Verificatie van host sleutel mislukt. The host key for this server was not found but another type of key exists. An attacker might have changed the default server key to trick your client into thinking the key does not exist yet. For security reasons, it is recommended to stop the connection attempt. Do you want to terminate the connection? De host sleutel voor deze server is niet gevonden maar een ander type sleutel is aanwezig. Een aanvaller heeft mogelijk de standaard server sleutel aangepast en wil uw client misleiden door deze te laten geloven dat de sleutel niet bestaat. Vanwege veiligheidsoverwegingen is het aanbevolen om de verbinding te stoppen. Wilt u de verbinding verbreken? Could not find known hosts file. If you accept the host key here, the file will be automatically created. Kon het known host bestand niet vinden. Als u de host sleutel accepteert zal dit bestand automatisch aangemaakt worden. Authentication failed. Authenticatie mislukt. XDM XDM RDP RDP <b>Connection failed.</b> <b>Verbinding mislukt.</b> No server available. Geen server beschikbaar. Server not available. Geen server beschikbaar. X2GoKDrive session X2GoKDrive sessie No accessible desktop found. Geen beschikbaar bureaubladomgeving gevonden. Your current color depth is different from the session's color depth. This may cause problems reconnecting to this session and in most cases <b>you will loose the session</b> and have to start a new one! It's highly recommended to change the color depth of your display to Uw huidige kleurdiepte verschilt van de kleurdiepte van uw X2Go sessie. Dit kan problemen veroorzaken bij het opnieuw verbinden met deze sessie. In de meeste gevallen <b>zult u deze sessie dan ook verliezen</b> en moet u een nieuwe starten! Het is ten zeerste aanbevolen om de kleurdiepte van uw scherm aan te passen naar bits and restart your X.Org Server before you reconnect to this X2Go session.<br />Do you want to resume this session anyway? bits en uw X.Org Server te herstarten voordat u opnieuw verbinding maakt met deze X2Go sessie.<br />Deze sessie toch hervatten? Your current color depth is different from the session's color depth. This may cause problems reconnecting to this session and in most cases <b>you will lose the session</b> and have to start a new one! Uw huidige kleurdiepte verschilt van de sessie kleurdiepte. Dit kan problemen veroorzaken bij het opnieuw verbinden met deze sessie. In de meeste gevallen <b>zult u deze sessie verliezen</b> en moet u een nieuwe starten! It's highly recommended to change the color depth of your display to %n bit(s) and restart your X.Org Server before you reconnect to this X2Go session. %n will be replaced with a number Het is ten zeerste aanbevolen om de kleurdiepte van uw scherm aan te passen naar %n bit en uw X.Org Server te herstarten voordat u een verbinding maakt met deze X2Go sessie. Het is ten zeerste aanbevolen om de kleurdiepte van uw scherm aan te passen naar %n bits en uw X.Org Server te herstarten voordat u een verbinding maakt met deze X2Go sessie. <br />Do you want to resume this session anyway? <br />Wilt u deze sessie toch hervatten? PulseAudio is not running PulseAudio is niet actief Sound output will be disabled for this session. Please enable PulseAudio in the configuration dialog or disable sound in the session settings Uitvoer van geluid niet beschikbaar voor deze sessie. Activeer a.u.b. PulseAudio in het configuratie dialoogvenster of schakel geluid uit in de sessie instellingen Unable to create SSH tunnel for X2Go session (NX) startup: SSH tunnel voor deze X2Go sessie niet mogelijk (NX) startup: Unable to create SSH tunnel for audio data: Opzetten SSL tunnel niet mogelijk voor audio-data: failed to start. Starten mislukt. This likely means the binary is not available. The current search path is: Dit komt waarschijnlijk omdat de binary niet beschikbaar is. Het huidige pad is: returned a non-zero exit code or crashed otherwise. niet geldige exit code gegenereerd. Execution failed, exit code was: Uitvoeren mislukt, exit code was: didn't start up in time. niet op tijd gestart. This error shouldn't come up. Deze foutmelding zou niet mogen optreden. didn't accept a write operation. geen schrijf actie verwacht. It is probably not running correctly or crashed in-between. Draait waarschijnlijk niet correct of is inmiddels gecrashed. Unable to read from xmodmap. Lezen van xmodmap niet mogelijk. encountered an unknown error during start up or execution. er is een onbekende fout opgetreden tijdens opstarten of uitvoeren. experienced an undefined error. een onbekende fout is opgetreden. X2Go Client will now terminate. File a bug report as outlined on the <a href="http://wiki.x2go.org/doku.php/wiki:bugs">bugs wiki page</a>. X2Go Client zal worden beëindigd. U kunt deze fout melden zoals beschreven op deze <a href="http://wiki.x2go.org/doku.php/wiki:bugs">wiki pagina</a>. Failed to start RDP or XDMCP client Starten van RDP of XDMCP client mislukt Check session settings and ensure that selected client is installed on your system. Controleer de sessie instellingen en verzeker u ervan dat de geselecteerde client geïnstalleerd is op uw systeem. Proxy didn't terminate after 3 seconds. Killing the proxy. Proxy niet afgesloten na 3 seconden. Stoppen van proxy. Closing X2Go Client because it was started in hidden mode. X2Go client zal worden afgesloten omdat het in de verborgen modus is gestart. Closing X2Go Client because the --close-disconnect parameter was passed. X2Go client zal worden afgesloten vanwege disconnect parameter. Are you sure you want to terminate this session? Unsaved documents will be lost. Weet u zeker dat u deze sessie wilt beëindigen? Niet opgeslagen documenten zullen verloren gaan. <b>Connection failed.</b> : <b>Verbinding mislukt.</b> : (file does not exist) (bestand bestaat niet) (directory does not exist) (directory bestaat niet) Invalid value for parameter "--link". Ongeldige waarde voor parameter "--link". Invalid value for parameter "--clipboard". Ongeldige waarde voor parameter "--klembord". Invalid value for parameter "--sound". Ongeldige waarde voor parameter "--geluid". Invalid value for parameter "--geometry". Ongeldige waarde voor parameter "--geometry". Invalid value for parameter "--set-kbd". Ongeldige waarde voor parameter "--set-kbd". Invalid value for parameter "--ldap". verkeerde waarde voor parameter "--ldap". Invalid value for parameter "--ldap1". Ongeldige waarde voor parameter "--ldap1". Invalid value for parameter "--ldap2". Ongeldige waarde voor parameter "--ldap2". Invalid value for parameter "--pack". Ongeldige waarde voor parameter "--pack". Available pack methods: Beschikbare pack methodes: Pack Methods Pack methodes Option is not available in this build. Optie is niet beschikbaar in dit pakket. <br>(C) 2005-2023 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> Translators, feel free to add a localized version of your translation including a copyright notice and your name(s). Remember to keep a <br> at the end, though. English example for a potential translation: <br>(C) 2005-2023 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br>English version: (C) 20AB-20CD Trans Lator <trans@la.tor><br> <br>(C) 2005-2023 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> <br>This is a client to access the X2Go network-based computing environment. This client will be able to connect to X2Go Server(s) and start, stop, resume and terminate (running) desktop sessions. X2Go Client stores different server connections and may automatically request authentication data from LDAP directories. Furthermore, it can be used as a fullscreen login screen (replacement for login managers like XDM). Please visit <a href="http://www.x2go.org">the project home page at x2go.org</a> for further information. <br>Client voor gebruik van de X2Go netwerkgebasseerde computeromgeving. Met deze client maakt u verbinding met de X2Go server(s) en kunt u desktop-sessies starten, stoppen, hervatten en (actieve sessies) beeindigen. De X2Go Client slaat verschillende serververbindingen op in, en kan automatisch authenticatie data opvragen van, LDAP directories. Verder kan de client gebruikt worden als fullscreen inlog scherm (vervanging voor inlog managers als KDM, XDM etc.). Bezoek aub <a href="http://www.x2go.org">de project home page op x2go.org</a> voor meer informatie. Check whether the package providing "pcsc_scan" is installed. The current search path is: Controleer of het pakket dat voorziet in "pcsc_scan" geinstalleerd is. Het huidige zoek pad is: Unable to create or append to file: Aanmaken of toevoegen van bestand niet mogelijk: Unable to change the permissions of file: Wijzigen van bestandsrechten niet mogeljk: This is an error because sshd would deny such a file. Dit is een fout omdat sshd een dergelijk bestand zou weigeren. Unable to change the permissions of directory: Wijzigen van rechten niet mogelijk voor directory: This is an error because sshd would deny such a directory. Dit is een fout omdat sshd een dergelijke directory zou weigeren. Can't start X.Org Server. Kan X.Org Server niet starten. Please check your installation. Controleer aub uw installatie. X.Org Server did not launch correctly after %n tries. %n will be substituted with the current number of tries X.Org Server is na %n poging niet correct gestart. X.Org Server is niet juist gestart na %n pogingen. Unable to find the sftp-server binary. Neither bundled, nor found in $PATH nor additional directories. Kan de sftp-server binary niet vinden. Niet gebundeld, niet gevonden in $PATH of in overige directories. If you are using a Linux-based operating system, please ask your system administrator to install the package containing the sftp-server binary. Common names are <b>openssh</b>, <b>openssh-server</b> or <b>openssh-sftp-server</b> depending upon distribution. If the sftp-server binary is installed on your system, please report a bug mentioning its path on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Als u een Linux besturingssysteem gebruikt, vraag aub uw systeembeheerder om het pakket met de sftp-binary te installere. Veel voorkomende namen zijn <b>openssh</b>, <b>openssh-server</b> or <b>openssh-sftp-server</b> afhankelijk van uw distributie. Als de sftp-server binary wel is geïnstalleerd op uw systeem, geef dan aub een bug door met vermelding van het pad op: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> SSH key type selection error SSH sleutel type selectie fout Unknown SSH key selected. Onbekende SSH sleutel geselecteerd. Terminating application. Applicatie beëindigen. SSH key base directory creation error Aanmaken van SSH sleutel directory is mislukt Unable to create SSH key base directory '%1'. Aanmaken van directory '%1' voor SSH sleutel niet mogelijk. ssh-keygen launching error Fout bij aanmaken ssh-keygen Unable to start the ssh-keygen binary. Starten van ssh-keygen binary niet mogelijk. ssh-keygen crashed ssh-keygen gebroken The ssh-keygen binary crashed. De ssh-keygen binary is gebroken. ssh-keygen program error ssh-keygen programma fout The ssh-keygen binary did not exit cleanly. De ssh-keygen binary is niet juist afgesloten. It was probably called with unknown arguments. Het programma is waarschijnlijk aangeroepen met onbekende argumenten. Unable to open newly generated %1 public host key file. Niet mogelijk om de nieuw aangemaakte %1 publieke host sleutel aan te maken. %1 public host key file empty. %1 publieke host sleutel bestand leeg. You have enabled Remote Printing or File Sharing. These features require a running and functioning SSH server on your computer. <b>Printing and File Sharing will be disabled for this session.</b> U heeft remote printen en delen van mappen ingeschakeld. Voor deze opties is het noodzakelijk dat er een SSH server actief is op uw systeem. <b>Printen en het delen van mappen zijn uitgeschakeld voor deze sessie.</b> Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server. If you see this message, please report a bug on: Normaal gesproken zou dit niet voor mogen komen omdat de X2Go Client voor Windows is voorzien van een eigen interne SSH server. Als u dit bericht ziet wilt u deze foutmelding dan aub kenbaar maken op: The SSH server failed to start. Please report a bug on: SSH server kon niet gestart worden. Als u dit bericht ziet wilt u deze foutmelding dan aub kenbaar maken op: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server and automatically generates the required keys. If you see this message, please report a bug on: Normaal gesproken zou dit niet voor mogen komen omdat de X2Go Client voor Windows is voorzien van een eigen interne SSH server die automatisch de vereiste sleutels aanmaakt. Als u dit bericht ziet wilt u deze foutmelding dan aub kenbaar maken op: X2Go Client was unable to create SSH host keys. Please report a bug on: X2Go Client kon geen SSH sleutels aanmaken. Als u dit bericht ziet wilt u deze foutmelding dan aub kenbaar maken op: SSH daemon failed to open the application's authorized_keys file. SSH daemon kon het geautoriseerde sleutelbestand van deze applicatie niet openen. libssh initialization failure libssh initialisatie fout Unable to initialize libssh. Initialiseren van libssh niet mogelijk. Left mouse button to hide/restore - Right mouse button to display context menu Linker muisknop voor verbergen/herstellen - Rechter muisknop om menu te tonen Closing x2goclient... X2Goclient sluiten... Closed x2goclient. x2goclient afgesloten. Please check LDAP settings Controleer aub LDAP instellingen no X2Go server found in LDAP geen X2Go server gevonden in LDAP Create session icon on desktop Sessie icoon op bureaublad aanmaken Desktop icons can be configured not to show x2goclient (hidden mode). If you like to use this feature you'll need to configure login by a gpg key or gpg smart card. Use x2goclient hidden mode? Bureaublad iconen kunnen worden ingesteld zodat de x2goclient niet getoond zal worden (verborgen modus) Als u van deze mogelijkheid gebruik wilt maken moet u wel inloggen met een gpg sleutel of een gpg smartcard configureren. X2Goclient in verborgen modus gebruiken? Show session tray icon when running Sessie icoon in taakbalk tonen tijdens gebruik New Session Nieuwe sessie X2Go Link to session X2Go link naar sessie No X2Go sessions found, closing. Geen X2Go sessies gevonden, afsluiten. Are you sure you want to delete this session? Weet u zeker dat u deze sessie wilt verwijderen? KDE KDE RDP connection RDP connectie XDMCP XDMCP Connection to local desktop Connectie naar lokale desktop on aan Starting connection to server: Verbinden met server gestart: to naar Connection Error( Verbindingsfout( Couldn't find a SSH connection. Kon geen SSH verbinding vinden. Verification code: Verificatie code: Enter passphrase to decrypt a key Wachtwoordzin ingeven om sleutel te decoderen Host key for server changed. It is now: Host sleutel voor de server is gewijzigd. Het is nu: This can be an indication of a man-in-the-middle attack. Somebody might be eavesdropping on you. For security reasons, it is recommended to stop the connection. Do you want to terminate the connection? Dit kan een indicatie zijn voor een " man in the middle" aanval. Iemand is u mogelijk aan het afluisteren. Vanwege veiligheidsoverwegingen is het aanbevolen de verbinding te verbreken. Wilt u de verbinding verbreken? Host key verification failed Verificatie van host sleutel mislukt Yes Ja No Nee If you accept the new host key the security of your connection may be compromised. Do you want to update the host key? Als u de nieuwe host sleutel accepteert kan dit de beveiliging van uw verbinding schaden. Wilt u de nieuwe host sleutel updaten? The host key for this server was not found but an othertype of key exists. An attacker might change the default server key to confuse your client into thinking the key does not exist. For security reasons, it is recommended to stop the connection. Do you want to terminate the connection? De host sleutel voor deze server is niet gevonden maar een ander type sleutel is aanwezig. Een aanvaller heeft mogelijk de standaard server sleutel aangepast en wil uw client misleiden door deze te laten geloven dat de sleutel niet bestaat. Vanwege veiligheidsoverwegingen is het aanbevolen om de verbinding te stoppen. Wilt u de verbinding verbreken? Could not find known host file.If you accept the host key here, the file will be automatically created Kon het known host bestand niet vinden. Als u de host sleutel accepteert zal dit bestand automatisch aangemaakt worden The server is unknown. Do you trust the host key? Public key hash: Deze server is onbekend. Vertrouwt u de host sleutel? Publieke sleutel hash: Authentication failed: Authenticatie mislukt: Authentication failed Authenticatie mislukt Enter password for SSH proxy Wachtwoord ingeven voor SSH proxy <b>Connection failed</b> <b>Verbinding mislukt</b> <b>Wrong password!</b><br><br> <b>Verkeerd wachtwoord!</b><br><br> Connection failed: Verbinding mislukt: - Wrong password. - Verkeerd wachtwoord. unknown onbekend No server availabel Geen server beschikbaar Server not availabel Server niet beschikbaar Select session: Selecteer sessie: running actief suspended onderbroken Desktop Bureaublad single application enkele applicatie shadow session schaduw sessie Information Informatie No accessible desktop found Geen toegankelijk bureaublad gevonden Filter Filter Select desktop: Selecteer bureaubladomgeving: Warning Waarschuwing Your current color depth is different to the color depth of your x2go-session. This may cause problems reconnecting to this session and in most cases <b>you will loose the session</b> and have to start a new one! It's highly recommended to change the color depth of your Display to Uw huidige kleurdiepte verschilt van de kleurdiepte van uw x2go sessie. Dit kan problemen veroorzaken bij het opnieuw verbinden met deze sessie. In de meeste gevallen <b>zult u deze sessie dan ook verliezen</b> en moet u een nieuwe starten! Het is ten zeerste aanbevolen om de kleurdiepte van uw scherm aan te passen naar 24 or 32 24 of 32 bit and restart your X-server before you reconnect to this x2go-session.<br>Resume this session anyway? bit en uw X-server te herstarten voordat u opnieuw verbinding maakt met deze x2go sessie.<br>Deze sessie toch hervatten? suspending onderbreken terminating afsluiten <b>Wrong Password!</b><br><br> <b>Verkeerd wachtwoord!</b><br><br> New session started Nieuwe sessie gestart Session resumed Sessie hervat Unable to create folder: Aanmaken map niet mogelijk: Unable to write file: Aanmaken bestand niet mogelijk: Attach X2Go window X2Go scherm vastmaken Unable to create SSL tunnel: Opzetten SSL tunnel niet mogelijk: Unable to create SSL Tunnel: Opzetten SSL tunnel niet mogelijk: Emergency exit. ? Afsluiten bij noodgeval. Waiting for proxy to exit. Wachten op afsluiten van proxy. Failed, killing the proxy. Mislukt, proxy wordt afgebroken. Finished Klaar starting starten resuming hervatten Connection timeout, aborting Timeout bij verbinding, afbreken aborting afbreken Are you sure you want to terminate this session? Unsaved documents will be lost Weet u zeker dat u deze sessie wilt beëindigen? Niet opgeslagen documenten zullen verloren gaan Session Sessie Display Beeldscherm Creation time Aanmaaktijd <b>Connection failed</b> : <b>Verbinden mislukt</b> : (can't open file) (kan bestand niet openen) (file not exists) .(bestand bestaat niet) (directory not exists) . (directory bestaat niet) wrong value for argument"--link" verkeerde waarde voor argument"--link" wrong value for argument"--clipboard" verkeerde waarde voor argument"--klembord" wrong value for argument"--sound" verkeerde waarde voor argument"--geluid" wrong value for argument"--geometry" verkeerde waarde voor argument"geometrie" wrong value for argument"--set-kbd" verkeerde waarde voor argument"--set-kbd" wrong value for argument"--ldap" verkeerde waarde voor argument"--ldap" wrong value for argument"--ldap1" verkeerde waarde voor argument"--ldap1" wrong value for argument"--ldap2" verkeerde waarde voor argument"--ldap2" wrong value for argument"--pack" verkeerde waarde voor argument"--pack" Wrong parameter: Verkeerde parameter: Help Help Available pack methodes: Beschikbare pack methoden: Pack Methodes ? Pack methoden Option is not availabel in this build Optie is niet beschikbaar in deze uitgave Changelog Logboek met wijzigingen Git Info Git info Unable to create directory: Aanmaken map niet mogelijk: Cannot open key: Kan sleutel niet openen: <br>(C) 2005-2016 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> <br>(C) 2005-2016 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> <br>X2Go Plugin mode was sponsored by <a href="http://www.foss-group.de/">FOSS-Group GmbH (Freiburg)</a><br> <br>X2Go Plugin mode is gesponsord door <a href="http://www.foss-group.de/">FOSS-Group GmbH (Freiburg)</a><br> <br>This is a client to access the X2Go network-based computing environment. This client will be able to connect to X2Go Server(s) and start, stop, resume and terminate (running) desktop sessions. X2Go Client stores different server connections and may automatically request authentication data from LDAP directories. Furthermore, it can be used as a fullscreen login screen (replacement for login managers like XDM). Please visit <a href="http://www.x2go.org">the project home page at x2go.org</a> for further information. Make sure to look at "the project home page at..." translation again and delete this comment. <br>Client voor gebruik van de X2Go netwerkgebasseerde computeromgeving. Met deze client maakt u verbinding met de X2Go server(s) en kunt u desktop-sessies starten, stoppen, hervatten en (actieve sessies) beeindigen. De X2Go Client slaat verschillende serververbindingen op in, en kan automatisch authenticatie data opvragen van, LDAP directories. Verder kan de client gebruikt worden als fullscreen inlog scherm (vervanging voor inlog managers als KDM, XDM etc.). Bezoek aub <a href="http://www.x2go.org">het project home page op x2go.org</a> voor meer informatie. <b>X2Go Client v. <b>X2Go Client v. Please check LDAP Settings. Controleer aub LDAP instellingen. Check whether the package providing "scdaemon" is installed. The current search path is: Controleer of het pakket dat voorziet in "scdaemon" geïnstalleerd is. Huidige pad verwijzing is: didn't start yet. nog niet gestart. Unable to read from scdaemon. Lezen van scdaemon niet mogelijk. No valid card found. Geen geldige kaart gevonden. This card is unknown to the X2Go system. Deze kaart is onbekend binnen het X2Go systeem. Can't start X.Org Server. Please check your installation. Kan X.Org Server niet starten. Controleer aub uw installatie. Remote server does not support file system exports through SSH tunnels. Please update your x2goserver package. De remote server ondersteund het exporteren van bestanden door een SSH tunnel niet. Aub uw x2goserver sofwarepakket updaten. Unable to create SSH tunnel for Folder Sharing and Printing support: Opzetten van SSH tunnel voor delen van mappen en printer ondersteuning niet mogelijk: Unable to read: Lezen niet mogelijk: Unable to write: Schrijven niet mogelijk: Error getting window geometry. (Did you close the window?) Fout bij opvragen venster geometrie (venster gesloten?) Invalid value for argument "speed" verkeerde waarde voor argument "snelheid" Applications ... Applicaties... SSH daemon could not be started. SSH daemon kon niet gestart worden. SSH daemon is not running. SSH daemon is niet actief. You have enabled Remote Printing or File Sharing. These features require a running and functioning SSH server on your computer. <b>Printing and File Sharing will be disabled for this session.</b> Please also check the <b>Clientside SSH port</b> in the general settings. U heeft remote printen en delen van mappen ingeschakeld. Voor deze opties is het noodzakelijk dat er een SSH server actief is op uw systeem. <b>Printen en het delen van mappen zijn uitgeschakeld voor deze sessie.</b> Controleer aub ook de <b>SSH poort aan client zijde</b> in de algemene instellingen. Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server. If you see this message, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Dit zou normaal gesproken niet mogen gebeuren omdat de X2Go Client voor Windows voorzien is van een eigen interne SSH server. Als u dit bericht ziet wilt u dan aub deze foutmelding doorgeven op: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> The SSH server failed to start. SSH server kon niet gestart worden. X2Go Client did not detect a globally running SSH server on your machine and was unable to start its own. Please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> X2Go Client kon geen actieve SSH server vinden op uw systeem en daarnaast zijn eigen SSH server niet starten. Geef aub deze fout door via de X2Go bugtracker op: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> The SSH server is currently not started. SSH server is momenteel niet actief. On OS X, please follow the following steps to enable SSH service:<ul><li>Open <b>System Preferences</b> (Applications -> System Preferences)</li><li>Go to <b>Sharing</b></li><li>Tick the checkbox besides <b>Remote Login</b></li><li>Check that <b>Allow access for:</b> is set to either:<ul><li>All users: <b>no further steps necessary</b></li><li>Only these users <b>and your user name is included in the list</b></li></ul><li>Optionally, add your user name to the allowed list via the <b>Plus Button</b></li></ul><b>Warning: enabling SSH access will allow any user on the network to connect to your machine. It is your responsibility to set a strong password for every user that is allowed to log in via SSH.</b> Bij OS X, volg aub de volgende stappen om de SSH service in te schakelen:<ul><li>Open <b>System Preferences</b> (Applications -> System Preferences)</li><li>Ga naar <b>Sharing</b></li><li>Zet een vinkje bij <b>Remote Login</b></li><li>Controleer dat <b>Allow access for:</b> is ingesteld op of:<ul><li>All users: <b>geen vervolg stappen noodzakelijk</b></li><li>Only these users <b>en uw gebruikersnaam komt voor in de lijst</b></li></ul><li>Als optie kunt u een gebruikersnaam toevoegen aan de toegestane lijst via de <b>Plus knop</b></li></ul><b>Waarschuwing: het inschakelen van SSH zorgt ervoor dat iedere gebruiker op uw netwerk een verbinding kan maken met uw systeem. Het is uw eigen verantwoordelijkheid om een sterk wachtwoord in te stellen voor iedere gebruiker die mag inloggen via SSH.</b> Please ask your system administrator to provide the SSH service on your computer. Vraag uw systeembeheerder voor het inschakelen van de SSH service op uw computer. Disabling Remote Printing or File Sharing support in the session settings will get rid of this message. Het uitschakelen van remote printen of delen van bestanden bij de sessie instellingen zal ervoor zorgen dat deze melding verdwijnt. SSH daemon failed to open its public host key. SSH daemon kon de publieke sleutel van de applicatie niet openen. You have enabled Remote Printing or File Sharing. These features require a running and functioning SSH server on your computer. <b>Printing and File Sharing will be disabled for this session.</b> The SSH server is currently not configured correctly. Please ensure that the server's public exists. U heeft remote printen en delen van mappen ingeschakeld. Voor deze opties is het noodzakelijk dat er een SSH server actief is op uw systeem. <b>Printen en het delen van mappen zijn uitgeschakeld voor deze sessie.</b> De SSH server is momenteel niet juist geconfigureerd. Zorg ervoor dat de publieke sleutel aanwezig is. Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server and automatically generates the required keys. If you see this message, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Normaal gesproken zou dit niet voor mogen komen omdat de X2Go client voor Windows is voorzien van een eigen interne SSH server die automatisch de vereiste sleutels aanmaakt. Als u dit bericht ziet wilt u deze foutmelding dan aub kenbaar maken op: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> X2Go Client was unable to create SSH host keys. Please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> X2Go Client kon geen SSH sleutels aanmaken. Geef aub deze fout door via de X2Go bugtracker op: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> On OS X, please follow these steps to generate the required keys:<ul><li>Open a <b>Terminal Window</b> (Applications -> Utilities -> Terminal)</li><li>Run this command: <b>ssh -p Bij OS X, volg aub de volgende stappen om de vereiste sleutels aan te maken:<ul><li>Open een <b>Terminal venster</b> (Applications -> Utilities -> Terminal)</li><li>Geef het volgende commado in: <b>ssh -p Please ask your system administrator to generate the required host keys. If you are administrating this system yourself, please run: <center><b>sudo ssh-keygen -A</b></center> Vraag uw systeembeheerder om de vereiste host sleutels te genereren. Als u zelf beheerdersrechten heeft op dit systeem, type dan het volgende commando: <center><b>sudo ssh-keygen -A</b></center> SSH Error SSH fout SSH daemon could not be started. You'll need SSH daemon for printing and file sharing. Normally, this should not happen as X2Go Client for Windows ships its internal sshd.exe. If you see this message, please report a bug against the X2Go bugtracker. SSH daemon kon niet gestart worden. U bent de SSH daemon nodig voor printen en delen van bestanden. Normaal gesproken zou dit niet voor moeten komen omdat bij de X2Go client voor Windows een eigen sshd.exe ingesloten is. Als u dit bericht krijgt, geef dan aub deze fout door via de X2Go bugtracker. SSH daemon is not running. You'll need SSH daemon for printing and file sharing Please ask your system administrator to provide the SSH service on your computer. SSH daemon is niet actief. U bent de SSH daemon nodig voor printen en delen van bestanden Vraag aub uw systeembeheerder om uw computer te voorzien van de SSH service. SSH daemon failed to open the application's public host key. SSH daemon kon de publieke sleutel van de applicatie niet openen. SSH daemon failed to open the application's public key used for exporting folders and printers. SSH daemon kon de publieke sleutel van de applicatie die gebruikt wordt voor printen en het delen van mappen niet openen. SSH daemon failed to open the application's authoized_keys file. Openen van de geautoriseerde sleutel van de applicatie door de SSH daemon mislukt. Options Opties Unable to create folder: Aanmaken map niet mogelijk: RSA file empty. RSA bestand leeg. Can not open key: Kan sleutel niet openen: Support Ondersteuning </b><br> (C. 2005-2016 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br> </b><br> (C. 2005-2016 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br> <br>x2goplugin mode was sponsored by <a href="http://www.foss-group.de/">FOSS-Group GmbH(Freiburg)</a><br> <br>x2goplugin mode was sponsored by <a href="http://www.foss-group.de/">FOSS-Group GmbH(Freiburg)</a><br> <br>Client for use with the X2Go network based computing environment. This Client will be able to connect to X2Go server(s) and start, stop, resume and terminate (running) desktop sessions. X2Go Client stores different server connections and may automatically request authentication data from LDAP directories. Furthermore it can be used as fullscreen loginscreen (replacement for loginmanager like xdm). Please visit x2go.org for further information. <br>Client voor gebruik van de X2GO netwerkgebasseerde computeromgeving. Met deze client maakt u verbinding met de X2GO server(s) en kunt u desktop-sessies starten, stoppen, hervatten en (actieve sessies) beeindigen De X2GO client slaat verschillende serververbindingen op in, en kan automatisch authenticatie data opvragen van, LDAP directories. Verder kan de client gebruikt worden als fullscreen inlog scherm (vervanging voor inlog managers als kdm, xdm etc.). Bezoek aub x2go.org voor meer informatie. <b>X2Go Client V. <b>X2Go Client V. Please check LDAP Settings Controleer aub de LDAP instellingen No valid card found Geen geldige kaart gevonden Card not configured. Kaart is niet geconfigureerd. This card is unknown by X2Go system Deze kaart is onbekend binnen het X2Go systeem Unable to create file: Bestand aanmaken niet mogelijk: Can't connect to X server Please check your settings Verbinden met X server niet mogelijk Controleer aub uw instellingen Can't start X server Please check your settings Kan X server niet starten Controleer aub uw instellingen Can't start X Server Please check your installation Kan X server niet starten Controleer aub uw installatie Unable to execute: Uitvoeren niet mogelijk: Remote server does not support file system export through SSH Tunnel Please update to a newer x2goserver package De remote server ondersteund exporteren van bestanden door SSH tunnel niet Aub updaten naar het nieuwste x2goserver sofwarepakket Unable to read : Lezen niet mogelijk: Unable to write : Schrijven niet mogelijk: WINDOWS-1252 WINDOWS-1252 ISO8859-1 ISO8859-1 Error getting window geometry (window closed)? Fout bij opvragen venster geometrie (venster gesloten)? X2Go Session X2Go sessie wrong value for argument"speed" verkeerde waarde voor argument"snelheid" Password: Wachtwoord: Keyboard layout: Toetsenbordindeling: Ok Ok Cancel Annuleren <b>Session ID:<br>Server:<br>Username:<br>Display:<br>Creation time:<br>Status:</b> <b>Sessie ID:<br>Server:<br>Gebruikersnaam:<br>Scherm:<br>Aanmaaktijd:<br>Status:</b> Abort Afbreken Show details Toon details Resume Hervatten New Nieuw Full access Volledige toegang View only Alleen bekijken Status Status Command Commando Type Type Server Server Client IP Client IP Session ID Sessie ID User Gebruiker Only my desktops Alleen mijn desktops sshd not started, you'll need sshd for printing and file sharing you can install sshd with <b>sudo apt-get install openssh-server</b> sshd niet actief, u bent sshd nodig voor printen en delen van bestanden u kunt sshd installeren met <b>sudo apt-get install openssh-server</b> Restore toolbar Taakbalk herstellen <br><b>&nbsp;&nbsp;&nbsp;Click this button&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;to restore toolbar&nbsp;&nbsp;&nbsp;</b><br> <br><b>&nbsp;&nbsp;&nbsp;Klik op deze button&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;om de taakbalk te herstellen&nbsp;&nbsp;&nbsp;</b><br> PrintDialog Print - X2Go Client Printen - X2Go Client Print Print You've deactivated the X2Go Client printing dialog. U heeft de X2Go Client printer dialoog uitgeschakeld. You may reactivate this dialog using the X2Go Client settings dialog. To do so, follow this path in the menu bar: Options -> Settings U kunt deze dialoog opnieuw activeren via de X2Go Client instellingen dialoog. Via menu -> Opties -> Instellingen You may reactivate this dialog using the X2Go Client settings dialog. To do so, follow this path in the menu bar: Options -> Settings Please adapt this to the new message. Note that it has changed. U kunt deze dialoog opnieuw activeren via de X2Go Client instellingen dialoog (Menu -> Opties -> Instellingen) You've deactivated the x2go client printing dialog. U heeft de x2goclient printer dialoog uitgeschakeld. You may reactivate this dialog using the x2goclient settings dialog (Menu -> Options -> Settings) U kunt deze dialoog opnieuw activeren via de x2goclient instellingen dialoog (Menu -> Opties -> Instellingen) PrintProcess Save File Bestand opslaan PDF Document (*.pdf) PDF Document (*.pdf) Failed to execute command: Uitvoeren van commando mislukt: Printing error. Print fout. Printing error Print fout PrintWidget Form Formulier Print Print View as PDF Bekijken als PDF Print settings Printer instellingen Printer: Printer: Print using default Windows PDF Viewer (Viewer application needs to be installed) Printen met gebruik van standaard Windows PDF Viewer (Viewer applicatie moet geïnstalleerd zijn) Printer command: Printer commando: ... ... Viewer settings Viewer instellingen Open in viewer application Openen in viewer applicatie Command: Commando: Save to disk Opslaan op schijf Show this dialog before start printing Deze dialoog laten zien voor starten printen Please configure your client side printing settings.<br><br>If you want to print the created file, you'll need an external application. Typically you can use <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> and <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>You can find further information <a href="http://www.x2go.org/index.php?id=49">here</a>. Configureer aub de printerinstellingen van uw client.<br><br>Als u het aangemaakte bestand wilt printen, bent u een externe applicatie nodig. Daarvoor kunt u <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> en <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>gebruiken. Meer informatie kunt u <a href="http://www.x2go.org/index.php?id=49">hier</a>vinden. Please configure your client side printing settings.<br><br>If you want to print the created file, you'll need an external application. Typically you can use <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> and <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>You can find further information <a href="http://www.x2go.org/index.php?id=49">here</a>. Configureer aub de printerinstellingen van uw client.<br><br>Als u het aangemaakte bestand wilt printen, bent u een externe applicatie nodig. Daarvoor kunt u <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> en <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>gebruiken. Meer informatie kunt u <a href="http://www.x2go.org/index.php?id=49">hier</a>vinden. PrinterCmdDialog Printer command Printer commando Command Commando Please enter your customized or individual printing command. Examples: kprinter lpr -P hp_laserjet Geef aub uw aangepaste of individuele print commando's in. Voorbeelden: kprinter lpr -P hp_laserjet Output format Output formaat Please choose the printing file format (regarding to your printing environment - if you use CUPS you may use PDF) Kies aub het print formaat (met betrekking tot uw print omgeving - als u CUPS gebruikt kunt u PDF gebruiken) PDF PDF PS PS Data structure Bestandsstructuur Please choose the method of printing file input (some commands accepting printing files as program options, some are awaiting data on standard input): Kies aub de methode van afdrukken (een aantal opdrachten aanvaarden afdrukken van bestanden als programma-opties, sommige zijn in afwachting van informatie van de standaard invoer): standard input (STDIN) standaard invoer (STDIN) Specify path as program parameter Specificeer pad als programma parameter Please enter your customized or individual printing command. Example: Geef aub uw aangepaste of individuele print commando in. Voorbeeld: <Path to gsprint.exe> -query -color <pad naar gsprint.exe> -query -color PulseManager Could not allocate buffer for getting current working directory! Kon geen buffer toewijzen voor verkrijgen huidige directory! getcwd() failed! getcwd() mislukt! PulseAudio failed to start! Starten van PulseAudio mislukt! Error fetching PulseAudio version number! Fout bij ophalen PulseAudio versie nummer! Unexpected character found when parsing version string for major version number Onverwacht karakter gevonden bij ontleden van versie string voor major versienummer Unexpected character found when parsing version string for minor version number Onverwacht karakter gevonden bij ontleden van versie string voor minor versienummer Unexpected character found when parsing version string for micro version number Onverwacht karakter gevonden bij ontleden van versie string voor micro versienummer Supposed to skip major version number. Something is wrong. Verondersteld om major versienummer over te slaan. Er is iets fout. Unable to convert major version number string to integer. Converteren van major versienummer string naar geheel getal niet mogelijk. Unable to convert minor version number string to integer. Converteren van minor versienummer string naar geheel getal niet mogelijk. Unable to convert micro version number string to integer. Converteren van micro versienummer string naar geheel getal niet mogelijk. Unexpected format encountered. Onverwacht formaat gevonden. Unable to start PulseAudio binary. Starten van PulseAudio binary niet mogelijk. Unable to play startup sound. Afspelen van opstartgeluid niet mogelijk. Sound support will not be available. Ondersteuning voor geluid niet beschikbaar. If you downloaded the bundled, pre-compiled version from the official home page or the upstream Linux packages, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Als u de gebundelde, voorgecompileerde versie van de officiële home pagina of van de upstream Linux pakketten heeft gedownload, geef aub een bug door op: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> QObject No response received from the remote server. Do you want to terminate the current session? Geen respons ontvangen van de remote server. Wilt u de huidige sessie beëindigen? X2Go Client could not find any suitable X11 server. X2Go Client kon geen geschikte X11 server vinden. X2Go Client could not start X11 server. X2Go Client kon de X11 server niet starten. X2Go Client requires XQuartz to be installed. If XQuartz is already installed on your system, please select the correct path in the now upcoming dialog. Refer to the end of this message for path examples, in case you do not know the exact location yourself. Should you have <b>not</b> installed XQuartz yet, please follow the outlined steps: X2Go Client vereist dat XQuartz geïnstalleerd is. Als XQuartz al geïnstalleerd is op uw systeem, selecteer aub de juiste pad verwijzing in de hierop volgende dialoog. Kijk onderaan dit bericht naar voorbeelden van pad verwijzingen, voor het geval u niet zelf de juiste locatie weet. Mocht u XQuartz nog <b>niet</b> geïnstalleerd hebben, volg dan aub de volgende stappen: MacPorts users, please install either the port <b>xorg-server</b> or the port <b>xorg-server-devel</b>. Upon successful installation, please follow the instructions printed by the port utility to autostart/load the server. All other users, please obtain and install XQuartz from: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> Afterwards, restart X2Go Client and select the correct path to the X11 application in the general X2Go Client settings. This will most likely be <center><b>/Applications/MacPorts/X11.app</b></center> or <center><b>/Applications/Utilities/XQuartz.app</b></center> MacPorts users, please install either the port <b>xorg-server</b> or the port <b>xorg-server-devel</b>. Upon successful installation, please follow the instructions printed by the port utility to autostart/load the server. All other users, please obtain and install XQuartz from: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> Afterwards, restart X2Go Client and select the correct path to the X11 application in the general X2Go Client settings. This will most likely be <center><b>/Applications/MacPorts/X11.app</b></center> or <center><b>/Applications/Utilities/XQuartz.app</b></center> SessionButton Session preferences... Sessie voorkeuren... Create session icon on desktop... Sessie icoon aanmaken op bureaublad... Session preferences ... Sessie voorkeuren... Create session icon on desktop ... Sessie icoon aanmaken op bureaublad... Delete session Sessie verwijderen Session actions Sessie acties Select type Selecteer type Select resolution Selecteer resolutie Toggle sound support Wissel geluidsondersteuning New Session Nieuwe sessie running actief suspended onderbroken KDE KDE RDP connection RDP connectie XDMCP XDMCP Connection to local desktop Verbinding naar lokaal bureaublad Published applications Gepubliceerde applicaties fullscreen Volledig scherm Display Scherm window venster Maximum Maximaal Enabled Ingeschakeld Disabled Uitgeschakeld SessionExplorer Back Terug Create session icon on desktop Sessie icoon op bureaublad aanmaken Desktop icons can be configured not to show x2goclient (hidden mode). If you like to use this feature you'll need to configure login by a gpg key or gpg smart card. Use x2goclient hidden mode? Bureaublad iconen kunnen worden ingesteld zodat de x2goclient niet getoond zal worden (verborgen modus) Als u van deze mogelijkheid gebruik wilt maken moet u wel inloggen met een gpg sleutel of een gpg smartcard configureren. X2Goclient in verborgen modus gebruiken? Create session icon on desktop. Sessie icoon op bureaublad aanmaken. Desktop icons can be configured not to show X2Go Client (hidden mode.) If you like to use this feature you'll need to configure login via a GPG key or GPG Smart Card. Use X2Go Client's hidden mode? Bureaublad iconen kunnen worden ingesteld zodat de X2Go client niet getoond zal worden (verborgen modus). Als u van deze mogelijkheid gebruik wilt maken moet u wel inloggen met een GPG sleutel of een GPG smartcard configureren. X2Go Client in verborgen modus gebruiken? Show session tray icon when running Sessie icoon in taakbalk tonen tijdens gebruik New Session Nieuwe sessie X2Go Link to session X2Go link naar sessie Are you sure you want to delete this session? Weet u zeker dat u deze sessie wilt verwijderen? SessionManageDialog E&xit A&fsluiten &New session &Nieuwe sessie &Session preferences &Sessie voorkeuren &Delete session &Sessie verwijderen &Create session icon on desktop ... &Sessie icoon aanmaken op bureaublad ... &Create session icon on desktop... &Sessie icoon aanmaken op bureaublad... Delete Delete Verwijderen Session management Sessiebeheer SessionWidget Session name: Sessie naam: << change icon << icoon wijzigen Path: Pad: &Server &Server Values ranging from <b>0</b> to <b>65535</b> are allowed.<br />A value of <b>0</b> will either use the port specified in the SSH configuration file belonging to a host or shortname, or use the default of <b>22</b>. Waardes tussen <b>0</b> tot <b>65535</b> zijn toegestaan.<br />Een waarde van <b>0</b> zal de poort gebruiken zoals bepaald in het SSH configuratie bestand behorend tot een hostnaam, of gebruikt de standaaard waarde van <b>22</b>. Host: Host: Login: Inloggen: SSH port: SSH poort: Use RSA/DSA key for ssh connection: Gebruik RSA/DSA sleutel voor ssh verbinding: Try auto login (ssh-agent or default ssh key) Probeer automatisch inloggen (ssh-agent of standaard ssh sleutel) Try auto login (via SSH Agent or default SSH key) Probeer automatisch inloggen (via SSH-agent of standaard SSH sleutel) Kerberos 5 (GSSAPI) authentication Kerberos 5 (GSSAPI) authenticatie Delegation of GSSAPI credentials to the server Verplaatsen van GSSAPI informatie naar de server Use Proxy server for SSH connection Gebruik proxy server voor SSH verbinding Proxy server Proxy server SSH SSH HTTP HTTP Same login as on X2Go Server Hetzelfde inloggen als op X2Go server Same password as on X2Go Server Hetzelfde wachtwoord als op X2Go server RSA/DSA key: RSA/DSA sleutel: SSH Agent or default SSH key SSH-agent of standaard SSH sleutel Run in X2GoKDrive (experimental) Uitvoeren in X2GoKDrive (experimenteel) Connect to Windows Terminal Server Verbinding maken met Windows terminal server X2Go/X11 Desktop Sharing X2Go/X11 desktop delen Direct RDP connection Directe RDP verbinding X2Go Client is running in portable mode. You should use a path on your USB device to be able to access your data wherever you are. X2Go Client is actief in portable modus. U moet een pad op uw USB device gebruiken om in staat te zijn uw bestanden te benaderen, waar u ook maar bent. Direct XDMCP connection Direct XDMCP connectie ssh-agent or default ssh key ssh-agent of standaard ssh sleutel Type: Type: Port: Poort: &Session type &Sessie type Session type: Sessie type: Connect to Windows terminal server Verbinding maken met Windows terminal server XDMCP XDMCP Connect to local desktop Verbinden met lokale bureaublad Custom desktop Aangepast bureaublad Single application Enkele applicatie Published applications Gepubliceerde applicaties Command: Commando: Advanced options... Uitgebreide opties... Path to executable Pad naar exe bestand Direct RDP Connection Directe RDP verbinding Open key file Open sleutel bestand All files Alle bestanden Error Fout x2goclient is running in portable mode. You should use a path on your usb device to be able to access your data whereever you are x2goclient is actief in portable modus. U moet een pad op uw usb device gebruiken om in staat te zijn uw bestanden te benaderen, waar u ook maar bent RDP port: RDP poort: Open picture Afbeelding openen Pictures Afbeeldingen Server: Server: XDMCP server: XDMCP server: direct XDMCP connection direct XDMCP connectie rdesktop command line options: rdesktop commandoregel opties: New session Nieuwe sessie SettingsWidget &Display &Beeldscherm &Keyboard &Toetsenbord Sound Geluid &Clipboard Mode &Klembord modus &Clipboard mode &Klembord modus Fullscreen Volledig scherm Custom Aangepast Window Venster Use whole display Gebruik volledig beeldscherm Maximum available Maximaal beschikbare Set display DPI Instellen DPI van beeldscherm Xinerama extension (support for two or more physical displays) Xinerama extentie (ondersteuning voor twee of meer fysieke beeldschermen) Width: Breedte: Height: Hoogte: &Display: &Beeldscherm: &Identify all displays &Identificeer alle beeldschermen Bidirectional copy and paste Bidirectioneel copy and past Copy and paste from client to server Copy and past van client naar server Copy and paste from server to client Copy and past van server naar client Disable clipboard completely Klembord volledig uitschakelen Auto-detect keyboard settings Automatisch toetsenbordinstelling detecteren RDP client RDP client FreeRDP/X11 (pre-2.x style options) FreeRDP/X11 (pre-2.x stijl opties) FreeRDP/X11 (2.x style options) FreeRDP/X11 (2.x stijl opties) Auto detect keyboard settings Automatische toetsenbordinstelling Do not configure keyboard Toetsenbord niet configureren Configure keyboard Toetsenbord configureren Model: Model: Layout: Indeling: Variant: Variant: Enable sound support Geluidsondersteuning inschakelen Start sound daemon Start geluids daemon Use running sound daemon Gebruik actieve geluids daemon Use SSH port forwarding to tunnel sound system connections through firewalls Gebruik SSH poort forwarding voor het tunnelen van geluidssysteemverbindingen door firewalls Use default sound port Gebruik standaard geluidspoort Sound port: Geluidspoort: Client side printing support Printer ondersteuning aan de zijde van client RDP Client RDP Client Additional parameters: Extra parameters: Command line: Commandoregel: XDMCP client XDMCP client us us password wachtwoord ShareWidget &Folders &Mappen Path Pad Automount Automatisch aankoppelen Add Toevoegen Delete Verwijderen Path: Pad: Filename encoding Bestandsnaam codering local: Lokaal: remote: remote: Use SSH port forwarding to tunnel file system connections through firewalls Gebruik SSH poort forwarding voor het tunnelen van bestandsuitwisseling door firewalls X2Go Client is running in portable mode. You should use a path on your USB device to be able to access your data wherever you are. X2Go Client is actief in portable modus. U moet een pad op uw usb device gebruiken om in staat te zijn uw bestanden te benaderen, waar u ook maar bent. Use ssh port forwarding to tunnel file system connections through firewalls Gebruik ssh poort forwarding voor het tunnelen van bestandsuitwisseling door firewalls Select folder Selecteer map Error Fout x2goclient is running in portable mode. You should use a path on your usb device to be able to access your data whereever you are x2goclient is actief in portable modus. U moet een pad op uw usb device gebruiken om altijd toegang tot uw data te krijgen, waar u ook maar bent WINDOWS-1252 WINDOWS-1252 ISO8859-1 ISO8859-1 SshMasterConnection Cannot connect to Kan niet verbinden met SSH proxy connection error. SSH proxy verbindingsfout. Failed to create SSH proxy tunnel. Opzetten SSH proxy tunnel mislukt. Cannot initialize libssh. Kan libssh niet initialiseren. Cannot create SSH session. Kan geen SSH sessie opzetten. Using environment-provided username. Gebruikt door systeem voorziene gebruikersnaam. Cannot connect to proxy server. Kan niet verbinden met proxy server. Authentication failed. Authenticatie mislukt. Failed to start SSH client. Please check your installation and GSSApi configuration. Starten van SSH client mislukt. Controleer aub uw installatie en GSSApi configuratie. Check your GSSApi configuration or choose another authentication method. Controleer uw GSSApi configuratie of kies een andere authenticatie methode. Reconnect session Sessie opnieuw verbinden Cannot open file Kan bestand niet openen Cannot create remote file Remote bestand aanmaken niet mogelijk Cannot write to remote file Kan niet naar remote bestand schrijven %1 failed. Argument in this context will be a function name. %1 mislukt. channel_open_forward failed. forwarden_open_kanaal mislukt. channel_open_session failed. sessie_open_kanaal mislukt. Error writing to socket. Fout bij schrijven naar socket. Error reading channel. Fout bij lezen van kanaal. channel_write failed. schrijven_kanaal mislukt. Error reading from TCP socket. Fout bij lezen TCP socket. SSH proxy connection error SSH proxy verbindingsfout SSH proxy connection error: SSH proxy verbindingsfout: Failed to create SSH proxy tunnel Opzetten SSH proxy tunnel mislukt Can not initialize libssh Kan libssh niet initialiseren Can not create ssh session Kan geen ssh sessie opzetten Can not connect to proxy server Kan niet verbinden met proxy server Can not connect to Kan niet verbinden met Authentication failed Authenticatie mislukt Failed to start SSH Client. Please check your installation and GSSApi configuration Starten van SSH client mislukt. Controleer aub uw installatie en GSSApi configuratie Check your GSSApi configuration or choose another authentication method Controleer uw GSSApi configuratie of kies een andere authenticatie methode Can not open file Kan bestand niet openen Can not create remote file Remote bestand aanmaken niet mogelijk Can not write to remote file Kan niet naar remote bestand schrijven channel_open_forward failed ? forwarden_open_kanaal mislukt channel_open_session failed ? sessie_open_kanaal mislukt channel_request_exec failed ? exec_kanaal_verzoek mislukt error writing to socket fout bij schrijven naar socket error reading channel fout bij lezen van kanaal channel_write failed ? schrijven_kanaal mislukt error reading tcp socket fout bij lezen tcp socket SshProcess Error creating socket Fout bij aanmaken socket Error creating socket. Fout bij aanmaken socket. Error binding Fout bij binding XSettingsWidget Open File Bestand openen Executable (*.exe) Uitvoerbaar (*.exe) XSettingsWidgetUI Form Formulier You must restart the X2Go Client for the changes to take effect U moet de X2Go Client herstarten om de wijzigingen door te voeren use integrated X-Server gebruik geïntegreerde X server do not use primary clipboard primaire klembord niet gebruiken use custom X-Server gebruik aangepaste X-server custom X-Server aangepaste X-server executable: uitvoerbaar: start X-Server on X2Go Client start start X-server op X2Go Client start command line options: commandoregel opties: X-Server command line options X-server commandoregel opties window mode: venster modus: fullscreen mode: modus volledig scherm: single application: enkele applicatie: whole display: Volledig beeldscherm: x2goclient-4.1.2.3/res/i18n/x2goclient_pt.ts0000644000000000000000000051776014447111613015346 0ustar AppDialog Published Applications Search: &Start &Close Multimedia Development Education Game Graphics Network Office Settings System Utility Other BrokerPassDialogUi Dialog Old password: New password: Confirm password: TextLabel BrokerPassDlg Passwords do not match CUPSPrintWidget Form Name: Properties State: Accepting jobs: Type: Location: Comment: Idle Printing Stopped Yes No CUPSPrinterSettingsDialog No option selected This value is in conflict with another option. Options conflict. ConTest Connectivity test HTTPS connection: SSH connection: Connection speed: Failed 0 Kb/s OK Socket operation timed out. Failed: ConfigDialog General Display icon in system tray Hide to system tray when minimized Hide to system tray when closed Hide to system tray after connection is established Restore from system tray after session is disconnected Use LDAP Server URL: BaseDN: Failover server 1 URL: Failover server 2 URL: X.Org Server settings Disable PulseAudio Your XQuartz version is too old. Your are using XQuartz (X Window System Server for OS X) version %1. This version causes problems with X applications in 24bit color mode. You should update your X11 environment. MacPorts users please follow the steps outlined on: <center><a href="https://guide.macports.org/chunked/using.common-tasks.html">https://guide.macports.org/chunked/using.common-tasks.html</a></center> Users who have installed XQuartz via the installer package can find updated versions on: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> No valid XQuartz application selected. You did not select a valid XQuartz application. Please try again. Some standard installation locations may be: <center><b>/Applications/Utilities/X11.app</b></center> <center><b>/Applications/Utilities/XQuartz.app</b></center> <center><b>/Applications/MacPorts/X11.app</b></center> X11 application: X11 version: Find X11 application Start session embedded inside website Advanced options Defaults &OK &Cancel Settings Printing PulseAudio settings Disable sound input &Connection &Input/Output &Media ConnectionWidget &Connection speed Connection speed: C&ompression Method: Compression method: Image quality: CupsPrinterSettingsDialog Dialog General Page size: Paper type: Paper source: Duplex Printing None Long side Short side Driver settings Option Value No option selected text EditConnectionDialog &Session &Connection &Input/Output &Media &Shared folders &OK &Cancel Defaults Session preferences - ExportDialog &Cancel &share &Preferences ... &Custom folder ... Delete Delete Share Folders Select folder FolderButton Sessions folder FolderExplorer Folders Create New Folder Rename Folder ... Change Icon ... Delete Folder ... Open picture Pictures X2Go Client Folder Name: Error Unable to remove " ". Folder is not empty. Please remove the contents of this directory and try again. Delete folder " New Folder Help Shows this message. Prints version information. Shows the changelog. Shows git information as used at compile time. [Deprecated: please use --version.] Shows available pack methods. Do not resume sessions automatically. Hides menu bar. Disables session editing. Starts maximized. Starts hidden (minimized to system tray where available.) Starts in "portable" mode. Forces OpenPGP smart card authentication. Disable PulseAudio. Disable sound input. Enables Xinerama by default. Allows client side printing in LDAP mode. Enables thinclient mode. Starts without a window manager. Enables shutdown button. Adds RSA key fingerprint to ".ssh/known_hosts" if authenticity of the server can't be determined. Starts with LDAP support. Example: --ldap=ldapserver:389:o=organization,c=de Defines the first LDAP failover server. Defines the second LDAP failover server. Defines the remote SSH server port. Default: 22. Defines the local machine's SSH server port. Needed for Client-Side Printing and File Sharing support. Default: 22. Sets the default command. Default: 'KDE' (Desktop Session) Starts the session named "session". Sets the user name for connecting to the remote SSH server to "username". Sets the default window geometry. Default: 800x600. Sets the remote X2Go Agent's DPI value to "dpi". Default: same as local display. Sets the default link type. Default: "adsl". Sets default pack method. Default: "16m-jpeg-9". Sets the default clipboard mode. Default: "both". Sets the default keyboard layout to "layout". "layout" may be a comma-separated list. Sets the default keyboard type. Sets the user's home directory. Enables or disables overwriting the current keyboard settings. Automatically launches the application(s) "app", "app2", ... on session start in Published Applications mode. Defines an alternative session config file path. Force-enables session system tray icon. Automatically closes X2Go Client after a disconnect. Hides all Folder-Sharing-related options. Sets the broker name to display in X2Go Client. This parameter is optional. Sets the path to an SSH key to use for authentication against an SSH session broker. The client's behavior is undefined if this flag is used for non-SSH session brokers. Enables the use of the default SSH key or SSH agent for authentication against an SSH session broker. The client's behavior is undefined if this flag is used for non-SSH session brokers. Does not ask for user credentials during session broker authentication. This can be useful if you are using an HTTP(S) session broker without authentication. If you run an HTTP(S) server without authentication, but with user-specific profiles, then put the user name into the broker URL (refer to --broker-url.) The user name then will be extracted from the broker URL and be sent to the session broker. The client's behavior is undefined if this flag is used for non-HTTP(S) session brokers. Use broker credentials as session user/password credentials when using broker mode with broker authentication. Currently only affects direct RDP sessions. Enables broker logout button. Use a custom/branded background image (SVG format) for X2Go Client's main window. If a directory is given, will randomly pick an SVG file inside of it. Use a custom icon (SVG format) for additional branding to replace the default in the lower left corner of X2Go Client's main window. Disables X2Go Client's UNIX cleanup helper. This will prevent X2Go Client from terminating spawned processes after the main program terminates or crashes. Use with care and when in doubt, do not use this parameter at all. HelpDialog Options HttpBrokerClient Host key for server changed. It is now: The server is unknown. Do you trust the host key? Public key hash: Yes No Verification code: Enter passphrase to decrypt a key Error <br><b>Server uses an invalid security certificate.</b><br><br> <p style='background:#FFFFDC;'>You should not add an exception if you are using an internet connection that you do not trust completely or if you are not used to seeing a warning for this server.</p> For security reasons, the connection attempt will be aborted. The host key for this server was not found but another type of key exists. An attacker might have changed the default server key to trick your client into thinking the key does not exist yet. Could not find known hosts file. If you accept the host key here, the file will be automatically created. Host key verification failed. Enter user account password: Authentication failed. Login failed!<br>Please try again. Secure connection failed. Issued to: Common Name(CN) Organization(O) Organizational Unit(OU) Serial Number Issued by: Validity: Issued on expires on Fingerprints: SHA1 MD5 Exit X2Go Client Add exception InteractionDialog Terminal output: Cancel Reconnect MediaWidget Sound Enable sound support Start sound daemon Use running sound daemon Use SSH port forwarding to tunnel sound system connections through firewalls Use default sound port Sound port: Client side printing support Deprecation Warning ARTS support is scheduled to be removed soon. Please upgrade to PulseAudio. ESounD support is scheduled to be removed soon. Please upgrade to PulseAudio. ONMainWindow us X2Go Client connecting Internet browser Email client OpenOffice.org Terminal &Settings ... Support ... Can't load translator: Translator: Suspend Terminate Detach X2Go window Minimize toolbar Session: &Quit Ctrl+Q Quit &New session ... Ctrl+N Ctrl+E Show toolbar About Qt Starting X2Go Client %1... Starting X2Go Client in portable mode. Data directory is: About X2Go Client Started X2Go Client. found. Non-fatal: can't load translator: Trying to load language with lower preference, if existent. Session management ... &Create session icon on desktop ... &Set broker password ... &Connectivity test ... &Session &Options &Help Login: Error Operation failed Password changed Wrong password! Connecting to broker <b>Authentication</b> Restore Not connected Multimedia Development Education Game Graphics Network Office Settings System Utility Other Share folder ... A click displays the context menu. A left click hides or restores the window. A right click displays the context menu. Closing X2Go Client ... Finished X2Go Client closing hooks. Broker authentication failed! no X2Go Server found in LDAP Connection error: Couldn't find an SSH connection. Enter user account password: This can be an indication of a man-in-the-middle attack. Somebody might be eavesdropping on you. For security reasons, it is recommended to stop the connection attempt. Do you want to terminate the connection? Host key verification failed. The host key for this server was not found but another type of key exists. An attacker might have changed the default server key to trick your client into thinking the key does not exist yet. For security reasons, it is recommended to stop the connection attempt. Do you want to terminate the connection? Could not find known hosts file. If you accept the host key here, the file will be automatically created. Authentication failed. XDM RDP <b>Connection failed.</b> No server available. Server not available. X2GoKDrive session No accessible desktop found. PulseAudio is not running Sound output will be disabled for this session. Please enable PulseAudio in the configuration dialog or disable sound in the session settings Unable to create SSH tunnel for X2Go session (NX) startup: Unable to create SSH tunnel for audio data: failed to start. This likely means the binary is not available. The current search path is: returned a non-zero exit code or crashed otherwise. Execution failed, exit code was: didn't start up in time. This error shouldn't come up. didn't accept a write operation. It is probably not running correctly or crashed in-between. Unable to read from xmodmap. encountered an unknown error during start up or execution. experienced an undefined error. X2Go Client will now terminate. File a bug report as outlined on the <a href="http://wiki.x2go.org/doku.php/wiki:bugs">bugs wiki page</a>. Failed to start RDP or XDMCP client Check session settings and ensure that selected client is installed on your system. Proxy didn't terminate after 3 seconds. Killing the proxy. Closing X2Go Client because it was started in hidden mode. Closing X2Go Client because the --close-disconnect parameter was passed. Are you sure you want to terminate this session? Unsaved documents will be lost. <b>Connection failed.</b> : (file does not exist) (directory does not exist) Invalid value for parameter "--link". Invalid value for parameter "--clipboard". Invalid value for parameter "--sound". Invalid value for parameter "--geometry". Invalid value for parameter "--set-kbd". Invalid value for parameter "--ldap". Invalid value for parameter "--ldap1". Invalid value for parameter "--ldap2". Invalid value for parameter "--pack". Available pack methods: Pack Methods Option is not available in this build. Unable to create directory: <br>(C) 2005-2023 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> Translators, feel free to add a localized version of your translation including a copyright notice and your name(s). Remember to keep a <br> at the end, though. English example for a potential translation: <br>(C) 2005-2023 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br>English version: (C) 20AB-20CD Trans Lator <trans@la.tor><br> Check whether the package providing "pcsc_scan" is installed. The current search path is: Unable to create or append to file: Unable to change the permissions of file: This is an error because sshd would deny such a file. Unable to change the permissions of directory: This is an error because sshd would deny such a directory. Can't start X.Org Server. Please check your installation. X.Org Server did not launch correctly after %n tries. %n will be substituted with the current number of tries Unable to find the sftp-server binary. Neither bundled, nor found in $PATH nor additional directories. If you are using a Linux-based operating system, please ask your system administrator to install the package containing the sftp-server binary. Common names are <b>openssh</b>, <b>openssh-server</b> or <b>openssh-sftp-server</b> depending upon distribution. If the sftp-server binary is installed on your system, please report a bug mentioning its path on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> SSH key type selection error Unknown SSH key selected. Terminating application. SSH key base directory creation error Unable to create SSH key base directory '%1'. ssh-keygen launching error Unable to start the ssh-keygen binary. ssh-keygen crashed The ssh-keygen binary crashed. ssh-keygen program error The ssh-keygen binary did not exit cleanly. It was probably called with unknown arguments. Unable to open newly generated %1 public host key file. %1 public host key file empty. Cannot open key: libssh initialization failure Unable to initialize libssh. Your current color depth is different from the session's color depth. This may cause problems reconnecting to this session and in most cases <b>you will lose the session</b> and have to start a new one! It's highly recommended to change the color depth of your display to %n bit(s) and restart your X.Org Server before you reconnect to this X2Go session. %n will be replaced with a number <br />Do you want to resume this session anyway? <br>This is a client to access the X2Go network-based computing environment. This client will be able to connect to X2Go Server(s) and start, stop, resume and terminate (running) desktop sessions. X2Go Client stores different server connections and may automatically request authentication data from LDAP directories. Furthermore, it can be used as a fullscreen login screen (replacement for login managers like XDM). Please visit <a href="http://www.x2go.org">the project home page at x2go.org</a> for further information. <b>X2Go Client v. Please check LDAP Settings. didn't start yet. Unable to read from scdaemon. No valid card found. This card is unknown to the X2Go system. Can't start X.Org Server. Please check your installation. Remote server does not support file system exports through SSH tunnels. Please update your x2goserver package. Unable to create SSH tunnel for Folder Sharing and Printing support: Unable to read: Error getting window geometry. (Did you close the window?) Invalid value for argument "speed" You have enabled Remote Printing or File Sharing. These features require a running and functioning SSH server on your computer. <b>Printing and File Sharing will be disabled for this session.</b> Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server. If you see this message, please report a bug on: The SSH server failed to start. Please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server and automatically generates the required keys. If you see this message, please report a bug on: X2Go Client was unable to create SSH host keys. Please report a bug on: SSH daemon failed to open the application's authorized_keys file. Please check LDAP settings No X2Go sessions found, closing. KDE RDP connection XDMCP Connection to local desktop on Starting connection to server: Verification code: Enter passphrase to decrypt a key Host key for server changed. It is now: Yes No If you accept the new host key the security of your connection may be compromised. Do you want to update the host key? The server is unknown. Do you trust the host key? Public key hash: Authentication failed: Enter password for SSH proxy <b>Wrong password!</b><br><br> Connection failed: - Wrong password. unknown Select session: running suspended Desktop single application shadow session Information Filter Select desktop: Warning suspending terminating <b>Wrong Password!</b><br><br> New session started Session resumed Unable to create folder: Unable to write file: Attach X2Go window Emergency exit. Waiting for proxy to exit. Finished starting resuming Connection timeout, aborting aborting Session Display Creation time (can't open file) Wrong parameter: Help Changelog Git Info Support Card not configured. Unable to execute: WINDOWS-1252 ISO8859-1 X2Go Session Password: Keyboard layout: Ok Cancel <b>Session ID:<br>Server:<br>Username:<br>Display:<br>Creation time:<br>Status:</b> Applications ... Abort Show details Resume New Full access View only Status Command Type Server Client IP Session ID User Only my desktops SSH daemon could not be started. Disabling Remote Printing or File Sharing support in the session settings will get rid of this message. SSH daemon failed to open its public host key. SSH Error SSH daemon failed to open the application's public key used for exporting folders and printers. Restore toolbar <br><b>&nbsp;&nbsp;&nbsp;Click this button&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;to restore toolbar&nbsp;&nbsp;&nbsp;</b><br> PrintDialog Print - X2Go Client Print You've deactivated the X2Go Client printing dialog. You may reactivate this dialog using the X2Go Client settings dialog. To do so, follow this path in the menu bar: Options -> Settings PrintProcess Save File PDF Document (*.pdf) Failed to execute command: Printing error. PrintWidget Form Print View as PDF Print settings Printer: Print using default Windows PDF Viewer (Viewer application needs to be installed) Printer command: ... Viewer settings Open in viewer application Command: Save to disk Show this dialog before start printing Please configure your client side printing settings.<br><br>If you want to print the created file, you'll need an external application. Typically you can use <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> and <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>You can find further information <a href="http://www.x2go.org/index.php?id=49">here</a>. PrinterCmdDialog Printer command Command Please enter your customized or individual printing command. Examples: kprinter lpr -P hp_laserjet Output format Please choose the printing file format (regarding to your printing environment - if you use CUPS you may use PDF) PDF PS Data structure Please choose the method of printing file input (some commands accepting printing files as program options, some are awaiting data on standard input): standard input (STDIN) Specify path as program parameter Please enter your customized or individual printing command. Example: <Path to gsprint.exe> -query -color PulseManager Could not allocate buffer for getting current working directory! getcwd() failed! PulseAudio failed to start! Error fetching PulseAudio version number! Unexpected character found when parsing version string for major version number Unexpected character found when parsing version string for minor version number Unexpected character found when parsing version string for micro version number Supposed to skip major version number. Something is wrong. Unable to convert major version number string to integer. Unable to convert minor version number string to integer. Unable to convert micro version number string to integer. Unexpected format encountered. Unable to start PulseAudio binary. Unable to play startup sound. Sound support will not be available. If you downloaded the bundled, pre-compiled version from the official home page or the upstream Linux packages, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> QObject No response received from the remote server. Do you want to terminate the current session? X2Go Client could not find any suitable X11 server. X2Go Client could not start X11 server. X2Go Client requires XQuartz to be installed. If XQuartz is already installed on your system, please select the correct path in the now upcoming dialog. Refer to the end of this message for path examples, in case you do not know the exact location yourself. Should you have <b>not</b> installed XQuartz yet, please follow the outlined steps: MacPorts users, please install either the port <b>xorg-server</b> or the port <b>xorg-server-devel</b>. Upon successful installation, please follow the instructions printed by the port utility to autostart/load the server. All other users, please obtain and install XQuartz from: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> Afterwards, restart X2Go Client and select the correct path to the X11 application in the general X2Go Client settings. This will most likely be <center><b>/Applications/MacPorts/X11.app</b></center> or <center><b>/Applications/Utilities/XQuartz.app</b></center> SessionButton Session preferences ... Create session icon on desktop ... Delete session Session actions Select type Select resolution Toggle sound support New Session running suspended KDE RDP connection XDMCP Connection to local desktop Published applications fullscreen Display window Maximum Enabled Disabled SessionExplorer Back Create session icon on desktop. Desktop icons can be configured not to show X2Go Client (hidden mode.) If you like to use this feature you'll need to configure login via a GPG key or GPG Smart Card. Use X2Go Client's hidden mode? Show session tray icon when running New Session X2Go Link to session Are you sure you want to delete this session? SessionManageDialog E&xit &New session &Session preferences &Delete session &Create session icon on desktop ... Delete Delete Session management SessionWidget Session name: << change icon Path: &Server Values ranging from <b>0</b> to <b>65535</b> are allowed.<br />A value of <b>0</b> will either use the port specified in the SSH configuration file belonging to a host or shortname, or use the default of <b>22</b>. Host: Login: SSH port: Use RSA/DSA key for ssh connection: Try auto login (via SSH Agent or default SSH key) Kerberos 5 (GSSAPI) authentication Delegation of GSSAPI credentials to the server Use Proxy server for SSH connection Proxy server SSH HTTP Same login as on X2Go Server Same password as on X2Go Server RSA/DSA key: SSH Agent or default SSH key Run in X2GoKDrive (experimental) Connect to Windows Terminal Server X2Go/X11 Desktop Sharing Direct RDP connection X2Go Client is running in portable mode. You should use a path on your USB device to be able to access your data wherever you are. Type: Port: &Session type Session type: XDMCP Custom desktop Single application Published applications Command: Advanced options... Path to executable Open key file All files Error Direct XDMCP connection RDP port: Open picture Pictures Server: XDMCP server: direct XDMCP connection rdesktop command line options: New session SettingsWidget &Display &Keyboard &Clipboard mode Fullscreen Custom Window Use whole display Maximum available Set display DPI Xinerama extension (support for two or more physical displays) Width: Height: &Display: &Identify all displays Bidirectional copy and paste Copy and paste from client to server Copy and paste from server to client Disable clipboard completely Auto-detect keyboard settings RDP client Do not configure keyboard Configure keyboard Model: Layout: Variant: FreeRDP/X11 (pre-2.x style options) FreeRDP/X11 (2.x style options) Additional parameters: Command line: XDMCP client us password ShareWidget &Folders Path Automount Add Delete Path: Filename encoding local: remote: Use SSH port forwarding to tunnel file system connections through firewalls X2Go Client is running in portable mode. You should use a path on your USB device to be able to access your data wherever you are. Select folder Error WINDOWS-1252 ISO8859-1 SshMasterConnection Cannot connect to SSH proxy connection error. Failed to create SSH proxy tunnel. Cannot create SSH session. Using environment-provided username. Cannot connect to proxy server. Authentication failed. Failed to start SSH client. Please check your installation and GSSApi configuration. Check your GSSApi configuration or choose another authentication method. Reconnect session Cannot open file Cannot create remote file Cannot write to remote file %1 failed. Argument in this context will be a function name. Error writing to socket. Error reading channel. Error reading from TCP socket. SSH proxy connection error: SshProcess Error creating socket. Error binding XSettingsWidget Open File Executable (*.exe) XSettingsWidgetUI Form You must restart the X2Go Client for the changes to take effect use integrated X-Server do not use primary clipboard use custom X-Server custom X-Server executable: start X-Server on X2Go Client start command line options: X-Server command line options window mode: fullscreen mode: single application: whole display: x2goclient-4.1.2.3/res/i18n/x2goclient_ru.ts0000644000000000000000000072457614447111613015356 0ustar AppDialog Published Applications Удаленные приложения Search: Поиск: &Start &Пуск &Close &Закрыть Multimedia Мультимедиа Development Разработка Education Обучение Game Игры Graphics Графика Network Сеть Office Офис Settings Установки System Система Utility Утилиты Other Другие BrokerPassDialogUi Dialog Диалог Old password: Старый пароль: New password: Новый пароль: Confirm password: Подтвердить пароль: TextLabel метка BrokerPassDlg Passwords do not match Пароли не совпадают CUPSPrintWidget Idle Ожидание Printing Печать Stopped Остановлен Yes Да No Нет Form Форма Name: Имя: Properties Свойства State: Состояние: Accepting jobs: Принимает задания: Type: Тип: Location: Расположение: Comment: Комментарий: CUPSPrinterSettingsDialog No option selected Нет выбранных параметров This value is in conflict with another option. Options conflict. This value is in conflict with other option Выбранное значение конфликтует с другими опциями Options conflict Конфликт опций ConTest Connectivity test Тест соединения HTTPS connection: HTTPS соединение: SSH connection: SSH соединение: Connection speed: Скорость соединения: Failed Ошибка 0 Kb/s OK Socket operation timed out. Failed: Ошибка: ConfigDialog Use LDAP Использовать LDAP LDAP Settings Установки LDAP Server URL: URL Сервера: BaseDN: BaseDN: Failover Server 1 URL: Failover Server 1 URL: Failover Server 2 URL: Failover Server 2 URL: X-Server Settings Установки X-Сервера Xming Xming XWin (Cygwin) XWin (Cygwin) Custom X-Server Другой X-Сервер Reset to defaults По умолчанию Command: Исполняемый файл: Arguments: Аргументы: Display: Дисплей: Working directory: Рабочий каталог: &OK &OK &Cancel О&тмена Settings Установки Applications (*.exe);;All Files (*.*) Приложения (*.exe);;Все файлы (*.*) X11 Application: X11: X11 Version: Версия X11: Find X11 Application Поиск X11 Warning Предупреждение x2goclient could not find any suitable X11 Application. Please install Apple X11 or select the path to the application x2goclient не смог найти установленное на Вашем компьютере приложение X11. Пожалуйста установите X11 или укажите путь к установленному приложению Your are using X11 (Apple X-Window Server) version Вы используете приложение X11 версии . This version causes problems with X-application in 24bit color mode. You should update your X11 environment (http://trac.macosforge.org/projects/xquartz). . Данная версия имеет проблемы с изображением в 24-х битных цветовых режимах. Обновите пожалуйста ваше X11 приложение (http://trac.macosforge.org/projects/xquartz). No suitable X11 application found in selected path Приложение X11 не найдено в заданом каталоге Clientside SSH Port For File System Export Usage: SSH порт на стороне клиента для экспорта файловой системы: LDAP settings Установки LDAP Failover server 1 URL: Failover Server 1 URL: Failover server 2 URL: Failover Server 2 URL: X-Server settings Установки X-Сервера X11 application: X11: X11 version: Версия X11: Find X11 application Поиск X11 Clientside SSH port for file system export usage: SSH порт на стороне клиента для экспорта файловой системы: General Общие Printing Печать Start session embedded inside website Отображать сессию встроенной в веб страницу Display icon in system tray Отображать пиктограму в системном трее Hide to system tray when minimized Спрятать в системный трей при сворачивании Hide to system tray when closed Спрятать в системный трей при закрытии Hide to system tray after connection is established Спрятать в системный трей после установки соединения Restore from system tray after session is disconnected Восстановить при разрыве соединения X.Org Server settings Advanced options Продвинутые установки Defaults По умолчанию PulseAudio settings Disable PulseAudio Disable sound input Your XQuartz version is too old. Your are using XQuartz (X Window System Server for OS X) version %1. This version causes problems with X applications in 24bit color mode. You should update your X11 environment. MacPorts users please follow the steps outlined on: <center><a href="https://guide.macports.org/chunked/using.common-tasks.html">https://guide.macports.org/chunked/using.common-tasks.html</a></center> Users who have installed XQuartz via the installer package can find updated versions on: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> No valid XQuartz application selected. You did not select a valid XQuartz application. Please try again. Some standard installation locations may be: <center><b>/Applications/Utilities/X11.app</b></center> <center><b>/Applications/Utilities/XQuartz.app</b></center> <center><b>/Applications/MacPorts/X11.app</b></center> &Connection С&оединение &Input/Output &Ввод/Вывод &Media &Медиа &Settings &Установки ConnectionWidget &Connection speed &Тип соединения Connection speed: Тип соединения: C&ompression С&жатие Method: Метод: Compression method: Метод сжатия: Image quality: Качество изображения: CupsPrinterSettingsDialog Dialog Диалог General Общие Page size: Формат бумаги: Paper type: Тип бумаги: Paper source: Подача бумаги: Duplex Printing Двусторонняя печать None Нет Long side По широкой стороне Short side По узкой стороне Driver settings Опции драйвера Option Опция Value Значение No option selected Нет выбранных параметров text текст EditConnectionDialog &Session &Сессия &Connection С&оединение &Shared Folders &Экспорт каталогов &Input/Output &Ввод/Вывод &Media &Медиа &OK &OK &Cancel О&тмена Defaults По умолчанию Session Name: Имя сессии: << change Icon << изменить значок &Server &Сервер Host: Хост: Login: Пользователь: SSH Port: SSH порт: Use RSA/DSA key for ssh connection: RSA/DSA ключ для ssh соединения: &Desktop Session &Оконный менеджер Custom Другой Command: Команда: &Connection Speed &Тип соединения C&ompression С&жатие Method: Метод: Image Quality: Качество изображения: &Display &Дисплей Fullscreen Полноэкранный режим Width: Ширина: Height: Высота: &Keyboard &Клавиатура Keep current Keyboard Settings Использовать текущие установки Keyboard Layout: Раскладка Клавиатуры: Keyboard Model: Модель клавиатуры: Sound Звук Enable Sound Support Активировать звук &Folders &Каталоги Path Расположение Automount Соединять автоматически Add Добавить Delete Удалить Path: Расположение: New Session Новая сессия Session Preferences - Установки сессии - Open Picture Открыть изображение Pictures Изображения Open Key File Открыть файл с ключом All Files Все файлы us ru pc105/us pc105/ru Select Folder Выбор каталога &Session Type &Тип сессии Session Type: Тип сессии: Custom Desktop Другой оконный менеджер Single Application Приложение Path to executable Путь к исполняемому файлу Connection Speed: Скорость соединения: Compression Method: Метод комрессии: Window Окно &Shared folders &Экспорт каталогов Session name: Имя сессии: << change icon << изменить значок SSH port: SSH порт: &Session type &Тип сессии Session type: Тип сессии: Custom desktop Другой оконный менеджер Single application Приложение &Connection speed &Тип соединения Connection speed: Скорость соединения: Compression method: Метод комрессии: Image quality: Качество изображения: Keep current keyboard Settings Использовать текущие установки Keyboard layout: Раскладка Клавиатуры: Keyboard model: Модель клавиатуры: Enable sound support Активировать звук Start sound daemon Запускать звуковой сервер Use running sound daemon Использовать запущенный звуковой сервер Use SSH port forwarding to tunnel sound system connections through firewalls Использовать SSH туннель для звуковой системы Use default sound port Использовать порт по умолчанию Sound port: Порт: Use ssh port forwarding to tunnel file system connections through firewalls Использовать SSH туннель для экспорта файловой системы New session Новая сессия Session preferences - Установки сессии - Open picture Открыть изображение Open key file Открыть файл с ключом All files Все файлы Select folder Выбор каталога Client side printing support Печать на стороне клиента Connect to Windows terminal server Соединение с терминальным сервером Windows Advanced options... Продвинутые установки... Server: Сервер: rdesktop command line options: Опции командной строки rdesktop: ExportDialog &Cancel О&тмена &share &Соединить &Preferences ... &Настройки ... Share Folders &Custom Folder ... &Другой каталог ... Delete Delete Удалить share Folders Экспорт каталогов Select Folder Выбор каталога &Custom folder ... &Другой каталог ... share folders Экспорт каталогов Select folder Выбор каталога FolderButton Sessions folder FolderExplorer Folders Create New Folder Rename Folder ... Change Icon ... Delete Folder ... Open picture Открыть изображение Pictures Изображения X2Go Client Folder Name: Error Ошибка Unable to remove " ". Folder is not empty. Please remove the contents of this directory and try again. Delete folder " New Folder Help Shows this message. Prints version information. Shows the changelog. Shows git information as used at compile time. [Deprecated: please use --version.] Shows available pack methods. Do not resume sessions automatically. Hides menu bar. Disables session editing. Starts maximized. Starts hidden (minimized to system tray where available.) Starts in "portable" mode. Forces OpenPGP smart card authentication. Disable PulseAudio. Disable sound input. Enables Xinerama by default. Allows client side printing in LDAP mode. Enables thinclient mode. Starts without a window manager. Enables shutdown button. Adds RSA key fingerprint to ".ssh/known_hosts" if authenticity of the server can't be determined. Starts with LDAP support. Example: --ldap=ldapserver:389:o=organization,c=de Defines the first LDAP failover server. Defines the second LDAP failover server. Defines the remote SSH server port. Default: 22. Defines the local machine's SSH server port. Needed for Client-Side Printing and File Sharing support. Default: 22. Sets the default command. Default: 'KDE' (Desktop Session) Starts the session named "session". Sets the user name for connecting to the remote SSH server to "username". Sets the default window geometry. Default: 800x600. Sets the remote X2Go Agent's DPI value to "dpi". Default: same as local display. Sets the default link type. Default: "adsl". Sets default pack method. Default: "16m-jpeg-9". Sets the default clipboard mode. Default: "both". Sets the default keyboard layout to "layout". "layout" may be a comma-separated list. Sets the default keyboard type. Sets the user's home directory. Enables or disables overwriting the current keyboard settings. Automatically launches the application(s) "app", "app2", ... on session start in Published Applications mode. Defines an alternative session config file path. Force-enables session system tray icon. Automatically closes X2Go Client after a disconnect. Hides all Folder-Sharing-related options. Sets the broker name to display in X2Go Client. This parameter is optional. Sets the path to an SSH key to use for authentication against an SSH session broker. The client's behavior is undefined if this flag is used for non-SSH session brokers. Enables the use of the default SSH key or SSH agent for authentication against an SSH session broker. The client's behavior is undefined if this flag is used for non-SSH session brokers. Does not ask for user credentials during session broker authentication. This can be useful if you are using an HTTP(S) session broker without authentication. If you run an HTTP(S) server without authentication, but with user-specific profiles, then put the user name into the broker URL (refer to --broker-url.) The user name then will be extracted from the broker URL and be sent to the session broker. The client's behavior is undefined if this flag is used for non-HTTP(S) session brokers. Use broker credentials as session user/password credentials when using broker mode with broker authentication. Currently only affects direct RDP sessions. Enables broker logout button. Use a custom/branded background image (SVG format) for X2Go Client's main window. If a directory is given, will randomly pick an SVG file inside of it. Use a custom icon (SVG format) for additional branding to replace the default in the lower left corner of X2Go Client's main window. Disables X2Go Client's UNIX cleanup helper. This will prevent X2Go Client from terminating spawned processes after the main program terminates or crashes. Use with care and when in doubt, do not use this parameter at all. HelpDialog Options Опции HttpBrokerClient us ru pc105/us pc105/ru Host key for server changed. It is now: Ключ на сервере изменен: For security reasons, connection will be stopped Из соображений безопасности соединение будет разорвано The host key for this server was not found but an othertype of key exists.An attacker might change the default server key toconfuse your client into thinking the key does not exist Ключ для этого сервера не найден, но другой вариант ключа существует. Злоумышленик мог изменить ключ сервера по умолчания, что бы ввести ваш клиент в заблуждение, что этот ключ не существует Could not find known host file.If you accept the host key here, the file will be automatically created Не могу найти файл с ключами. Если вы примете этот ключ, файл будет создан автоматически The server is unknown. Do you trust the host key? Public key hash: Сервер не известен. Доверяете ли вы этому ключу? Public key hash: Host key verification failed Ошибка проверки ключа Yes Да No Нет Verification code: Код проверки: Enter passphrase to decrypt a key Введите фразу-пароль для ключа Authentication failed Ошибка авторизации Error Ошибка Login failed!<br>Please try again Ошибка авторизации<br>Повторите попытку <br><b>Server uses an invalid security certificate.</b><br><br> <br><b>Сервер использует недостоверный SSL сертификат.</b><br><br> <p style='background:#FFFFDC;'>You should not add an exception if you are using an internet connection that you do not trust completely or if you are not used to seeing a warning for this server.</p> <p style='background:#FFFFDC;'>Вам не следует добавлять исключение если вы используете интернет соединение в котором вы не полностью уверены или если вы не должны были бы получить подобное предупрежедение при соединении с этим сервером</p> Secure connection failed Безопасное соединение невозможно For security reasons, the connection attempt will be aborted. The host key for this server was not found but another type of key exists. An attacker might have changed the default server key to trick your client into thinking the key does not exist yet. Could not find known hosts file. If you accept the host key here, the file will be automatically created. Host key verification failed. Enter user account password: Authentication failed. Login failed!<br>Please try again. Secure connection failed. Issued to: Issued to: Common Name(CN) Common Name(CN) Organization(O) Organization(O) Organizational Unit(OU) Organizational Unit(OU) Serial Number Serial Number Issued by: Issued by: Validity: Validity: Issued on Issued on expires on expires on Fingerprints: Fingerprints: SHA1 SHA1 MD5 MD5 Exit X2Go Client Выход Add exception Добавить исключение Your session was disconnected. To get access to your running session, please return to the login page or use the "reload" function of your browser. Ваша сессия больше не действительна. Чтобы продолжить соединение, вернитесь на страницу регистрации или используйте функцию обновления страницы броузера. InteractionDialog Terminal output: Cancel Отмена Reconnect Повторить соединение MediaWidget Sound Звук Enable sound support Активировать звук Start sound daemon Запускать звуковой сервер Use running sound daemon Использовать запущенный звуковой сервер Use SSH port forwarding to tunnel sound system connections through firewalls Использовать SSH туннель для звуковой системы Use default sound port Использовать порт по умолчанию Sound port: Порт: Client side printing support Печать на стороне клиента Deprecation Warning ARTS support is scheduled to be removed soon. Please upgrade to PulseAudio. ESounD support is scheduled to be removed soon. Please upgrade to PulseAudio. ONMainWindow us ru pc105/us pc105/ru Support ... Поддержка ... Session: Сессия: &Quit &Выход Ctrl+Q Ctrl+Q Quit Выход &New Session ... &Новая сессия ... Ctrl+N Ctrl+N Session Management... Управление сессиями... Ctrl+E Ctrl+E &Settings ... &Установки ... SSH daemon could not be started. Disabling Remote Printing or File Sharing support in the session settings will get rid of this message. SSH daemon failed to open its public host key. SSH Error Ошибка SSH SSH daemon could not be started. You'll need SSH daemon for printing and file sharing. Normally, this should not happen as X2Go Client for Windows ships its internal sshd.exe. If you see this message, please report a bug against the X2Go bugtracker. Не удается запустить сервер SSH. Сервер SSH нужен для печати и экспорта ФС. Это не должно было случиться, поскольку X2Go Client обладает внутренним сервером SSH Если вы видите это сообщение, пожалуйста сообщите об ошибке. SSH daemon is not running. You'll need SSH daemon for printing and file sharing Please ask your system administrator to provide the SSH service on your computer. Сервер SSH не обнаружен. Сервер SSH необходим для печати и экспорта ФС Пожалуйста обратитесь к системному администратору за установкой сервера SSH. SSH daemon failed to open the application's public host key. Серверу SSH не удалось открыть "public host key" приложения. SSH daemon failed to open the application's public key used for exporting folders and printers. Серверу SSH не удалось открыть "public host key" приложения используемый для экспорта ФС и принтеров. SSH daemon failed to open the application's authoized_keys file. Серверу SSH не удалось открыть "authorized_keys" файл приложения. Restore toolbar Восстановить панель инструментов About X2GO Client О программе "X2GO Client" About Qt О Qt Session Сессия Ctrl+Q exit Ctrl+Q &Session &Сессия &Options &Опции &Help &Помощь Login: Пользователь: Verification code: Код проверки: This can be an indication of a man-in-the-middle attack. Somebody might be eavesdropping on you. For security reasons, it is recommended to stop the connection. Do you want to terminate the connection? Это может быть признаком попытки взлома. Из соображений безопасности рекомендуется прекратить соединение. Прервать соединение? If you accept the new host key the security of your connection may be compromised. Do you want to update the host key? Если Вы продолжите, безопасность соединения может быть скомпрометированой. Обновить ключ? The host key for this server was not found but an othertype of key exists. An attacker might change the default server key to confuse your client into thinking the key does not exist. For security reasons, it is recommended to stop the connection. Do you want to terminate the connection? Ключ для этого сервера не найден, но другой вариант ключа существует. Злоумышленик мог изменить ключ сервера по умолчания, что бы ввести ваш клиент в заблуждение, что этот ключ не существует. Прекратить соединение? New session started Новая сессия запущенна Session resumed Сессия восстановленна Unable to create folder: Невозможно создать каталог: Unable to write file: Невозможно записать файл: Emergency exit. Аварийный выход. Waiting for proxy to exit. Ожидание завершения прокси. Failed, killing the proxy. Провал, завершаем прокси. wrong value for argument"--clipboard" неверное значение для параметра "--clipboard" Wrong parameter: Неверный параметр: Help Помощь Pack Methodes Методы сжатия Option is not availabel in this build Опция недоступна в этой сборке Changelog Изменения Git Info Информация Git RSA file empty. RSA файл пуст. Can not open key: Невозможно открыть ключ: Card not configured. Карта не сконфигурирована. Error getting window geometry (window closed)? Ошибка чтения геометрии окна (окно закрыто)? Password: Пароль: Keyboard layout: Раскладка Клавиатуры: Ok ОК Cancel Отмена Applications... Приложения... Invalid reply from broker Неверный ответ брокера Error Ошибка Please check LDAP Settings Проверте настройки LDAP no X2Go Server found in LDAP Сервер X2Go не найден в LDAP Are you sure you want to delete this Session? Удалить сессию? KDE KDE on на <b>Connection failed</b> <b>Ошибка соединения</b><br> <b>Wrong Password!</b><br><br> <b>Неверный пароль!</b><br><br> No Server availabel Не доступен ни один сервер Select session: Сессия: Resume Восстановить Suspend Прервать Terminate Завершить New Новая Display Дисплей Status Статус Server Сервер Creation Time Время создания Client IP IP клиента Session ID ID сессии running активна suspended прервана Warning Предупреждение Your current color depth is different to the color depth of your x2go-session. This may cause problems reconnecting to this session and in most cases <b>you will loose the session</b> and have to start a new one! It's highly recommended to change the color depth of your Display to Глубина цвета вашего дисплея не соответствует глубине цвета данной сессии. Это может помешать восстановлению сессии и в большинстве случаев<b>сессия будет утеряна</b> Рекомендуется изменить глубину цвета вашего дисплея на(sp) 24 or 32 24 или 32 bit and restart your X-server before you reconnect to this x2go-session.<br>Resume this session anyway? бит и перезапустить X-сервер до восстановления сессии.<br>Попробовать восстановить сессию не смотря на данное предупреждение? Yes Да No X2Go sessions found, closing. Starting connection to server: Connection Error( Ошибка соединения( Enter passphrase to decrypt a key Введите фразу-пароль для ключа Host key for server changed. It is now: Ключ на сервере изменен: For security reasons, connection will be stopped Из соображений безопасности соединение будет разорвано The host key for this server was not found but an othertype of key exists.An attacker might change the default server key toconfuse your client into thinking the key does not exist Ключ для этого сервера не найден, но другой вариант ключа существует. Злоумышленик мог изменить ключ сервера по умолчания, что бы ввести ваш клиент в заблуждение, что этот ключ не существует Could not find known host file.If you accept the host key here, the file will be automatically created Не могу найти файл с ключами. Если вы примете этот ключ, файл будет создан автоматически The server is unknown. Do you trust the host key? Public key hash: Сервер не известен. Доверяете ли вы этому ключу? Public key hash: No Нет Host key verification failed Ошибка проверки ключа Authentication failed: Authentication failed Ошибка авторизации Enter password for SSH proxy Введите пароль для SSH прокси Connection failed: - Wrong password. Server not availabel Сервер не доступен suspending прерывается terminating завершается Unable to create Folder: Невозможно создать каталог: Unable to write File: Невозможно записать файл: Unable to create SSL Tunnel: Ошибка создания SSL тунеля: connecting соединение Starting X2Go Client in portable mode. Data directory is: About X2Go Client Started X2Go Client. found. Non-fatal: can't load translator: Trying to load language with lower preference, if existent. Session management ... &Create session icon on desktop ... &Set broker password ... &Connectivity test ... Share folder ... A click displays the context menu. A left click hides or restores the window. A right click displays the context menu. Closing X2Go Client ... Finished X2Go Client closing hooks. Broker authentication failed! Connection error: Couldn't find an SSH connection. This can be an indication of a man-in-the-middle attack. Somebody might be eavesdropping on you. For security reasons, it is recommended to stop the connection attempt. Do you want to terminate the connection? Host key verification failed. The host key for this server was not found but another type of key exists. An attacker might have changed the default server key to trick your client into thinking the key does not exist yet. For security reasons, it is recommended to stop the connection attempt. Do you want to terminate the connection? Could not find known hosts file. If you accept the host key here, the file will be automatically created. Authentication failed. <b>Connection failed.</b> No server available. Server not available. No accessible desktop found. Unable to create SSH tunnel for X2Go session (NX) startup: Unable to create SSH tunnel for audio data: failed to start. This likely means the binary is not available. The current search path is: returned a non-zero exit code or crashed otherwise. Execution failed, exit code was: didn't start up in time. This error shouldn't come up. didn't accept a write operation. It is probably not running correctly or crashed in-between. Unable to read from xmodmap. encountered an unknown error during start up or execution. experienced an undefined error. X2Go Client will now terminate. File a bug report as outlined on the <a href="http://wiki.x2go.org/doku.php/wiki:bugs">bugs wiki page</a>. Proxy didn't terminate after 3 seconds. Killing the proxy. Closing X2Go Client because it was started in hidden mode. Closing X2Go Client because the --close-disconnect parameter was passed. starting запуск resuming восстановление Connection timeout, aborting Таймаут соединения, отмена aborting отмена <b>Session ID:<br>Server:<br>Username:<br>Display:<br>Creation Time:<br>Status:</b> <b>ID сессии:<br>Сервер:<br>Пользователь:<br>Дисплей:<br>Время создания:<br>Статус:</b> Abort Отмена Share Folder... Экспорт каталога... Show Details Показать детали <b>Connection failed</b> : <b>Ошибка соединения</b>(new line): (can't open file) (невозможно открыть файл) (file not exists) (файл не существует) (directory not exists) (каталог не существует) wrong parameter: wrong parameter: Options Опции Available pack methodes: Available pack methodes: Support Поддержка </b><br> (C. 2005-2016 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br> </b><br> (C. 2005-2016 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br> Can't read host rsa key: Невозможно прочитать RSA ключ: Unable to read : Невозможно прочитать : Unable to write : Невозможно записать : <b>X2Go Client V. <b>X2Go Client V. </b><br> (C. 2006-2007 Oleksandr Shneyder, Heinz-Markus Graesing)<br><br>Client for use with the X2Go network based computing environment. This Client will be able to connect to X2Go server(s) and start, stop, resume and terminate (running) desktop sessions. X2Go Client stores different server connections and may automatically request authentication data from LDAP directories. Furthermore it can be used as fullscreen loginscreen (replacement for loginmanager like xdm). Please visit x2go.org for further information. </b><br> (C. 2006-2007 Oleksandr Shneyder, Heinz-Markus Graesing)<br><br>Клиент сетевого окружения X2Go. Данный клиент предназначен для соединения с сервером (серверами) X2Go и запуска, восстановления или завершения удаленной сессии. Клиент X2Go сохраняет настройки соединений и может запрашивать информацию о пользователях из LDAP. В последнем случае клиент может использоваться как менеджер входа в систему (замена менеджера подобного xdm) для окружения "тонких клиентов" X2Go. Посетите http://x2go.org для получения более детальной информации. No valid card found Формат карты неизвестен This card is unknown by X2Go System Эта карта не сконфигурирована для использования с X2Go Unable to create file: Невозможно создать файл: Can't connect to X-Server Невозможно присоединиться к X-серверу Can't connect to X server Please check your settings Can't connect to X-Server Please check your settings Невозможно присоединиться к X-серверу Проверьте настройки Can't start X-Server Невозможно запустить X-Сервер Can't start X Server Please check your settings Невозможно запустить X-Сервер Проверьте настройки </b><br> (C. 2006-2008 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br><br>Client for use with the X2Go network based computing environment. This Client will be able to connect to X2Go server(s) and start, stop, resume and terminate (running) desktop sessions. X2Go Client stores different server connections and may automatically request authentication data from LDAP directories. Furthermore it can be used as fullscreen loginscreen (replacement for loginmanager like xdm). Please visit x2go.org for further information. </b><br> (C. 2006-2008 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br><br>Клиент сетевого окружения X2Go. Данный клиент предназначен для соединения с сервером (серверами) X2Go и запуска, восстановления или завершения удаленной сессии. Клиент X2Go сохраняет настройки соединений и может запрашивать информацию о пользователях из LDAP. В последнем случае клиент может использоваться как менеджер входа в систему (замена менеджера подобного xdm) для окружения "тонких клиентов" X2Go. Посетите http://x2go.org для получения более детальной информации. Internet Browser Веб-броузер Email Client Почтовый клиент OpenOffice.org Terminal Терминал unknown неизвестно Command Команда Type Тип Desktop Оконный менеджер single application приложение shadow session теневая сессия <br>Sudo configuration error <br>Ошибка настроек "sudo" Unable to execute: Невозможно выполнить: X2Go Client Starting X2Go Client %1... Internet browser Веб-броузер Email client Почтовый клиент &New session ... &Новая сессия ... Session management... Управление сессиями... Show toolbar Панель инструментов About X2GO client О программе "X2GO Client" Please check LDAP settings Проверьте настройки LDAP no X2Go server found in LDAP Сервер X2Go не найден в LDAP Are you sure you want to delete this session? Удалить сессию? <b>Wrong password!</b><br><br> <b>Неверный пароль!</b><br><br> No server availabel Не доступен ни один сервер Not connected Active connection Соединение не установлено Creation time Время создания Unable to create folder: Невозможно создать каталог: Unable to write file: Невозможно записать файл: Unable to create SSL tunnel: Ошибка создания SSL тунеля: <b>Session ID:<br>Server:<br>Username:<br>Display:<br>Creation time:<br>Status:</b> <b>ID сессии:<br>Сервер:<br>Пользователь:<br>Дисплей:<br>Время создания:<br>Статус:</b> Share folder... Экспорт каталога... Show details Показать детали This card is unknown by X2Go system Эта карта не сконфигурирована для использования с X2Go Can't start X server Please check your settings Невозможно запустить X-Сервер Проверьте настройки Remote server does not support file system export through SSH Tunnel Please update to a newer x2goserver package Удаленный сервер не поддерживает экспорт файловой системы через SSH туннель Пожалуйста обновите пакет x2goserver &Create session icon on desktop... &Создать ярлык сессии на рабочем столе... Can't load translator: Translator: &Set broker password... &Установить пароль на брокере... &Connectivity test... &Тест соединения... Operation failed Ошибка Password changed Пароль изменен Wrong password! Неверный пароль! <b>Authentication</b> <b>Авторизация</b> Restore Восстановить Multimedia Мультимедиа Development Разработка Education Обучение Game Игры Graphics Графика Network Сеть Office Офис Settings Установки System Система Utility Утилиты Other Другие Left mouse button to hide/restore - Right mouse button to display context menu Left click to open the X2GoClient window or right click to get the context menu. Щелчок левой кнопкой: спрятать/восстановить - правой: отобразить контекстное меню Create session icon on desktop Создать ярлык сессии на рабочем столе Desktop icons can be configured not to show x2goclient (hidden mode). If you like to use this feature you'll need to configure login by a gpg key or gpg smart card. Use x2goclient hidden mode? Ярлык сессии может инициировать соединение без отображения клиента X2Go (скрытый режим). Если вы хотите использовать скрытый режим, вам необходимо настроить ключ для соединения или использовать PGP смарт карту. Активировать скрытый режим? Show session tray icon when running Показывать значок системной области при исполнении New Session Новая сессия X2Go sessions not found Сессия X2Go не найдена RDP connection RDP соединение Detach X2Go window Отсоединить окно Attach X2Go window Присоединить окно Finished завершена Are you sure you want to terminate this session? Unsaved documents will be lost Вы уверены, что хотите удалить эту сессию? Все несохраненные документы будут утеряны </b><br> (C. 2006-2010 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br><br>Client for use with the X2Go network based computing environment. This Client will be able to connect to X2Go server(s) and start, stop, resume and terminate (running) desktop sessions. X2Go Client stores different server connections and may automatically request authentication data from LDAP directories. Furthermore it can be used as fullscreen loginscreen (replacement for loginmanager like xdm). Please visit x2go.org for further information. </b><br> (C. 2006-2009 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br><br>Клиент сетевого окружения X2Go. Данный клиент предназначен для соединения с сервером (серверами) X2Go и запуска, восстановления или завершения удаленной сессии. Клиент X2Go сохраняет настройки соединений и может запрашивать информацию о пользователях из LDAP. В последнем случае клиент может использоваться как менеджер входа в систему (замена менеджера подобного xdm) для окружения "тонких клиентов" X2Go. Посетите http://x2go.org для получения более детальной информации. Can't start X Server Please check your installation Невозможно запустить X Server Переустановите X2Go Client X2Go Session Сессия X2Go Minimize toolbar Свернуть панель You have enabled Remote Printing or File Sharing. These features require a running and functioning SSH server on your computer. <b>Printing and File Sharing will be disabled for this session.</b> Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server. If you see this message, please report a bug on: The SSH server failed to start. Please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server and automatically generates the required keys. If you see this message, please report a bug on: X2Go Client was unable to create SSH host keys. Please report a bug on: SSH daemon failed to open the application's authorized_keys file. <br><b>&nbsp;&nbsp;&nbsp;Click this button&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;to restore toolbar&nbsp;&nbsp;&nbsp;</b><br> <br><b>&nbsp;&nbsp;&nbsp;Щелкните по этой иконке&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;чтобы восстановить панель инструментов&nbsp;&nbsp;&nbsp;</b><br> Can't open config file: Невозможно открыть файл: sshd not started, you'll need sshd for printing and file sharing you can install sshd with <b>sudo apt-get install openssh-server</b> sshd не функционирует, ssd необходим для печати и экспорта файловой системы Вы можете установить sshd при помощи команды <b>sudo apt-get install openssh-server</b> Connection to local desktop Соединение с локальным десктопом Enter user account password: XDM RDP X2GoKDrive session Information Информация Filter Фильтр Select desktop: Выбрать десктоп: Your current color depth is different from the session's color depth. This may cause problems reconnecting to this session and in most cases <b>you will lose the session</b> and have to start a new one! It's highly recommended to change the color depth of your display to %n bit(s) and restart your X.Org Server before you reconnect to this X2Go session. %n will be replaced with a number <br />Do you want to resume this session anyway? PulseAudio is not running Sound output will be disabled for this session. Please enable PulseAudio in the configuration dialog or disable sound in the session settings Failed to start RDP or XDMCP client Check session settings and ensure that selected client is installed on your system. Are you sure you want to terminate this session? Unsaved documents will be lost. <b>Connection failed.</b> : (file does not exist) (directory does not exist) Invalid value for parameter "--link". Invalid value for parameter "--clipboard". Invalid value for parameter "--sound". Invalid value for parameter "--geometry". Invalid value for parameter "--set-kbd". Invalid value for parameter "--ldap". Invalid value for parameter "--ldap1". Invalid value for parameter "--ldap2". Invalid value for parameter "--pack". Available pack methods: Pack Methods Option is not available in this build. Unable to create directory: <br>(C) 2005-2023 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> Translators, feel free to add a localized version of your translation including a copyright notice and your name(s). Remember to keep a <br> at the end, though. English example for a potential translation: <br>(C) 2005-2023 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br>English version: (C) 20AB-20CD Trans Lator <trans@la.tor><br> Check whether the package providing "pcsc_scan" is installed. The current search path is: Unable to create or append to file: Unable to change the permissions of file: This is an error because sshd would deny such a file. Unable to change the permissions of directory: This is an error because sshd would deny such a directory. Can't start X.Org Server. Please check your installation. X.Org Server did not launch correctly after %n tries. %n will be substituted with the current number of tries Unable to find the sftp-server binary. Neither bundled, nor found in $PATH nor additional directories. If you are using a Linux-based operating system, please ask your system administrator to install the package containing the sftp-server binary. Common names are <b>openssh</b>, <b>openssh-server</b> or <b>openssh-sftp-server</b> depending upon distribution. If the sftp-server binary is installed on your system, please report a bug mentioning its path on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> SSH key type selection error Unknown SSH key selected. Terminating application. SSH key base directory creation error Unable to create SSH key base directory '%1'. ssh-keygen launching error Unable to start the ssh-keygen binary. ssh-keygen crashed The ssh-keygen binary crashed. ssh-keygen program error The ssh-keygen binary did not exit cleanly. It was probably called with unknown arguments. Unable to open newly generated %1 public host key file. %1 public host key file empty. Cannot open key: libssh initialization failure Unable to initialize libssh. <br>This is a client to access the X2Go network-based computing environment. This client will be able to connect to X2Go Server(s) and start, stop, resume and terminate (running) desktop sessions. X2Go Client stores different server connections and may automatically request authentication data from LDAP directories. Furthermore, it can be used as a fullscreen login screen (replacement for login managers like XDM). Please visit <a href="http://www.x2go.org">the project home page at x2go.org</a> for further information. <b>X2Go Client v. Please check LDAP Settings. didn't start yet. Unable to read from scdaemon. No valid card found. This card is unknown to the X2Go system. Can't start X.Org Server. Please check your installation. Remote server does not support file system exports through SSH tunnels. Please update your x2goserver package. Unable to create SSH tunnel for Folder Sharing and Printing support: Unable to read: Error getting window geometry. (Did you close the window?) Invalid value for argument "speed" Applications ... View only Только смотреть User Пользователь XDMCP XDMCP No accessible desktop found Доступный десктоп не найден Full access Полный доступ Only my desktops Только мои десктопы Reconnect Повторить соединение Connecting to broker Соединение с брокером </b><br> (C. 2006-2010 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br> </b><br> (C. 2006-2010 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br> <br>x2goplugin mode was sponsored by <a href="http://www.foss-group.de/">FOSS-Group GmbH(Freiburg)</a><br> <br>x2goplugin был разработан при поддержке <a href="http://www.foss-group.de/">FOSS-Group GmbH(Freiburg)</a><br> <br>Client for use with the X2Go network based computing environment. This Client will be able to connect to X2Go server(s) and start, stop, resume and terminate (running) desktop sessions. X2Go Client stores different server connections and may automatically request authentication data from LDAP directories. Furthermore it can be used as fullscreen loginscreen (replacement for loginmanager like xdm). Please visit x2go.org for further information. <br>Клиент сетевого окружения X2Go. Данный клиент предназначен для соединения с сервером (серверами) X2Go и запуска, восстановления или завершения удаленной сессии. Клиент X2Go сохраняет настройки соединений и может запрашивать информацию о пользователях из LDAP. В последнем случае клиент может использоваться как менеджер входа в систему (замена менеджера подобного xdm) для окружения "тонких клиентов" X2Go. Посетите http://x2go.org для получения более детальной информации. WINDOWS-1252 WINDOWS-1251 ISO8859-1 KOI8-R wrong value for argument"speed" wrong value for argument"speed" application/x2go:x2go:Configuration File for X2Go Session application/x2go:x2go:Файл настроек сессии X2Go PrintDialog Print Печать You've deactivated the X2Go Client printing dialog. You may reactivate this dialog using the X2Go Client settings dialog. To do so, follow this path in the menu bar: Options -> Settings You've deactivated the x2go client printing dialog. Отключение диалога печати. You may reactivate this dialog using the x2goclient settings dialog (Menu -> Options -> Settings) Для активации диалога печати воспользуйтесь диалогом установок (меню -> опции -> установки) Print - X2Go Client Печать - X2Go Client PrintProcess Save File Сохранить файл PDF Document (*.pdf) Документ PDF (*.pdf) Failed to execute command: Невозможно выполнить команду: Printing error. Printing error Ошибка печати PrintWidget Form Форма Print Печать View as PDF Просмотр PDF Print settings Настройки печати Printer command: Команда печати: ... ... Viewer settings Настройки просмотра Open in viewer application Открыть программой просмотра Command: Команда: Save to disk Сохранить на диске Show this dialog before start printing Открывать этот диалог перед печатью Please configure your client side printing settings.<br><br>If you want to print the created file, you'll need an external application. Typically you can use <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> and <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>You can find further information <a href="http://www.x2go.org/index.php?id=49">here</a>. Настройка програмы печати<br><br>Для печати сгенерированных файлов вам понадобится специальная программа печати. Мы рекомендуем использовать <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> и <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>Более детальную информацию о настройках программы печати вы можете найти <a href="http://www.x2go.org/index.php?id=49">здесь</a>. Printer: Принтер: Print using default Windows PDF Viewer (Viewer application needs to be installed) Печать при помощи стандартной программы Windows для просмотра PDF (Программа просмотра должна быть установленна) Please configure your client side printing settings.<br><br>If you want to print the created file, you'll need an external application. Typically you can use <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> and <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>You can find further information <a href="http://www.x2go.org/index.php?id=49">here</a>. PrinterCmdDialog Printer command Команда печати Command Команда Please enter your customized or individual printing command. Examples: kprinter lpr -P hp_laserjet Пожалуйста введите выбранную вами команду печати. Примеры: kprinter lpr -P hp_laserjet Output format Формат вывода Please choose the printing file format (regarding to your printing environment - if you use CUPS you may use PDF) Пожалуйста выберите формат файла печати (если вы используете CUPS, вы можете выбрать PDF) PDF PDF PS PS Data structure Структура данных Please choose the method of printing file input (some commands accepting printing files as program options, some are awaiting data on standard input): Пожалуйста выберите метод ввода файла печати (некоторые программы требуют указать имя файла печати в параметрах командной строки, другие читают данные из устройства стандартного ввода): standard input (STDIN) стандартный ввод (STDIN) Specify path as program parameter Указать путь к файлу в параметре командной строки Please enter your customized or individual printing command. Example: Пожалуйста введите выбранную вами команду печати. Пример: <Path to gsprint.exe> -query -color <Путь к gsprint.exe> -query -color PulseManager Could not allocate buffer for getting current working directory! getcwd() failed! PulseAudio failed to start! Error fetching PulseAudio version number! Unexpected character found when parsing version string for major version number Unexpected character found when parsing version string for minor version number Unexpected character found when parsing version string for micro version number Supposed to skip major version number. Something is wrong. Unable to convert major version number string to integer. Unable to convert minor version number string to integer. Unable to convert micro version number string to integer. Unexpected format encountered. Unable to start PulseAudio binary. Unable to play startup sound. Sound support will not be available. If you downloaded the bundled, pre-compiled version from the official home page or the upstream Linux packages, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> QObject No response received from the remote server. Do you want to terminate the current session? Нет ответа от сервера. Прервать текущую сессию? X2Go Client could not find any suitable X11 server. X2Go Client could not start X11 server. X2Go Client requires XQuartz to be installed. If XQuartz is already installed on your system, please select the correct path in the now upcoming dialog. Refer to the end of this message for path examples, in case you do not know the exact location yourself. Should you have <b>not</b> installed XQuartz yet, please follow the outlined steps: MacPorts users, please install either the port <b>xorg-server</b> or the port <b>xorg-server-devel</b>. Upon successful installation, please follow the instructions printed by the port utility to autostart/load the server. All other users, please obtain and install XQuartz from: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> Afterwards, restart X2Go Client and select the correct path to the X11 application in the general X2Go Client settings. This will most likely be <center><b>/Applications/MacPorts/X11.app</b></center> or <center><b>/Applications/Utilities/XQuartz.app</b></center> SessionButton Session Preferences... Установки сессии... Delete Session... Удалить сессию... Select Type Выбор десктопа Select Resolution Выбор разрешения экрана Toggle Sound support Активировать звук New Session Новая сессия Published applications Удаленные приложения fullscreen Полноэкранная сессия Display Дисплей Maximum Максимальное Enabled активирован Disabled деактивирован window окно Session preferences... Установки сессии... Create session icon on desktop... Создать ярлык сессии на рабочем столе... Session preferences ... Create session icon on desktop ... Delete session Удалить сессию Session actions Опции Select type Тип сессии Select resolution Выбрать разрешение Toggle sound support Звук running активна suspended прервана KDE KDE RDP connection RDP соединение Connection to local desktop Соединение с локальным десктопом XDMCP XDMCP SessionExplorer Back Create session icon on desktop Создать ярлык сессии на рабочем столе Desktop icons can be configured not to show x2goclient (hidden mode). If you like to use this feature you'll need to configure login by a gpg key or gpg smart card. Use x2goclient hidden mode? Ярлык сессии может инициировать соединение без отображения клиента X2Go (скрытый режим). Если вы хотите использовать скрытый режим, вам необходимо настроить ключ для соединения или использовать PGP смарт карту. Активировать скрытый режим? Create session icon on desktop. Desktop icons can be configured not to show X2Go Client (hidden mode.) If you like to use this feature you'll need to configure login via a GPG key or GPG Smart Card. Use X2Go Client's hidden mode? Show session tray icon when running Показывать значок системной области при исполнении New Session Новая сессия X2Go Link to session Are you sure you want to delete this session? Удалить сессию? SessionManageDialog E&xit &Выход &New Session &Новая сессия &Session Preferences &Установки сессии &Delete Session У&далить сессию Delete Delete Удалить Session Management Управление сессиями &New session &Новая сессия &Session preferences &Установки сессии &Delete session У&далить сессию &Create session icon on desktop ... Session management Управление сессиями &Create session icon on desktop... &Создать ярлык сессии на рабочем столе... SessionWidget Session name: Имя сессии: << change icon << изменить значок Path: Расположение: &Server &Сервер Host: Хост: Login: Пользователь: SSH port: SSH порт: Use RSA/DSA key for ssh connection: RSA/DSA ключ для ssh соединения: Try auto login (ssh-agent or default ssh key) Автоматическое соединение с SSH ключом по умолчанию или программой ssh-agent Kerberos 5 (GSSAPI) authentication Авторизация Kerberos 5 (GSSAPI) Delegation of GSSAPI credentials to the server Делегация GSSAPI на сервер Use Proxy server for SSH connection Использовать прокси сервер для SSH соединения Proxy server Прокси сервер SSH SSH HTTP HTTP Same login as on X2Go Server Такое же имя пользователя как на сервере X2Go Same password as on X2Go Server Такой же пароль как на сервере X2Go RSA/DSA key: Ключ RSA/DSA: ssh-agent or default ssh key Автоматическое соединение с SSH ключом по умолчанию или программой ssh-agent Type: Тип: Port: Порт: &Session type &Тип сессии Session type: Тип сессии: Connect to Windows terminal server Соединение с терминальным сервером Windows Custom desktop Другой оконный менеджер Single application Приложение Published applications Удаленные приложения Command: Команда: Advanced options... Продвинутые установки... Path to executable Путь к исполняемому файлу Direct RDP Connection Прямое RDP соединение RDP port: RDP порт: Open picture Открыть изображение Pictures Изображения Open key file Открыть файл с ключом Values ranging from <b>0</b> to <b>65535</b> are allowed.<br />A value of <b>0</b> will either use the port specified in the SSH configuration file belonging to a host or shortname, or use the default of <b>22</b>. Try auto login (via SSH Agent or default SSH key) SSH Agent or default SSH key Run in X2GoKDrive (experimental) Connect to Windows Terminal Server X2Go/X11 Desktop Sharing Direct RDP connection All files Все файлы X2Go Client is running in portable mode. You should use a path on your USB device to be able to access your data wherever you are. Direct XDMCP connection Server: Сервер: direct XDMCP connection rdesktop command line options: Опции командной строки rdesktop: New session Новая сессия Connect to local desktop Соединение с локальным десктопом XDMCP server: Сервер XDMCP: XDMCP XDMCP Error Ошибка x2goclient is running in portable mode. You should use a path on your usb device to be able to access your data whereever you are x2goclient запущен в "переносимом" режиме. Пожалуйста выберите путь находящийся в пределах используемого носителя для того, что бы всегда иметь доступ к Вашим данным SettingsWidget &Display &Дисплей &Keyboard &Клавиатура Sound Звук &Clipboard Mode &Буфер Обмена Bidirectional copy and paste Двусторонний буфер обмена Copy and paste from client to server Копирование и вставка с сервера на клиент Copy and paste from server to client Копирование и вставка с клиента на сервер Disable clipboard completely Деактивировать буфер обмена Auto detect keyboard settings Автоматическая настройка клавиатуры Do not configure keyboard Не настраивать клавиатуру Configure keyboard Настроить клавиатуру Model: Модель: Layout: Раскладка: Variant: Вариант: RDP Client Клиент RDP &Clipboard mode Fullscreen Полноэкранный режим Custom Другой Window Окно Use whole display Использовать весь дисплей Maximum available Максимально доступное Set display DPI Установить DPI Xinerama extension (support for two or more physical displays) Xinerama (поддержка двух и более физических дисплеев) Width: Ширина: Height: Высота: &Display: &Дисплей: &Identify all displays &Идентифицировать дисплеи Auto-detect keyboard settings RDP client FreeRDP/X11 (pre-2.x style options) FreeRDP/X11 (2.x style options) Keep current keyboard Settings Использовать текущие установки Keyboard layout: Раскладка Клавиатуры: Keyboard model: Модель клавиатуры: Enable sound support Активировать звук Start sound daemon Запускать звуковой сервер Use running sound daemon Использовать запущенный звуковой сервер Use SSH port forwarding to tunnel sound system connections through firewalls Использовать SSH туннель для звуковой системы Use default sound port Использовать порт по умолчанию Sound port: Порт: Client side printing support Печать на стороне клиента Additional parameters: Дополнительные параметры: Command line: Командная строка: XDMCP client us ru pc105/us pc105/ru password пароль ShareWidget &Folders &Каталоги Path Расположение Automount Соединять автоматически Add Добавить Delete Удалить Path: Расположение: Use ssh port forwarding to tunnel file system connections through firewalls Использовать SSH туннель для экспорта файловой системы Select folder Выбор каталога Filename encoding Кодировка имен файлов Use SSH port forwarding to tunnel file system connections through firewalls X2Go Client is running in portable mode. You should use a path on your USB device to be able to access your data wherever you are. WINDOWS-1252 WINDOWS-1251 ISO8859-1 KOI8-R local: локальная: remote: удалённая: Error Ошибка x2goclient is running in portable mode. You should use a path on your usb device to be able to access your data whereever you are x2goclient запущен в "переносимом" режиме. Пожалуйста выберите путь находящийся в пределах используемого носителя для того, что бы всегда иметь доступ к Вашим данным SshMasterConnection SSH proxy connection error Ошибка соединения с SSH прокси сервером SSH proxy connection error. SSH proxy connection error: Ошибка соединения с SSH прокси сервером: Failed to create SSH proxy tunnel. Cannot create SSH session. Using environment-provided username. Cannot connect to proxy server. Authentication failed. Failed to start SSH client. Please check your installation and GSSApi configuration. Check your GSSApi configuration or choose another authentication method. Reconnect session Cannot open file Cannot create remote file Cannot write to remote file %1 failed. Argument in this context will be a function name. Error writing to socket. Error reading channel. Error reading from TCP socket. Failed to create SSH proxy tunnel Ошибка создания SSH прокси тунеля Can not connect to proxy server Невозможно присоединиться к прокси серверу Failed to start SSH Client. Please check your installation and GSSApi configuration Невозможно запустить клиент SSH. Проверте настройки GSSAPI Check your GSSApi configuration or choose another authentication method Проверте настройки GSSAPI или выберите другой метод авторизации Cannot connect to SshProcess Error creating socket. Error binding XSettingsWidget Open File Открыть Файл Executable (*.exe) Исполняемый файл (*.exe) XSettingsWidgetUI Form Форма You must restart the X2Go Client for the changes to take effect Перезапустите программу, что бы изменения вступили в силу use integrated X-Server использовать встроенный X-Server do not use primary clipboard Не использовать первичный буффер обмена use custom X-Server использовать другой X-Server custom X-Server Другой X-Сервер executable: Исполняемый файл: start X-Server on X2Go Client start запускать X-Server при запуске X2Go Client command line options: аргументы командной строки: X-Server command line options Опции командной строки X-Server window mode: оконный режим: fullscreen mode: полноэкранный режим: single application: приложение: whole display: sshProcess Unable to create: Невозможно создать: Yes Да No Нет Unable to write: Невозможно записать: Error Ошибка Cannot create temporary file Невозможно создать временный файл x2goclient-4.1.2.3/res/i18n/x2goclient_sv.ts0000644000000000000000000071710314447111613015344 0ustar AppDialog Published Applications Publicerade applikationer Search: Sök: &Start &Starta &Close S&täng Multimedia Ljud och video Development Programmering Education Utbildning Game Spel Graphics Grafik Network Nätverk Office Kontor Settings Inställningar System System Utility Verktyg Other Övrigt BrokerPassDialogUi Dialog Dialog Old password: Gammalt lösenord: New password: Nytt lösenord: Confirm password: Bekräfta lösenord: TextLabel TextLabel BrokerPassDlg Passwords do not match Lösenorden matchar inte CUPSPrintWidget Form Formulär Name: Namn: Properties Inställningar State: Status: Accepting jobs: Mottar jobb: Type: Typ: Location: Placering: Comment: Kommentar: Idle Vilande Printing Skriver ut Stopped Stoppad Yes Ja No Nej CUPSPrinterSettingsDialog No option selected Inget valt This value is in conflict with another option. Detta värde är i konflikt med en annan option. Options conflict. Optionskonflikt. This value is in conflict with other option Detta värde är i konflikt med ett annat värde Options conflict Värdekonflikt ConTest Connectivity test Anslutningstest HTTPS connection: HTTPS-anslutning: SSH connection: SSH-anslutning: Connection speed: Anslutningshastighet: Failed Misslyckades 0 Kb/s 0 kB/s OK OK Socket operation timed out. Socketoperation överskred tidsgräns. Socket operation timed out Couldn't find a good translation for socket Socketoperation överskred tidsgräns Failed: Misslyckades: ConfigDialog General Allmänna Display icon in system tray Visa ikon i systemfältet Hide to system tray when minimized Dölj i systemfältet när minimerad Hide to system tray when closed Dölj i systemfältet när stängd Hide to system tray after connection is established Dölj i systemfältet när anslutning har upprättats Restore from system tray after session is disconnected Återställ från systemfältet när session kopplats från Use LDAP Använd LDAP Server URL: Server URL: BaseDN: Bas DN: Failover server 1 URL: Redundant server 1 URL: Failover server 2 URL: Redundant server 2 URL: X.Org Server settings X.Org serverinställningar PulseAudio settings PulseAudio inställningar Disable PulseAudio Deaktivera PulseAudio Disable sound input Deaktivera ljudinmatning Clientside (local) SSH daemon port for file system export usage: SSH-port på klienten för export av filsystem: Pulseaudio settings Pulseaudio inställningar Disable audio input Deaktivera ljudingång <font size="5">You must restart the X2Go Client for the changes to take effect</font><br><br> <font size="5">Du måste starta om X2Go-klienten för att ändringar ska aktiveras</font><br><br> Your XQuartz version is too old. Din XQuartz-version är för gammal. Your are using XQuartz (X Window System Server for OS X) version %1. Du använder XQuartz (X Window System Server for OS X) version %1. This version causes problems with X applications in 24bit color mode. You should update your X11 environment. MacPorts users please follow the steps outlined on: <center><a href="https://guide.macports.org/chunked/using.common-tasks.html">https://guide.macports.org/chunked/using.common-tasks.html</a></center> Users who have installed XQuartz via the installer package can find updated versions on: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> . Denna version orsakar problem med X-applikationer i 24-bitars färg. Du bör uppdatera din X11-miljö. MacPorts-användare, följ denna instruktion: <center><a href="https://guide.macports.org/chunked/using.common-tasks.html">https://guide.macports.org/chunked/using.common-tasks.html</a></center> Användare som har installera XQuartz via installationspaketet kan hitta uppdaterade versioner här: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> No valid XQuartz application selected. Ingen giltig XQuartz-applikation vald. You did not select a valid XQuartz application. Please try again. Some standard installation locations may be: <center><b>/Applications/Utilities/X11.app</b></center> <center><b>/Applications/Utilities/XQuartz.app</b></center> <center><b>/Applications/MacPorts/X11.app</b></center> Du valde inte en giltig XQuartz-applikation. Var vänlig försök igen. Några vanliga installationssökvägar är: <center><b>/Applications/Utilities/X11.app</b></center> <center><b>/Applications/Utilities/XQuartz.app</b></center> <center><b>/Applications/MacPorts/X11.app</b></center> X-Server settings X-server inställningar X11 application: X11-applikation: X11 version: X11-version: Find X11 application Hitta X11-applikation Clientside SSH port for file system export usage: SSH-port på klienten för export av filsystem: Start session embedded inside website Starta session inuti webbplats Advanced options Avancerade alternativ Defaults Standardinställningar &OK &OK &Cancel &Avbryt Settings Inställningar Printing Utskrifter Warning Varning x2goclient could not find any suitable X11 Application. Please install Apple X11 or select the path to the application x2goclient kunde inte hitta någon X11-applikation. Installera Apple X11 eller ange sökväg till applikationen Your are using X11 (Apple X-Window Server) version Du använder X11 (Apple X-Windows Server) version . This version causes problems with X-application in 24bit color mode. You should update your X11 environment (http://trac.macosforge.org/projects/xquartz). Denna version orsakar problem med X11-applikation i 24-bitars färgdjup. Du bör uppdatera din X11-miljö (http://trac.macosforge.org/projects/xquartz). No suitable X11 application found in selected path Ingen X11-applikation hittades i angiven sökväg &Connection &Anslutning &Input/Output &In-/Utdata &Media &Multimedia &Settings &Inställningar ConnectionWidget &Connection speed &Anslutningshastighet Connection speed: Anslutningshastighet: C&ompression K&omprimering Method: Metod: Compression method: Komprimeringsmetod: Image quality: Bildkvalitet: CupsPrinterSettingsDialog Dialog Dialog General Allmänt Page size: Sidstorlek: Paper type: Papperstyp: Paper source: Papperskälla: Duplex Printing Dubbelsidig utskrift None Ingen Long side Långsida Short side Kortsida Driver settings Drivrutinsinställningar Option Alternativ Value Värde No option selected Inget alternativ valt text text EditConnectionDialog &Session &Session &Connection &Anslutning &Input/Output &In-/Utdata &Media &Multimedia &Shared folders &Delade mappar &OK &OK &Cancel A&vbryt Defaults Standardinställningar Session preferences - Sessionsinställningar - ExportDialog &Cancel &Avbryt &share &Dela &Preferences ... &Inställningar... &Custom folder ... &Anpassad mapp... Delete Delete Radera Share Folders Dela mappar share folders Dela mappar Select folder Välj mapp FolderButton Sessions folder Sessionsmapp FolderExplorer Folders Mappar Create New Folder Skapa ny mapp Rename Folder... Döp om mapp... Change Icon... Ändra ikon... Delete Folder... Ta bort mapp... Rename Folder ... Döp om mapp... Change Icon ... Ändra ikon... Delete Folder ... Ta bort mapp... Open picture Öppna bild Pictures Bilder X2Go Client X2Go-klient Folder Name: Mappnamn: Error Fel Unable to remove " Kunde ej ta bort " ". Folder is not empty. Please remove the contents of this directory and try again. ". Mappen är inte tom. Var vänlig töm mappen och försök igen. ". Folder is not empty. Please remove content of folder and try again. ". Mappen är inte tom. Var vänlig töm mappen och försök igen. Delete folder " Ta bort mapp " New Folder Ny mapp Help Shows this message. Visar detta meddelande. Prints version information. Visar versionsinformation. Shows the changelog. Visar ändringsloggen. Shows git information as used at compile time. [Deprecated: please use --version.] Visar git-information som användes vid kompilering. [Inaktuell: var vänlig använd --version.] Shows available pack methods. Visar tillgängliga packningsmetoder. Do not resume sessions automatically. Återuppta inte sessioner automatiskt. Hides menu bar. Döljer menyraden. Disables session editing. Inaktivera sessionsredigering. Starts maximized. Startar maximerad. Starts hidden (minimized to system tray where available.) Startar dold (minimerad till systemfältet om det finns.) Starts in "portable" mode. Startar i portabelt läge. Forces OpenPGP smart card authentication. Tvingar OpenPGP smartkortsautenticering. Disable PulseAudio. Deaktivera PulseAudio. Disable sound input. Deaktivera ljudinmatning. Enables Xinerama by default. Aktivera Xinerama som standard. Allows client side printing in LDAP mode. Tillåt klientutskrifter i LDAP-läge. Enables thinclient mode. Starts without a window manager. Aktiverar tunn klient-läge. Startar utan fönsterhanterare. Enables shutdown button. Aktivera "Avsluta"-knapp. Adds RSA key fingerprint to ".ssh/known_hosts" if authenticity of the server can't be determined. Sparar fingeravtryck för RSA-nyckel i ".ssh/knows_hosts" om serverns identitet inte kan fastställas. Starts with LDAP support. Example: --ldap=ldapserver:389:o=organization,c=de Startar med LDAP-support. Exempel: --ldap=ldapserver:389:o=organization,c=se Defines the first LDAP failover server. Anger första LDAP failoverserver. Defines the second LDAP failover server. Anger andra LDAP failoverserver. Defines the remote SSH server port. Default: 22. Anger fjärrserverns SSH-port. Standardinställning: 22. Defines the local machine's SSH server port. Needed for Client-Side Printing and File Sharing support. Default: 22. Anger lokal SSH serverport. Behövs för klientutskrifter och fildelning. Standardinställning: 22. Sets the default command. Default: 'KDE' (Desktop Session) Sätter standardkommando. Standardinställning: 'KDE' (skrivbordsession) Starts the session named "session". Startar sessionen med namnet "session". Sets the user name for connecting to the remote SSH server to "username". Sätter användarnamnet för anslutning till fjärrserver via SSH till "username". Sets the default window geometry. Default: 800x600. Sätter standardinställning för fönstergeometri. Standardinställning: 800x600. Sets the remote X2Go Agent's DPI value to "dpi". Default: same as local display. Sätter DPI-värde för X2Go's fjärragent till "dpi". Standardinställning: samma som lokal bildskärm. Sets the default link type. Default: "adsl". Sätter standardlänk. Standardinställning: "adsl". Sets default pack method. Default: "16m-jpeg-9". Sätter standardmetod för packning. Standardinställning: "16m-jpeg-9". Sets the default clipboard mode. Default: "both". Sätter standardinställning för urklipp. Standardinställning: "both". Sets the default keyboard layout to "layout". "layout" may be a comma-separated list. Sätter standardinställning för tangentbordslayout till "layout". "layout" kan vara en kommaseparerad lista. Sets the default keyboard type. Sätter standardinställning för tangentbord. Sets the user's home directory. Sätter användarens hemkatalog. Enables or disables overwriting the current keyboard settings. Aktiverar eller deaktiverar ersättning av aktuella tangentbordsintällningar. Automatically launches the application(s) "app", "app2", ... on session start in Published Applications mode. Automatisk start av applikation(er) "app", "app2", ... vid sessionsstart som Publicerade applikationer. Defines an alternative session config file path. Anger en alternativ sessionsinställningsfil. Force-enables session system tray icon. Tvingande aktivering av sessionsikon i systemfältet. Automatically closes X2Go Client after a disconnect. Automatisk nerstängning av X2Go-klienten efter frånkoppling. Hides all Folder-Sharing-related options. Döljer alla mappdelningsalternativ. Sets the broker name to display in X2Go Client. This parameter is optional. Sätter brokernamn att visa i X2Go-klienten. Denna parameter är valfri. Sets the path to an SSH key to use for authentication against an SSH session broker. The client's behavior is undefined if this flag is used for non-SSH session brokers. Sätter sökväg till SSH-nyckel för autentisering mot SSH-broker. Klientens beteende är odefinierat om denna flagga används för icke-SSH-broker. Enables the use of the default SSH key or SSH agent for authentication against an SSH session broker. The client's behavior is undefined if this flag is used for non-SSH session brokers. Aktiverar användning av standard SSH-nyckel eller SSH-agent för autentisering mot SSH-broker. Klientens beteende är odefinierat om denna flagga används för icke-SSH-broker. Does not ask for user credentials during session broker authentication. This can be useful if you are using an HTTP(S) session broker without authentication. If you run an HTTP(S) server without authentication, but with user-specific profiles, then put the user name into the broker URL (refer to --broker-url.) The user name then will be extracted from the broker URL and be sent to the session broker. The client's behavior is undefined if this flag is used for non-HTTP(S) session brokers. Frågar inte efter användaruppgifter vid autentisering mot sessions-broker. Detta kan vara användningsbart om du använder en HTTP(S) sessions-broker utan autentisering. Om du använder en HTTP(S)-server utan autentisering men med användarspecifika profiler, ange då användarnamnet i broker-URL (se --broker-url). Användarnamnet komemr då att extraheras från URL:en och skickas till brokern. Klientens beteende är odefinierat om denna flagga används för icke-HTTP(s)-sessionsbroker. Use broker credentials as session user/password credentials when using broker mode with broker authentication. Currently only affects direct RDP sessions. Använd agentautentiseringsuppgifter som användarnamn / lösenordsuppgifter när du använder agentläge med agentautentisering. För närvarande påverkar det bara direkta RDP-sessioner. Enables broker logout button. Use a custom/branded background image (SVG format) for X2Go Client's main window. If a directory is given, will randomly pick an SVG file inside of it. Använd anpassad bakgrundsbild (SVG-format) för X2Go Clients huvudfönster. Om en mapp anges så väljs en SVG-fil slumpvis från mappen. Use a custom icon (SVG format) for additional branding to replace the default in the lower left corner of X2Go Client's main window. Använd en anpassad ikon (SVG-format) som ersättning för standardikonen i nedre vänstra hörnet av X2Go Clients huvudfönster. Disables X2Go Client's UNIX cleanup helper. This will prevent X2Go Client from terminating spawned processes after the main program terminates or crashes. Use with care and when in doubt, do not use this parameter at all. HelpDialog Options Alternativ HttpBrokerClient us Swedish keyboard layout se pc105/us Swedish keyboard model pc105/se Error Fel Login failed!<br>Please try again Inloggning misslyckades!<br>Var god försök igen Your session was disconnected. To get access to your running session, please return to the login page or use the "reload" function of your browser. Din session har kopplats från. För att återansluta sessionen, återgå till inloggningssidan eller ladda om sidan i webbläsaren. Host key for server changed. It is now: Nyckel för server har ändrats. Den är nu: For security reasons, connection will be stopped Anslutningen avbryts av säkerhetsskäl The host key for this server was not found but an othertype of key exists.An attacker might change the default server key toconfuse your client into thinking the key does not exist Servern svarade inte med förväntad nyckeltyp. Det kan innebära att servern är komprometterad Could not find known host file.If you accept the host key here, the file will be automatically created Hittar ej fil för kända servrar. Om du accepterar serverns nyckel så kommer filen att skapas automatiskt The server is unknown. Do you trust the host key? Public key hash: Okänd server. Litar du på denna nyckel? Publik nyckel: Host key verification failed Verifiering av serverns nyckel misslyckades Yes Ja No Nej Verification code: Verifieringskod: Enter passphrase to decrypt a key Ange lösenord för att dekryptera nyckel Authentication failed Autentisering misslyckades <br><b>Server uses an invalid security certificate.</b><br><br> <br><b>Servern använder ett ogiltigt certifikat.</b><br><br> <p style='background:#FFFFDC;'>You should not add an exception if you are using an internet connection that you do not trust completely or if you are not used to seeing a warning for this server.</p> <p style='background:#FFFFDC;'>Du bör ej lägga till ett undantag om du inte använder en betrodd uppkoppling eller om du inte brukar få en varning för denna server.</p> Secure connection failed Säker anslutning misslyckades For security reasons, the connection attempt will be aborted. Anslutningen avbryts av säkerhetsskäl. The host key for this server was not found but another type of key exists. An attacker might have changed the default server key to trick your client into thinking the key does not exist yet. Servernyckeln för denna server hittades inte men en annan typ av nyckel finns. En angripare kan ha ändrat servernyckel för att lura klienten att nyckeln inte ännu finns. Could not find known hosts file. If you accept the host key here, the file will be automatically created. Hittar ej fil för kända servrar. Om du accepterar serverns nyckel så kommer filen att skapas automatiskt. Host key verification failed. Verifiering av serverns nyckel misslyckades. Enter user account password: Authentication failed. Autentisering misslyckades. Login failed!<br>Please try again. Inloggning misslyckades!<br>Var god försök igen. Secure connection failed. Säker anslutning misslyckades. Issued to: Utgivet till: Common Name(CN) Common Name(CN) Organization(O) Organization(O) Organizational Unit(OU) Organizational Unit(OU) Serial Number Serienummer Issued by: Utgivare: Validity: Giltighetstid: Issued on Utgivningsdatum expires on giltigt till Fingerprints: Fingeravtryck: SHA1 SHA1 MD5 MD5 Exit X2Go Client Avsluta X2Go-klienten Add exception Lägg till undantag InteractionDialog Terminal output: Terminalutdata: Cancel Avbryt Reconnect Återanslut MediaWidget Sound Ljud Enable sound support Aktivera ljudstöd Start sound daemon Starta ljudserver Use running sound daemon Använd aktiv ljudserver Use SSH port forwarding to tunnel sound system connections through firewalls Använd SSH port forwarding för att tunnla ljudström genom brandväggar Use default sound port Använd standardport för ljud Sound port: Ljudport: Client side printing support Stöd för utskrifter via klienten Deprecation Warning Utfasningsvarning ARTS support is scheduled to be removed soon. Please upgrade to PulseAudio. Stöd för ARTS kommer snart att upphöra. Var vänlig uppgradera till PulseAudio. ESounD support is scheduled to be removed soon. Please upgrade to PulseAudio. Stöd för ESounD kommer snart att upphöra. Var vänlig uppgradera till PulseAudio. ONMainWindow Starting x2goclient... Startar x2goclient... us se pc105/us pc105/se X2Go Client X2Go-klient connecting ansluter Internet browser Webbläsare Email client E-postklient OpenOffice.org OpenOffice.org Terminal Terminal Starting x2goclient in portable mode... data directory is: Startar x2goclient i portabelt läge ... datakatalog är: &Settings ... &Inställningar... Support ... Hjälp ... About X2GO client Om X2Go-klient Started x2goclient. Startade x2goclient. Can't load translator: Kan inte ladda översättare: Translator: Översättare: installed. installerad. Share folder... Dela mapp ... Suspend Vila Terminate Avsluta Reconnect Återanslut Detach X2Go window Koppla lös X2Go-fönster Minimize toolbar Minimera verktygsrad Session: Session: &Quit &Avsluta Ctrl+Q Ctrl+Q Quit Avsluta &New session ... &Ny session... Ctrl+N Ctrl+N Session management... Added Alt shortcut, same letter as Ctrl shortcut (like &New session...) S&essionshantering... Ctrl+E Ctrl+E &Create session icon on desktop... S&kapa sessionsgenväg på Skrivbordet... &Set broker password... &Ange agentlösenord... &Connectivity test... &Testa anslutning... Show toolbar Visa verktygsrad About Qt Om Qt Ctrl+Q exit Ctrl+Q Starting X2Go Client %1... Startar X2Go-klient %1... Starting X2Go Client in portable mode. Data directory is: Startar X2Go-klient i portabelt läge. Datakatalog är: About X2Go Client Om X2Go-klient Started X2Go Client. Startade X2Go-klient. found. hittad. English language requested, not loading translator. Engelska begärt, laddar inte översättare. Non-fatal: can't load translator: Icke-kritiskt: kan inte ladda översättare: Trying to load language with lower preference, if existent. Försöker ladda språk med lägre preferens, om det finns. Session management ... Sessionshantering... &Create session icon on desktop ... S&kapa sessionsgenväg på Skrivbordet... &Set broker password ... &Ange agentlösenord... &Connectivity test ... &Testa anslutning... &Session &Session &Options &Alternativ &Help &Hjälp Login: Användare: Error Fel Operation failed Operation misslyckades Password changed Lösenord ändrat Wrong password! Fel lösenord! Connecting to broker Ansluter till agent <b>Authentication</b> <b>Autentisering</b> Restore Återställ Not connected Ej ansluten Multimedia Ljud och video Development Programmering Education Utbildning Game Spel Graphics Grafik Network Nätverk Office Kontor Settings Inställningar System System Utility Verktyg Other Övrigt Share folder ... Dela mapp ... A click displays the context menu. A left click hides or restores the window. A right click displays the context menu. Vänster musknapp för att dölja/återställa. Höger musknapp för att visa snabbmeny. Closing X2Go Client ... Stänger X2Go-klient... Finished X2Go Client closing hooks. Slutförde X2Go-klientens avslutshookar. Broker authentication failed! Autentisering till agent misslyckades! no X2Go Server found in LDAP ingen X2Go-server hittades i LDAP Connection error: Anslutningsfel: Couldn't find an SSH connection. Kunde inte hitta en SSH-anslutning. Enter user account password: This can be an indication of a man-in-the-middle attack. Somebody might be eavesdropping on you. For security reasons, it is recommended to stop the connection attempt. Do you want to terminate the connection? Detta kan vara en indikation på en "man in the middle"-attack. Någon kan avlyssna kommunikationen. Av säkerhetsskäl är det rekommenderat att du avslutar anslutningen. Vill du avsluta anslutningen? Host key verification failed. Verifiering av serverns nyckel misslyckades. The host key for this server was not found but another type of key exists. An attacker might have changed the default server key to trick your client into thinking the key does not exist yet. For security reasons, it is recommended to stop the connection attempt. Do you want to terminate the connection? Servernyckeln hittades inte, men en annan nyckeltyp finns. En attackerare kan ändra typen på servernyckeln för att lura din klient att tro att nyckeln inte ännu finns. Av säkerhetsskäl är det rekommenderat att du avslutar anslutningen. Vill du avsluta anslutningen? Could not find known hosts file. If you accept the host key here, the file will be automatically created. Hittar ej fil för kända servrar. Om du accepterar serverns nyckel så kommer filen att skapas automatiskt. Authentication failed. Autentisering misslyckades. XDM XDM RDP RDP <b>Connection failed.</b> <b>Anslutning misslyckades.</b> No server available. Ingen server tillgänglig. Server not available. Server ej tillgänglig. X2GoKDrive session No accessible desktop found. Inget tillgängligt Skrivbord hittades. Your current color depth is different from the session's color depth. This may cause problems reconnecting to this session and in most cases <b>you will loose the session</b> and have to start a new one! It's highly recommended to change the color depth of your display to Ditt nuvarande färgdjup matchar inte X2Go-sessionens färgdjup. Det kan orsaka problem vid återanslutning av sessionen och i de flesta fall <b>förlorar du sessionen</b> och måste starta en ny! Det är starkt rekommenderat att du ändrar färdgjup till bits and restart your X.Org Server before you reconnect to this X2Go session.<br />Do you want to resume this session anyway? bitar och startar om X.Org-servern innan du återansluter till denna X2Go-session.<br>Återanslut session ändå? Your current color depth is different from the session's color depth. This may cause problems reconnecting to this session and in most cases <b>you will lose the session</b> and have to start a new one! Ditt nuvarande färgdjup avviker från sessionens färgdjup. Det kan orsaka problem vid återanslutning till denna session och oftast <b>tappar du sessionen</b> och måste starta en ny! It's highly recommended to change the color depth of your display to %n bit(s) and restart your X.Org Server before you reconnect to this X2Go session. %n will be replaced with a number Det är starkt rekommenderat att ändra färgdjup till %n bit och starta om din X.Org Server innan du återansluter till denna X2Go-session. Det är starkt rekommenderat att ändra färgdjup till %n bitar och starta om din X.Org Server innan du återansluter till denna X2Go-session. <br />Do you want to resume this session anyway? <br />Vill du återansluta ändå? PulseAudio is not running PulseAudio är inte aktivt Sound output will be disabled for this session. Please enable PulseAudio in the configuration dialog or disable sound in the session settings Ljudutmatning deaktiveras för denna session. Var vänlig aktivera PulseAudio i konfigurationen eller deaktivera ljud i sessionsinställningarna Failed to start RDP or XDMCP client Start av RDP- eller XDMCP-klient misslyckades Check session settings and ensure that selected client is installed on your system. Kontrollera sessionsinställningar och verifiera att den valda klienten är installerad i ditt system. Proxy didn't terminate after 3 seconds. Killing the proxy. Proxy avslutade inte efter 3 sekunder. Dödar proxy. Closing X2Go Client because it was started in hidden mode. Avslutar X2Go-klienten eftersom den startades i dolt läge. Closing X2Go Client because the --close-disconnect parameter was passed. Avslutar X2Go-klienten eftersom --close-disconnect angavs som inparameter. Are you sure you want to terminate this session? Unsaved documents will be lost. Är du säker på att du vill avsluta sessionen? Data som ej sparats kommer att förloras. <b>Connection failed.</b> : <b>Anslutning misslyckades.</b> : (file does not exist) (filen finns inte) (directory does not exist) (mapp finns inte) Invalid value for parameter "--link". Fel värde för "--link". Invalid value for parameter "--clipboard". Fel värde för argument "--clipboard". Invalid value for parameter "--sound". Fel värde för "--sound". Invalid value for parameter "--geometry". Fel värde för "--geometry". Invalid value for parameter "--set-kbd". Fel värde för "--set-kbd". Invalid value for parameter "--ldap". Fel värde för "--ldap". Invalid value for parameter "--ldap1". Fel värde för "--ldap1". Invalid value for parameter "--ldap2". Fel värde för "--ldap2". Invalid value for parameter "--pack". Fel värde för "--pack". Available pack methods: Tillgängliga kompressionsmetoder: Pack Methods Kompressionsmetoder Option is not available in this build. Alternativet är inte tillgängligt i denna version. Unable to create directory: Kunde ej skapa katalog: <br>(C) 2005-2023 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> Translators, feel free to add a localized version of your translation including a copyright notice and your name(s). Remember to keep a <br> at the end, though. English example for a potential translation: <br>(C) 2005-2023 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br>English version: (C) 20AB-20CD Trans Lator <trans@la.tor><br> <br>(C) 2005-2023 av <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> Check whether the package providing "pcsc_scan" is installed. The current search path is: Unable to create or append to file: Kunde ej skapa eller lägga till fil: Unable to change the permissions of file: Kunde ej ändra rättigheter på fil: This is an error because sshd would deny such a file. Detta är ett fel eftersom sshd skulle neka en sådan fil. Unable to change the permissions of directory: Kunde ej ändra rättigheter på katalog: This is an error because sshd would deny such a directory. Detta är ett fel eftersom sshd skulle neka en sådan katalog. Can't start X.Org Server. Please check your installation. X.Org Server did not launch correctly after %n tries. %n will be substituted with the current number of tries Unable to find the sftp-server binary. Neither bundled, nor found in $PATH nor additional directories. Kunde ej hitta binär för sftp-server. Varken som medskickad eller i $PATH eller i ytterligare sökvägar. If you are using a Linux-based operating system, please ask your system administrator to install the package containing the sftp-server binary. Common names are <b>openssh</b>, <b>openssh-server</b> or <b>openssh-sftp-server</b> depending upon distribution. If the sftp-server binary is installed on your system, please report a bug mentioning its path on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Om du använder ett Linuxbaserat operativsystem, var vänlig kontakta din systemadministratör och begär att paket för sftp-server installeras. Vanliga paketnamn är <b>openssh</b>,<b>openssh-server</b> eller <b>openssh-sftp-server</b>, beroende på distribution. Om sftp-server finns installerat på ditt system, var vänlig rapportera felet (med sökväg till sftp-server) på: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> SSH key type selection error Ett fel uppstod vid val av nyckeltyp för SSH Unknown SSH key selected. Okänd SSH-nyckel vald. Terminating application. Avslutar applikation. SSH key base directory creation error Ett fel uppstod vid skapande av katalog för SSH-nyckel Unable to create SSH key base directory '%1'. Kunde ej skapa katalog '%1' för SSH-nyckel. ssh-keygen launching error Ett fel uppstod när ssh-keygen skulle startas Unable to start the ssh-keygen binary. Kunde ej starta ssh-keygen. ssh-keygen crashed ssh-keygen kraschade The ssh-keygen binary crashed. ssh-keygen kraschade. ssh-keygen program error ssh-keygen avslutades med felkod The ssh-keygen binary did not exit cleanly. ssh-keygen avslutades inte korrekt. It was probably called with unknown arguments. Det var sannolikt anropat med okända inparametrar. Unable to open newly generated %1 public host key file. Kunde ej öppna nyligen genererad %1 publik nyckelfil. %1 public host key file empty. %1 publik nyckelfil tom. Cannot open key: Kan inte öppna nyckel: You have enabled Remote Printing or File Sharing. These features require a running and functioning SSH server on your computer. <b>Printing and File Sharing will be disabled for this session.</b> Du har aktiverat fjärrutskrift eller mappdelning. Dessa funktioner kräver en aktiv och fungerande SSH-server på din dator. <b>Fjärrutskrift och mappdelning kommer att deaktiveras i denna session.</b> Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server. If you see this message, please report a bug on: Detta ska normalt inte hända eftersom X2Go-klient för Windows levereras med en egen SSH-server. Om du ser detta meddelande, var vänlig rapportera en bug på: The SSH server failed to start. Please report a bug on: SSH-servern startade inte. Var vänlig rapportera en bug på: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server and automatically generates the required keys. If you see this message, please report a bug on: Detta ska normalt inte hända eftersom X2Go-klient för Windows levereras med en egen SSH-server och automatiskt genererar de nödvändiga nycklarna. Om du ser detta meddelande, var vänlig rapportera en bug på: X2Go Client was unable to create SSH host keys. Please report a bug on: X2Go-klienten kunde ej skapa SSH-nycklar. Var vänlig rapportera en bug på: libssh initialization failure initaliseringsfel i libssh Unable to initialize libssh. Kan ej initialisera libssh. <br>(C) 2005-2016 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> <br>(C) 2005-2016 av <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> <br>X2Go Plugin mode was sponsored by <a href="http://www.foss-group.de/">FOSS-Group GmbH (Freiburg)</a><br> <br>X2Go Plugin sponsrades av <a href="http://www.foss-group.de/">FOSS-Group GmbH (Freiburg)</a><br> <br>This is a client to access the X2Go network-based computing environment. This client will be able to connect to X2Go Server(s) and start, stop, resume and terminate (running) desktop sessions. X2Go Client stores different server connections and may automatically request authentication data from LDAP directories. Furthermore, it can be used as a fullscreen login screen (replacement for login managers like XDM). Please visit <a href="http://www.x2go.org">the project home page at x2go.org</a> for further information. <br>Klient för X2Go. Denna klient kan ansluta till X2Go-servrar och starta/stoppa/återansluta/avsluta (aktiva) sessioner. X2Go-klienten kan spara anslutningsinställningar samt använda LDAP för autentisering. Klienten kan även användas som inloggningsskärm (ersättning för exempelvis XDM). Besök <a href="http://www.x2go.org">projektets hemsida på x2go.org</a> för vidare information. <b>X2Go Client v. <b>X2Go-klient V. Please check LDAP Settings. Kontrollera LDAP-inställningar. Check whether the package providing "scdaemon" is installed. The current search path is: Kontrollera om paket för "scdaemon" är installerat. Aktuell sökväg är: didn't start yet. har inte startat ännu. Unable to read from scdaemon. Kunde ej läsa från scdaemon. No valid card found. Inget giltigt kort hittades. This card is unknown to the X2Go system. Detta kort är okänt för X2Go-systemet. Can't start X.Org Server. Please check your installation. Kan ej starta X.Org-server. Kontrollera installation. Remote server does not support file system exports through SSH tunnels. Please update your x2goserver package. Servern stöder ej filsystemsexport via SSH-tunnel. Uppdatera till en nyare version av x2goserver. Unable to create SSH tunnel for Folder Sharing and Printing support: Kunde inte skapa SSH-tunnel för mappdelning och skrivarstöd: Unable to read: Kunde ej läsa: Unable to write: Kunde ej skriva: Error getting window geometry. (Did you close the window?) Ett fel uppstod när fönstergeometri hämtades (fönster stängt?) Invalid value for argument "speed" Fel värde för "speed" Applications ... Applikationer... SSH daemon could not be started. Kunde ej starta SSH-demon. SSH daemon is not running. SSH-demon ej aktiv. You have enabled Remote Printing or File Sharing. These features require a running and functioning SSH server on your computer. <b>Printing and File Sharing will be disabled for this session.</b> Please also check the <b>Clientside SSH port</b> in the general settings. Du har aktiverat fjärrutskrift eller mappdelning. Dessa funktioner krävera en aktiv och fungerande SSH-server på din dator. <b>Fjärrutskrift och mappdelning kommer att deaktiveras i denna session.</b> Var vänlig kontrollera <b>SSH port</b> i inställningarna. Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server. If you see this message, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Detta ska normalt sett inte hända eftersom X2Go klient för Windows har en intern SSH-server. Om du ser detta meddelande, rapportera en bugg på: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> The SSH server failed to start. SSH-servern startade inte. X2Go Client did not detect a globally running SSH server on your machine and was unable to start its own. Please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> X2Go-klienten hittade ingen SSH server på din dator och kunde inte starta en egen. Var vänlig rapportera en bugg på: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> The SSH server is currently not started. SSH-servern är inte igång. On OS X, please follow the following steps to enable SSH service:<ul><li>Open <b>System Preferences</b> (Applications -> System Preferences)</li><li>Go to <b>Sharing</b></li><li>Tick the checkbox besides <b>Remote Login</b></li><li>Check that <b>Allow access for:</b> is set to either:<ul><li>All users: <b>no further steps necessary</b></li><li>Only these users <b>and your user name is included in the list</b></li></ul><li>Optionally, add your user name to the allowed list via the <b>Plus Button</b></li></ul><b>Warning: enabling SSH access will allow any user on the network to connect to your machine. It is your responsibility to set a strong password for every user that is allowed to log in via SSH.</b> Har ingen OS X-maskin att kontrollera svenska termer mot. På OS X, var vänlig följ dessa steg för att aktivera SSH-service:<ul><li>Open <b>System Preferences</b> (Applications -> System Preferences)</li><li>Go to <b>Sharing</b></li><li>Tick the checkbox besides <b>Remote Login</b></li><li>Check that <b>Allow access for:</b> is set to either:<ul><li>All users: <b>no further steps necessary</b></li><li>Only these users <b>and your user name is included in the list</b></li></ul><li>Optionally, add your user name to the allowed list via the <b>Plus Button</b></li></ul><b>Warning: enabling SSH access will allow any user on the network to connect to your machine. It is your responsibility to set a strong password for every user that is allowed to log in via SSH.</b> Please ask your system administrator to provide the SSH service on your computer. Var vänlig be din systemadministratör att installera en SSH-server på din dator. Disabling Remote Printing or File Sharing support in the session settings will get rid of this message. Deaktivering av fjärrutskrift eller mappdelning i sessionsinställningarna blockerar detta meddelande. SSH daemon failed to open its public host key. SSH kunde inte öppna sin publika nyckel. You have enabled Remote Printing or File Sharing. These features require a running and functioning SSH server on your computer. <b>Printing and File Sharing will be disabled for this session.</b> The SSH server is currently not configured correctly. Please ensure that the server's public exists. Du har aktiverat fjärrutskrift eller mappdelning. Dessa funktioner kräver en aktiv och fungerande SSH-server på din dator. <b>Utskrifter och mappdelning inaktiveras i denna session.</b> SSH-servern är inte korrekt konfigurerad. Var vänlig kontrollera att serverns publika nyckel finns. Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server and automatically generates the required keys. If you see this message, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Normalt sett ska detta inte hända eftersom X2Go-klient för Windows har en egen SSH-server och automatiskt genererar nödvändiga nycklar. Om du ser detta meddelande, var vänlig rapportera en bugg på: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> X2Go Client was unable to create SSH host keys. Please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> X2Go-klienten kunde inte skapa servernycklar för SSH. Var vänlig rapportera en bugg på: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> On OS X, please follow these steps to generate the required keys:<ul><li>Open a <b>Terminal Window</b> (Applications -> Utilities -> Terminal)</li><li>Run this command: <b>ssh -p På OS X, följ dessa steg för att generera nycklar:<ul><li>Open a <b>Terminal Window</b> (Applications -> Utilities -> Terminal)</li><li>Run this command: <b>ssh -p Please ask your system administrator to generate the required host keys. If you are administrating this system yourself, please run: <center><b>sudo ssh-keygen -A</b></center> Var vänlig be din systemadministratör att generera nödvändiga servernycklar. Om du är administratör, var vänlig kör: <center><b>sudo ssh-keygen -A</b></center> SSH daemon failed to open the application's authorized_keys file. SSH kunde inte öppna applikationens authorized_keys-fil. Left mouse button to hide/restore - Right mouse button to display context menu Vänster musknapp för att dölja/återställa - Höger musknapp för att visa snabbmeny Closing x2goclient... Stänger x2goclient... Closed x2goclient. Stängt x2goclient. Please check LDAP settings Kontrollera LDAP-inställningar no X2Go server found in LDAP ingen X2Go-server hittades i LDAP Create session icon on desktop Skapa sessionsgenväg på Skrivbordet Desktop icons can be configured not to show x2goclient (hidden mode). If you like to use this feature you'll need to configure login by a gpg key or gpg smart card. Use x2goclient hidden mode? Skrivbordsgenvägar kan konfigureras att inte visa X2Go-klienten (dolt läge). Om du vill aktivera den funktionen måste du använda inloggning med GPG-nyckel, GPG-smartkort eller SSH-nyckel. Använd dolt läge? Show session tray icon when running Visa ikon i systemfältet när aktiv New Session Ny session X2Go Link to session Länk till X2Go-session No X2Go sessions found, closing. Inga X2Go-sessioner hittades, stänger. wrong value for argument"--clipboard" fel värde för argument "--clipboard" SSH Error SSH-fel SSH daemon could not be started. You'll need SSH daemon for printing and file sharing. Normally, this should not happen as X2Go Client for Windows ships its internal sshd.exe. If you see this message, please report a bug against the X2Go bugtracker. SSH-kunde inte startas. Du behöver SSH för skrivar- och fildelning. Normalt sett ska detta inte ske eftersom X2Go-klienten för Windows innehåller en egen sshd.exe. Om du ser detta meddelande, rapportera en bugg i X2Go:s bugghanteringssystem. SSH daemon is not running. You'll need SSH daemon for printing and file sharing Please ask your system administrator to provide the SSH service on your computer. SSH är inte igång. Du behöver SSH för skrivar- och fildelning. Var vänlig be din systemadministratör att tillhandahålla SSH på din dator. SSH daemon failed to open the application's public host key. SSH kunde inte öppna applikationens publika servernyckel. SSH daemon failed to open the application's public key used for exporting folders and printers. SSH kunde inte öppna applikationens publika nyckel som används för export av mappar och skrivare. SSH daemon failed to open the application's authoized_keys file. SSH kunde inte öppna applikationens authorized_keys-fil. X2Go sessions not found X2Go-sessioner hittades inte Are you sure you want to delete this session? Är du säker på att du vill radera denna session? KDE KDE RDP connection RDP-anslutning XDMCP XDMCP Connection to local desktop Anslutning till lokalt Skrivbord on Starting connection to server: Startar anslutning till server: to till Connection Error( Anslutningsfel( Couldn't find a SSH connection. Kunde inte hitta en SSH-anslutning. Enter passphrase to decrypt a key Ange lösenord för att dekryptera nyckel Host key for server changed. It is now: Nyckel för server har ändrats. Den är nu: For security reasons, connection will be stopped Anslutningen avbryts av säkerhetsskäl The host key for this server was not found but an othertype of key exists.An attacker might change the default server key toconfuse your client into thinking the key does not exist Servern svarade inte med förväntad nyckeltyp. Det kan innebära att servern är komprometterad Could not find known host file.If you accept the host key here, the file will be automatically created Hittar ej fil för kända servrar. Om du accepterar serverns nyckel så kommer filen att skapas automatiskt The server is unknown. Do you trust the host key? Public key hash: Okänd server. Litar du på denna nyckel? Publik nyckel: Host key verification failed Verifiering av serverns nyckel misslyckades Verification code: Verifieringskod: This can be an indication of a man-in-the-middle attack. Somebody might be eavesdropping on you. For security reasons, it is recommended to stop the connection. Do you want to terminate the connection? Detta kan vara en indikation på en "man in the middle"-attack. Någon kan avlyssna kommunikationen. Av säkerhetsskäl är det rekommenderat att du avslutar anslutningen. Vill du avsluta anslutningen? Yes Ja No Nej If you accept the new host key the security of your connection may be compromised. Do you want to update the host key? Om du accepterar den nya servernyckeln så kan säkerheten i anslutningen vara komprometterad. Vill du uppdatera servernyckeln? The host key for this server was not found but an othertype of key exists. An attacker might change the default server key to confuse your client into thinking the key does not exist. For security reasons, it is recommended to stop the connection. Do you want to terminate the connection? Servernyckeln hittades inte, men en annan nyckeltyp finns. En attackerare kan ändra typen på servernyckeln för att lura din klient att tro att nyckeln inte finns. Av säkerhetsskäl är det rekommenderat att du avslutar anslutningen. Vill du avsluta anslutningen? Authentication failed: Autentisering misslyckades: Authentication failed Autentisering misslyckades Enter password for SSH proxy Ange lösenord för SSH-proxy <b>Connection failed</b> <b>Anslutning misslyckades</b> <b>Wrong password!</b><br><br> <b>Fel lösenord!</b><br><br> Connection failed: Anslutning misslyckades: - Wrong password. - Fel lösenord. unknown okänt No server availabel Ingen server tillgänglig Server not availabel Server ej tillgänglig Select session: Välj session: running aktiv suspended vilande Desktop Skrivbord single application Applikation shadow session Skuggsession Information Information No accessible desktop found Inget tillgängligt Skrivbord hittades Filter Filter Select desktop: Välj Skrivbord: Warning Varning Your current color depth is different to the color depth of your x2go-session. This may cause problems reconnecting to this session and in most cases <b>you will loose the session</b> and have to start a new one! It's highly recommended to change the color depth of your Display to Ditt nuvarande färgdjup matchar inte X2Go-sessionens färgdjup. Det kan orsaka problem vid återanslutning av sessionen och i de flesta fall <b>förlorar du sessionen</b> och måste starta en ny! Det är starkt rekommenderat att du ändrar färdgjup till 24 or 32 24 eller 32 bit and restart your X-server before you reconnect to this x2go-session.<br>Resume this session anyway? bitar och startar om X-servern innan du återansluter till denna X2Go-session.<br>Återanslut session ändå? suspending försätter i vila terminating avslutar <b>Wrong Password!</b><br><br> <b>Fel lösenord!</b><br><br> New session started Ny session startad Session resumed Session återupptagen Unable to create folder: Kunde ej skapa katalog: Unable to write file: Kunde ej skriva till fil: Unable to create SSH tunnel for X2Go session (NX) startup: Kunde inte skapa SSH-tunnel för X2Go-sessionsstart (NX): Unable to create SSH tunnel for audio data: Kunde ej skapa SSH-tunnel för ljuddata: failed to start. startade inte. This likely means the binary is not available. The current search path is: Det här betyder sannolikt att binären saknas. Aktuell sökväg är: returned a non-zero exit code or crashed otherwise. returnerade en felkod eller avslutades oväntat. Execution failed, exit code was: Exekvering misslyckades, felkod: didn't start up in time. startade inte i tid. This error shouldn't come up. Det här felet borde inte komma. didn't accept a write operation. accepterade inte en skrivoperation. It is probably not running correctly or crashed in-between. Det är sannolikt inte igång eller har avslutats oväntat. Unable to read from xmodmap. Kunde ej läsa från xmodmap. encountered an unknown error during start up or execution. påträffade ett okänt fel under uppstart eller exekvering. experienced an undefined error. ett odefinierat fel inträffade. X2Go Client will now terminate. File a bug report as outlined on the <a href="http://wiki.x2go.org/doku.php/wiki:bugs">bugs wiki page</a>. X2Go-klienten kommer nu att avsluta. Lämna en buggrapport enligt <a href="http://wiki.x2go.org/doku.php/wiki:bugs">bugs wiki page</a>. Emergency exit. Akut avslut. Waiting for proxy to exit. Väntar på att proxy ska avslutas. Failed, killing the proxy. Misslyckades, dödar proxy. Wrong parameter: Felaktig parameter: Help Hjälp Pack Methodes Packningsmetoder Option is not availabel in this build Alternativet är inte tillgängligt i denna version Changelog Ändringslogg Git Info Git-information Unable to create folder: Kunde inte skapa mapp: Unable to write file: Kunde ej skriva till fil: Attach X2Go window Koppla X2Go-fönster Unable to create SSL tunnel: Kunde ej skapa SSL-tunnel: Unable to create SSL Tunnel: Kunde ej skapa SSL-tunnel: Finished avslutad starting startar resuming återansluter Connection timeout, aborting Anslutning passerade tidsgränsen, avbryter aborting avbryter Are you sure you want to terminate this session? Unsaved documents will be lost Är du säker på att du vill avsluta sessionen? Data som ej sparats kommer att förloras Session Session Display Display Creation time Skapad <b>Connection failed</b> : <b>Anslutning misslyckades</b> : (can't open file) (kan inte öppna fil) (file not exists) (filen finns inte) (directory not exists) (mapp finns inte) wrong value for argument"--link" fel värde för "--link" wrong value for argument"--sound" fel värde för "--sound" wrong value for argument"--geometry" fel värde för "--geometry" wrong value for argument"--set-kbd" fel värde för "--set-kbd" wrong value for argument"--ldap" fel värde för "--ldap" wrong value for argument"--ldap1" fel värde för "--ldap1" wrong value for argument"--ldap2" fel värde för "--ldap2" wrong value for argument"--pack" fel värde för "--pack" wrong parameter: felaktig parameter: Options Alternativ Available pack methodes: Tillgängliga kompressionsmetoder: RSA file empty. RSA-fil tom. Can not open key: Kan inte öppna nyckel: Support Hjälp </b><br> (C. 2006-2012 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br> </b><br> (&copy; 2006-2012 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br> <br>x2goplugin mode was sponsored by <a href="http://www.foss-group.de/">FOSS-Group GmbH(Freiburg)</a><br> <br>x2goplugin mode was sponsored by <a href="http://www.foss-group.de/">FOSS-Group GmbH(Freiburg)</a><br> <br>Client for use with the X2Go network based computing environment. This Client will be able to connect to X2Go server(s) and start, stop, resume and terminate (running) desktop sessions. X2Go Client stores different server connections and may automatically request authentication data from LDAP directories. Furthermore it can be used as fullscreen loginscreen (replacement for loginmanager like xdm). Please visit x2go.org for further information. <br>Klient för X2Go. Denna klient kan ansluta till X2Go-servrar och starta/stoppa/återansluta/avsluta (aktiva) sessioner. X2Go-klienten kan spara anslutningsinställningar samt använda LDAP för autentisering. Klienten kan även användas som inloggningsskärm (ersättning för exempelvis xdm). Besök <a href="http://www.x2go.org">www.x2go.org</a> för vidare information. <b>X2Go Client V. <b>X2Go-klient V. Please check LDAP Settings Kontrollera LDAP-inställningar No valid card found Inget giltigt kort hittades Card not configured. Kort ej konfigurerat. This card is unknown by X2Go system Kortet är okänt Unable to create file: Kunde ej skapa filen: Can't start X server Please check your settings Kan ej starta X-server Kontrollera dina inställningar Can't connect to X-Server Kan ej ansluta till X-server Can't connect to X server Please check your settings Can't connect to X-Server Please check your settings Kan ej ansluta till X-server Kontrollera dina inställningar Can't start X Server Please check your settings Kan ej starta X-server Kontrollera dina inställningar Can't start X Server Please check your installation Kan ej starta X-server Kontrollera installation Unable to execute: Kunde ej exekvera: Remote server does not support file system export through SSH Tunnel Please update to a newer x2goserver package Servern stöder ej filsystemsexport via SSH-tunnel Uppdatera till en nyare version av x2goserver Unable to read : Kunde ej läsa : Unable to write : Kunde ej skriva till : WINDOWS-1252 WINDOWS-1252 ISO8859-1 ISO8859-1 Error getting window geometry (window closed)? Ett fel uppstod när fönstergeometri hämtades (fönster stängt)? X2Go Session X2Go-session wrong value for argument"speed" fel värde för "speed" Password: Lösenord: Keyboard layout: Swenglish, but commonly used. Tangentbordslayout: Ok OK Cancel Avbryt <b>Session ID:<br>Server:<br>Username:<br>Display:<br>Creation time:<br>Status:</b> <b>Sessions-ID:<br>Server:<br>Användare:<br>Display:<br>Skapad:<br>Status:</b> Applications... Applikationer... </b><br> (C. 2005-2016 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br> </b><br> (&copy; 2005-2016 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br> Abort Avbryt Show details Visa detaljer Resume Återanslut New Ny Full access Fullständig åtkomst View only Endast visa Status Status Command Kommando Type Typ Server Server Client IP Klient-IP Session ID Sessions-ID User Användare Only my desktops Bara mina Skrivbord sshd not started, you'll need sshd for printing and file sharing you can install sshd with <b>sudo apt-get install openssh-server</b> sshd ej startad, du behöver sshd för utskrifter och fildelning du kan installera sshd med (Debian/Ubuntu) <b>sudo apt-get install openssh-server</b> Restore toolbar Återställ verktygsrad <br><b>&nbsp;&nbsp;&nbsp;Click this button&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;to restore toolbar&nbsp;&nbsp;&nbsp;</b><br> <br><b>&nbsp;&nbsp;&nbsp;Klicka denna knapp&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;för att återställa verktygsrad&nbsp;&nbsp;&nbsp;</b><br> Invalid reply from broker Ogiltigt svar från agent PrintDialog Print - X2Go Client Utskrift - X2Go-klient Print Utskrift You've deactivated the X2Go Client printing dialog. Du har inaktiverat utskriftsdialogen i X2Go. You may reactivate this dialog using the X2Go Client settings dialog. To do so, follow this path in the menu bar: Options -> Settings Du kan återaktivera denna dialog via X2Go-klientens inställningar. För att göra det, välj Meny -> Alternativ -> Inställningar You may reactivate this dialog using the X2Go Client settings dialog. To do so, follow this path in the menu bar: Options -> Settings Please adapt this to the new message. Note that it has changed. Du kan återaktivera denna dialog via X2Go-klientens inställningar (Meny -> Alternativ -> Inställningar) You've deactivated the x2go client printing dialog. Du har inaktiverat utskriftsdialogen i X2Go. You may reactivate this dialog using the x2goclient settings dialog (Menu -> Options -> Settings) Du kan återaktivera denna dialog via X2Go-klientens inställningar (Meny -> Alternativ -> Inställningar) PrintProcess Save File Spara fil PDF Document (*.pdf) PDF-dokument (*.pdf) Failed to execute command: Kunde ej exekverka kommando: Printing error. Utskriftsfel. Printing error Utskriftsfel PrintWidget Form Formulär Print Skriv ut View as PDF Visa som PDF Print settings Utskriftsinställningar Printer: Skrivare: Print using default Windows PDF Viewer (Viewer application needs to be installed) Skriv ut via Windows standard PDF-visare (PDF-visare måste installeras) Printer command: Utskriftskommando: ... ... Viewer settings Inställningar för visning Open in viewer application Öppna i applikation Command: Kommando: Save to disk Spara till disk Show this dialog before start printing Visa denna dialog innan utskrift Please configure your client side printing settings.<br><br>If you want to print the created file, you'll need an external application. Typically you can use <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> and <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>You can find further information <a href="http://www.x2go.org/index.php?id=49">here</a>. Konfigurera utskriftsinställningar för klienten.<br><br>Om du vill skriva ut den skapade filen så behöver du en extern applikation. Du kan oftast använda <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> och <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>Mer information finns <a href="http://www.x2go.org/index.php?id=49">här</a>. Please configure your client side printing settings.<br><br>If you want to print the created file, you'll need an external application. Typically you can use <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> and <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>You can find further information <a href="http://www.x2go.org/index.php?id=49">here</a>. Konfigurera utskriftsinställningar för klienten.<br><br>Om du vill skriva ut den skapade filen så behöver du en extern applikation. Du kan oftast använda <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> och <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>Mer information finns <a href="http://www.x2go.org/index.php?id=49">här</a>. PrinterCmdDialog Printer command Utskriftskommando Command Kommando Please enter your customized or individual printing command. Examples: kprinter lpr -P hp_laserjet Ange anpassat utskriftskommando. Exempel: kprinter lpr -P hp_laserjet Output format Utskriftsformat Please choose the printing file format (regarding to your printing environment - if you use CUPS you may use PDF) Välj filformat för utskrift (om du använder CUPS så kan du använda PDF) PDF PDF PS PS Data structure Datastruktur Please choose the method of printing file input (some commands accepting printing files as program options, some are awaiting data on standard input): Välj metod för utskrift av fil (vissa kommandon har egna parametrar för utskrift, andra väntar på indata): standard input (STDIN) Indata (STDIN) Specify path as program parameter Ange sökväg som programparameter Please enter your customized or individual printing command. Example: Ange anpassat utskriftskommando. Exempel: <Path to gsprint.exe> -query -color <Sökväg till gsprint.exe> -query -color PulseManager Unable to find the PulseAudio binary. Neither bundled, nor found in $PATH nor additional directories. Kunde ej hitta binär för PulseAudio. Varken som medskickad eller i $PATH eller i ytterligare sökvägar. If you downloaded the bundled, pre-compiled version from the official home page, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Om du laddade ner färdigbyggd version från den officiella hemsidan, var vänlig rapportera en bug på: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Could not allocate buffer for getting current working directory! Kunde ej allokera buffert för att hämta aktuell arbetskatalog! getcwd() failed! getcwd() misslyckades! PulseAudio failed to start! PulseAudio startade inte! Sound support will not be available. If you downloaded the bundled, pre-compiled version from the official home page, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Ljudstöd kommer inte att vara tillgängligt. Om du laddade ner färdigbyggd version från den officiella hemsidan, var vänlig rapportera en bug på: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center Error fetching PulseAudio version number! Ett fel uppstod när versionsnummer för PulseAudio skulle hämtas! Unexpected character found when parsing version string for major version number Oväntat tecken när versionssträng för huvudversion kontrollerades Unexpected character found when parsing version string for minor version number Oväntat tecken när versionssträng för underversion kontrollerades Unexpected character found when parsing version string for micro version number Oväntat tecken när versionssträng för mikroversion kontrollerades Supposed to skip major version number. Something is wrong. Antas skippa huvudversionsnummer. Något är fel. Unable to convert major version number string to integer. Kunde ej konvertera huvudversionssträng till heltal. Unable to convert minor version number string to integer. Kunde ej konvertera underversionssträng till heltal. Unable to convert micro version number string to integer. Kunde ej konvertera mikroversionssträng till heltal. Unexpected format encountered. Oväntat format påträffat. Unable to start PulseAudio binary. Kunde ej starta PulseAudio. Unable to play startup sound. Kunde ej spela uppstartsljud. Sound support will not be available. Ljudstöd kommer inte att vara tillgängligt. If you downloaded the bundled, pre-compiled version from the official home page or the upstream Linux packages, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Om du laddade ner färdigbyggd version från den officiella hemsidan eller installerat via pakethanterare i Linux, var vänlig rapportera en bug på: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> QObject No response received from the remote server. Do you want to terminate the current session? Inget svar från fjärrserver. Vill du avsluta den aktuella sessionen? X2Go Client could not find any suitable X11 server. X2Go-klienten kunde inte hitta en lämplig X11-server. X2Go Client could not start X11 server. X2Go-klienten kunde inte starta X11-server. X2Go Client requires XQuartz to be installed. If XQuartz is already installed on your system, please select the correct path in the now upcoming dialog. Refer to the end of this message for path examples, in case you do not know the exact location yourself. Should you have <b>not</b> installed XQuartz yet, please follow the outlined steps: X2Go-klienten kräver XQuartz. Om XQuartz finns installerat på ditt system, var vänlig välj korrekt sökväg i kommande dialog. Se slutet på detta meddelande för exempel på sökvägar, Om du <b>inte</b> har installerat XQuartz ännu, var vänlig följ dessa steg: X2Go Client requires XQuartz to be installed. If XQuartz is already installed on your system, please select the correct path in the now upcoming dialog. Refer to the end of this message for path examples, in case you do not know the exact location yourself. Should you have <b>not</b> installed XQuartz yet, please follow the outlined steps: Looks like you stopped in-between in the second paragraph, so marking as unfinished. X2Go-klienten kräver XQuartz. Om XQuartz finns installerat på ditt system, var vänlig välj korrekt sökväg i kommande dialog. Se slutet på detta meddelande för exempel på sökvägar, Om du <b>inte</b> har installerat XQuartz ännu, var vänlig följ dessa steg: MacPorts users, please install either the port <b>xorg-server</b> or the port <b>xorg-server-devel</b>. Upon successful installation, please follow the instructions printed by the port utility to autostart/load the server. All other users, please obtain and install XQuartz from: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> Afterwards, restart X2Go Client and select the correct path to the X11 application in the general X2Go Client settings. This will most likely be <center><b>/Applications/MacPorts/X11.app</b></center> or <center><b>/Applications/Utilities/XQuartz.app</b></center> MacPorts-användare, var vänlig installera <b>xorg-server</b> eller <b>xorg-server-devel</b>. Var vänlig följ instruktionerna från port-verktyget för att autostarta servern. Alla andra användare, var vänlig hämta och installera XQuartz från: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> Starta sedan om X2Go-klient och välj korrekt sökväg till X11-applikationen i inställningara för X2Go-klient. Det är mest troligt <center><b>/Applications/MacPorts/X11.app</b></center> eller <center><b>/Applications/Utilities/XQuartz.app</b></center> SessionButton Session preferences... Sessionsinställningar... Create session icon on desktop... Skapa sessionsgenväg på Skrivbordet... Session preferences ... Sessionsinställningar... Create session icon on desktop ... Skapa sessionsgenväg på Skrivbordet... Delete session Radera session Session actions Sessionshantering Select type Välj typ Select resolution Välj upplösning Toggle sound support Växla ljudstöd New Session Ny session running aktiv suspended vilande KDE KDE RDP connection RDP-anslutning XDMCP XDMCP Connection to local desktop Anslutning till lokalt Skrivbord Published applications Publicerade applikationer fullscreen Fullskärm Display Display window fönster Maximum Maximerad Enabled Disabled Av SessionExplorer Back Tillbaka Create session icon on desktop Skapa sessionsgenväg på Skrivbordet Desktop icons can be configured not to show x2goclient (hidden mode). If you like to use this feature you'll need to configure login by a gpg key or gpg smart card. Use x2goclient hidden mode? Skrivbordsgenvägar kan konfigureras att inte visa X2Go-klienten (dolt läge). Om du vill aktivera den funktionen måste du använda inloggning med GPG-nyckel eller GPG-smartkort. Använd dolt läge? Create session icon on desktop. Skapa sessionsgenväg på Skrivbordet. Desktop icons can be configured not to show X2Go Client (hidden mode.) If you like to use this feature you'll need to configure login via a GPG key or GPG Smart Card. Use X2Go Client's hidden mode? Skrivbordsgenvägar kan konfigureras att inte visa X2Go-klienten (dolt läge). Om du vill aktivera den funktionen måste du använda inloggning med GPG-nyckel eller GPG-smartkort. Använd dolt läge? Show session tray icon when running Visa ikon i systemfältet när aktiv New Session Ny session X2Go Link to session Länk till X2Go-session Are you sure you want to delete this session? Är du säker på att du vill radera denna session? SessionManageDialog E&xit &Avbryt &New session &Ny session &Session preferences There are "..." on every other button so why not here ... &Sessionsinställningar... &Delete session &Radera session &Create session icon on desktop ... S&kapa sessionsgenväg på Skrivbordet... &Create session icon on desktop... S&kapa sessionsgenväg på Skrivbordet... Delete Delete Radera Session management Sessionshantering SessionWidget Session name: Sessionsnamn: << change icon << klicka för att ändra ikon Path: Sökväg: &Server &Server Values ranging from <b>0</b> to <b>65535</b> are allowed.<br />A value of <b>0</b> will either use the port specified in the SSH configuration file belonging to a host or shortname, or use the default of <b>22</b>. Värden mellan <b>0</b> och <b>65535</b> är tillåtna.<br />Väljs <b>0</b> så kommer antingen porten specificerad i SSH-konfigurationen eller standardporten <b>22</b> att användas. Host: Servernamn: Login: Användare: SSH port: SSH-port: Use RSA/DSA key for ssh connection: Använd denna RSA-/DSA-nyckel för SSH-anslutning: Try auto login (ssh-agent or default ssh key) Prova automatisk inloggning (ssh-agent eller standard SSH-nyckel) Kerberos 5 (GSSAPI) authentication Kerberos 5 (GSSAPI)-autentisering Delegation of GSSAPI credentials to the server Delegering av GSSAPI autentiseringsuppgifter till server Use Proxy server for SSH connection Använd proxyserver för SSH-anslutning Proxy server Proxyserver SSH SSH HTTP HTTP Same login as on X2Go Server Samma inloggning som för X2Go Server Same password as on X2Go Server Samma lösenord som för X2Go Server RSA/DSA key: RSA-/DSA-nyckel: Run in X2GoKDrive (experimental) X2Go/X11 Desktop Sharing X2Go Client is running in portable mode. You should use a path on your USB device to be able to access your data wherever you are. X2Go-klienten körs i portabelt läge. Du bör använda en sökväg till en USB-enhet för att möjliggöra flyttbara inställningar. Direct XDMCP connection Direktanslutning via XDMCP ssh-agent or default ssh key ssh-agent eller standard SSH-nyckel Type: Typ: Port: Port: &Session type &Sessionstyp Session type: Sessionstyp: Connect to Windows terminal server Anslut till Windows Terminal Server (RDP) XDMCP XDMCP Connect to local desktop Anslut till lokalt Skrivbord Custom desktop Anpassat Skrivbord Single application Applikation Published applications Publicerade applikationer Command: Kommando: Advanced options... Avancerade alternativ... Path to executable Sökväg till exekverbar fil Direct RDP Connection Direktanslutning via RDP RDP port: RDP-port: Open picture Öppna bild Pictures Bilder Open key file Öppna nyckelfil Try auto login (via SSH Agent or default SSH key) Prova automatisk inloggning (ssh-agent eller standard SSH-nyckel) SSH Agent or default SSH key ssh-agent eller standard SSH-nyckel Connect to Windows Terminal Server Anslut till Windows Terminal Server (RDP) Direct RDP connection Direktanslutning via RDP All files Alla filer Error Fel x2goclient is running in portable mode. You should use a path on your usb device to be able to access your data whereever you are X2Go-klienten körs i portabelt läge. Du bör använda en sökväg till en USB-enhet för att möjliggöra flyttbara inställningar Server: Server: XDMCP server: XDMCP-server: direct XDMCP connection direktanslutning via XDMCP rdesktop command line options: rdesktop kommandoradsalternativ: New session Ny session SettingsWidget &Display &Skärm &Keyboard &Tangentbord Sound Ljud &Clipboard Mode &Urklippsläge Bidirectional copy and paste Dubbelriktad klippa och klistra Copy and paste from client to server Klippa och klistra från klient till server Copy and paste from server to client Klippa och klistra från server till klient Disable clipboard completely Deaktivera Urklipp helt Auto detect keyboard settings Detektera tangentbordsinställningar automatiskt Do not configure keyboard Konfigurera inte tangentbordet Configure keyboard Konfigurera tangentbordet Model: Modell: Layout: Layout: Variant: Variant: RDP Client RDP-klient &Clipboard mode &Urklippsläge Fullscreen Fullskärm Custom Anpassad Window Fönster Use whole display Använd hela skärmen Maximum available Maximerad Set display DPI Ange skärmupplösning (DPI) Xinerama extension (support for two or more physical displays) Xinerama (stöd för två eller fler skärmar) Width: Bredd: Height: Höjd: &Display: &Skärm: &Identify all displays &Identifiera alla skärmar Auto-detect keyboard settings Detektera tangentbordsinställningar automatiskt RDP client RDP-klient FreeRDP/X11 (pre-2.x style options) FreeRDP/X11 (2.x style options) Keep current keyboard Settings Behåll aktuella tangentbordsinställningar Keyboard layout: Tangentbordslayout: Keyboard model: Tangentbordsmodell: Enable sound support Aktivera ljudstöd Start sound daemon Starta ljudserver Use running sound daemon Använd aktiv ljudserver Use SSH port forwarding to tunnel sound system connections through firewalls Couldn't find a good translation for port forwarding. Använd SSH port forwarding för att tunnla ljudström genom brandväggar Use default sound port Använd standardport för ljud Sound port: Ljudport: Client side printing support Stöd för utskrifter via klienten Additional parameters: Extra parametrar: Command line: Kommandorad: XDMCP client XDMCP-klient us se pc105/us pc105/se password lösenord ShareWidget &Folders &Mappar Path Sökväg Automount Montera automatiskt Add Lägg till Delete Radera Path: Sökväg: Filename encoding Kodtabell för filnamn local: lokal: remote: fjärr: Use SSH port forwarding to tunnel file system connections through firewalls Använd SSH port forwarding för att tunnla filsystemsanslutningar genom brandväggar X2Go Client is running in portable mode. You should use a path on your USB device to be able to access your data wherever you are. X2Go-klienten körs i portabelt läge. Du bör använda en sökväg till en USB-enhet för att möjliggöra flyttbara inställningar. Use ssh port forwarding to tunnel file system connections through firewalls Använd SSH port forwarding för att tunnla filsystemsanslutningar genom brandväggar Select folder Välj mapp Error Fel x2goclient is running in portable mode. You should use a path on your usb device to be able to access your data whereever you are X2Go-klienten körs i portabelt läge. Du bör använda en sökväg till en USB-enhet för att möjliggöra flyttbara inställningar WINDOWS-1252 WINDOWS-1252 ISO8859-1 ISO8859-1 SshMasterConnection SSH proxy connection error Anslutningsfel SSH-proxy SSH proxy connection error. Anslutningsfel SSH-proxy. SSH proxy connection error: Anslutningsfel SSH-proxy: Failed to create SSH proxy tunnel. Kunde ej skapa SSH-proxytunnel. Cannot initialize libssh. Kan ej initialisera libssh. Cannot create SSH session. Kan ej skapa SSH-session. Using environment-provided username. Användarnamn från miljö används. Cannot connect to proxy server. Kan ej ansluta till proxyserver. Authentication failed. Autentisering misslyckades. Failed to start SSH client. Please check your installation and GSSApi configuration. Start av SSH-klient misslyckades. Kontrollera din installation och GSSApi-konfiguration. Check your GSSApi configuration or choose another authentication method. Kontrollera din GSSApi-konfiguration eller välj en annan autentiseringsmetod. Reconnect session Återanslut session Cannot open file Kan inte öppna fil Cannot create remote file Kan inte skapa fjärrfil Cannot write to remote file Kan inte skriva till fjärrfil %1 failed. Argument in this context will be a function name. %1 misslyckades. channel_open_forward failed. channel_open_forward misslyckades. channel_open_session failed. channel_open_session misslyckades. Error writing to socket. Ett fel uppstod vid skrivning till socket. Error reading channel. Ett fel uppstod när kanal skulle läsas. channel_write failed. channel_write misslyckades. Error reading from TCP socket. Ett fel uppstod när TCP-socket skulle läsas. Failed to create SSH proxy tunnel Kunde ej skapa SSH-proxytunnel Can not initialize libssh Kan ej initialisera libssh Can not create ssh session Kan ej skapa SSH-session Can not connect to proxy server Kan ej ansluta till proxyserver Can not connect to Kan inte ansluta till Authentication failed Autentisering misslyckades channel_forward_listen failed channel_forward_listen misslyckades Failed to start SSH Client. Please check your installation and GSSApi configuration Start av SSH-klient misslyckades. Kontrollera din installation och GSSAPI-konfiguration Check your GSSApi configuration or choose another authentication method Kontrollera din GSSAPI-konfiguration eller välj en annan autentiseringsmetod Can not open file Kan inte öppna fil Can not create remote file Kan inte skapa fjärrfil Can not write to remote file Kan inte skriva till fjärrfil Cannot connect to kan inte ansluta till channel_open_forward failed channel_open_forward misslyckades channel_open_session failed channel_open_session misslyckades channel_request_exec failed channel_request_exec misslyckades error writing to socket ett fel uppstod vid skrivning till socket error reading channel ett fel uppstod när kanal skulle läsas channel_write failed channel_write misslyckades error reading tcp socket ett fel uppstod när tcp socket skulle läsas SshProcess Error creating socket Ett fel uppstod när socket skulle skapas Error creating socket. Ett fel uppstod när socket skulle skapas. Error binding Ett fel uppstod vid anslutning till socket XSettingsWidget Open File Öppna fil Executable (*.exe) Exekverbar (*.exe) XSettingsWidgetUI Form Formulär You must restart the X2Go Client for the changes to take effect Du måste starta om X2Go-klienten för att ändringar ska aktiveras use integrated X-Server använd integrerad X-server do not use primary clipboard använd inte primär urklippsbuffert use custom X-Server använd anpassad X-server custom X-Server anpassad X-server executable: Binär: start X-Server on X2Go Client start starta X-server när X2Go-klienten startas command line options: Kommandoradsalternativ: X-Server command line options Kommandoradsalternativ för X-server window mode: Fönsterläge: fullscreen mode: Fullskärmsläge: single application: Applikation: whole display: använd hela skärmen: x2goclient-4.1.2.3/res/i18n/x2goclient_tr.ts0000644000000000000000000062343014447111613015340 0ustar AppDialog Published Applications Tanımlı Uygulamalar Search: Ara: &Start &Başlat &Close &Kapat Multimedia Çokluortam Development Geliştirme Education Eğitim Game Oyun Graphics Grafikler Network Office Ofis Settings Ayarlar System Sistem Utility Araç Other Diğer BrokerPassDialogUi Dialog Pencere Old password: Eski parola: New password: Yeni parola: Confirm password: Parola onayla: TextLabel MetinEtiketi BrokerPassDlg Passwords do not match Parolalar eşleşmiyor CUPSPrintWidget Form Biçim Name: İsim: Properties Özellikler State: Durum: Accepting jobs: İşler kabul ediliyor: Type: Tür: Location: Konum: Comment: Açıklama: Idle Boşta Printing Yazdırılıyor Stopped Durduruldu Yes Evet No Hayır CUPSPrinterSettingsDialog No option selected Hiç seçenek seçilmedi This value is in conflict with another option. Options conflict. This value is in conflict with other option Bu değer başka bir seçenek ile çakıyor Options conflict Seçenek çakışması ConTest Connectivity test Bağlantı testi HTTPS connection: HTTPS bağlantısı: SSH connection: SSH bağlantısı: Connection speed: Bağlantı hızı: Failed Başarısız oldu 0 Kb/s 0 Kb/s OK Tamam Socket operation timed out. Socket operation timed out Soket işleminde zaman aşımı Failed: Başarısız: ConfigDialog General Genel Display icon in system tray Sistem çekmecesinde simgeyi göster Hide to system tray when minimized Küçültüldüğünde sistem çekmecesine gizle Hide to system tray when closed Kapatıldığında sistem çekmecesine gizle Hide to system tray after connection is established Bağlantı sağlandıktan sonra sistem çekmecesine gizle Restore from system tray after session is disconnected Bağlantı kesildikten sonra sistem çekmecesine gizle Use LDAP LDAP Kullan Server URL: Sunucu Adresi: BaseDN: BaseDN: Failover server 1 URL: Yük devretme sunucu 1 adresi: Failover server 2 URL: Yük devretme sunucu 2 adresi: X.Org Server settings PulseAudio settings Disable PulseAudio Disable sound input Your XQuartz version is too old. Your are using XQuartz (X Window System Server for OS X) version %1. This version causes problems with X applications in 24bit color mode. You should update your X11 environment. MacPorts users please follow the steps outlined on: <center><a href="https://guide.macports.org/chunked/using.common-tasks.html">https://guide.macports.org/chunked/using.common-tasks.html</a></center> Users who have installed XQuartz via the installer package can find updated versions on: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> No valid XQuartz application selected. You did not select a valid XQuartz application. Please try again. Some standard installation locations may be: <center><b>/Applications/Utilities/X11.app</b></center> <center><b>/Applications/Utilities/XQuartz.app</b></center> <center><b>/Applications/MacPorts/X11.app</b></center> &Input/Output &Media X-Server settings X-Sunucu ayarları X11 application: X11 uygulaması: X11 version: X11 sürümü: Find X11 application X11 uygulaması bul Clientside SSH port for file system export usage: Dosya sistemi dışa aktarımı kullanımı için istemci tarafı SSH bağlantı noktası: Start session embedded inside website Oturumu web sayfasına gömülü başlat Advanced options Gelişmiş seçenekler Defaults Varsayılanlar &OK &Tamam &Cancel &İptal Settings Ayarlar Printing Yazdırılıyor Warning Uyarı x2goclient could not find any suitable X11 Application. Please install Apple X11 or select the path to the application x2goclient uygun bir X11 Uygulaması bulamadı. Lütfen Apple X11 kurun veya uygulamanın yolunu seçin Your are using X11 (Apple X-Window Server) version Kullandığınız X11 (Apple X-Window Sunucusu) sürümü . This version causes problems with X-application in 24bit color mode. You should update your X11 environment (http://trac.macosforge.org/projects/xquartz). . Bu sürüm 24bit renk kipinde X-uygulamalarıyla sorunlara neden olmaktadır. X11 ortamınızı güncellemelisiniz (http://trac.macosforge.org/projects/xquartz). No suitable X11 application found in selected path Seçilen yolda uygun bir X11 uygulaması bulunamadı &Connection &Bağlantı &Settings &Ayarlar ConnectionWidget &Connection speed Bağlantı &hızı Connection speed: Bağlantı hızı: C&ompression Sı&kıştırma Method: Yöntem: Compression method: Sıkıştırma yöntemi: Image quality: Resim kalitesi: CupsPrinterSettingsDialog Dialog Pencere General Genel Page size: Sayfa boyutu: Paper type: Kağıt türü: Paper source: Kağıt kaynağı: Duplex Printing Önlü Arkalı Yazdırma None Hiçbiri Long side Uzun kenar Short side Kısa kenar Driver settings Sürücü ayarları Option Seçenek Value Değer No option selected Hiç seçenek seçilmedi text metin EditConnectionDialog &Session &Oturum &Connection &Bağlantı &Settings &Ayarlar &Input/Output &Media &Shared folders &Klasörleri paylaş &OK &Tamam &Cancel &İptal Defaults Varsayılanlar Session preferences - Oturum tercihleri - ExportDialog &Cancel &İptal &share &paylaş &Preferences ... &Tercihler... &Custom folder ... &Özel klasör ... Delete Delete Sil Share Folders share folders klasörleri paylaş Select folder Klasör seç FolderButton Sessions folder Oturum klasörü FolderExplorer Folders Klasörler Create New Folder Yeni Klasör Oluştur Rename Folder... Klasörü Yeniden Adlandır... Change Icon... Simgeyi Değiştir... Delete Folder... Klasörü Sil... Rename Folder ... Change Icon ... Delete Folder ... Open picture Resmi aç Pictures Resimler X2Go Client X2Go İstemcisi Folder Name: Klasör Adı: Error Hata Unable to remove " Bu dizin silinemiyor " ". Folder is not empty. Please remove the contents of this directory and try again. ". Folder is not empty. Please remove content of folder and try again. ". Dizin boş değil. Lütfen dizinin içeriğini silip tekrar deneyin. Delete folder " Dizini sil " New Folder Yeni Klasör Help Shows this message. Prints version information. Shows the changelog. Shows git information as used at compile time. [Deprecated: please use --version.] Shows available pack methods. Do not resume sessions automatically. Hides menu bar. Disables session editing. Starts maximized. Starts hidden (minimized to system tray where available.) Starts in "portable" mode. Forces OpenPGP smart card authentication. Disable PulseAudio. Disable sound input. Enables Xinerama by default. Allows client side printing in LDAP mode. Enables thinclient mode. Starts without a window manager. Enables shutdown button. Adds RSA key fingerprint to ".ssh/known_hosts" if authenticity of the server can't be determined. Starts with LDAP support. Example: --ldap=ldapserver:389:o=organization,c=de Defines the first LDAP failover server. Defines the second LDAP failover server. Defines the remote SSH server port. Default: 22. Defines the local machine's SSH server port. Needed for Client-Side Printing and File Sharing support. Default: 22. Sets the default command. Default: 'KDE' (Desktop Session) Starts the session named "session". Sets the user name for connecting to the remote SSH server to "username". Sets the default window geometry. Default: 800x600. Sets the remote X2Go Agent's DPI value to "dpi". Default: same as local display. Sets the default link type. Default: "adsl". Sets default pack method. Default: "16m-jpeg-9". Sets the default clipboard mode. Default: "both". Sets the default keyboard layout to "layout". "layout" may be a comma-separated list. Sets the default keyboard type. Sets the user's home directory. Enables or disables overwriting the current keyboard settings. Automatically launches the application(s) "app", "app2", ... on session start in Published Applications mode. Defines an alternative session config file path. Force-enables session system tray icon. Automatically closes X2Go Client after a disconnect. Hides all Folder-Sharing-related options. Sets the broker name to display in X2Go Client. This parameter is optional. Sets the path to an SSH key to use for authentication against an SSH session broker. The client's behavior is undefined if this flag is used for non-SSH session brokers. Enables the use of the default SSH key or SSH agent for authentication against an SSH session broker. The client's behavior is undefined if this flag is used for non-SSH session brokers. Does not ask for user credentials during session broker authentication. This can be useful if you are using an HTTP(S) session broker without authentication. If you run an HTTP(S) server without authentication, but with user-specific profiles, then put the user name into the broker URL (refer to --broker-url.) The user name then will be extracted from the broker URL and be sent to the session broker. The client's behavior is undefined if this flag is used for non-HTTP(S) session brokers. Use broker credentials as session user/password credentials when using broker mode with broker authentication. Currently only affects direct RDP sessions. Enables broker logout button. Use a custom/branded background image (SVG format) for X2Go Client's main window. If a directory is given, will randomly pick an SVG file inside of it. Use a custom icon (SVG format) for additional branding to replace the default in the lower left corner of X2Go Client's main window. Disables X2Go Client's UNIX cleanup helper. This will prevent X2Go Client from terminating spawned processes after the main program terminates or crashes. Use with care and when in doubt, do not use this parameter at all. HelpDialog Options Seçenekler HttpBrokerClient Host key for server changed. It is now: Sunucu için konak anahtarı değişti. Şimdiki: For security reasons, connection will be stopped Güvenlik nedenleriyle bağlantı sonlandırılacak The host key for this server was not found but an othertype of key exists.An attacker might change the default server key toconfuse your client into thinking the key does not exist Bu sunucu için konak anahtarı bulunamadı, ancak başka bir tür anahtar bulundu. Bir saldırgan istemcinizin anahtarın olmadığını düşünmesini sağlamak için ana sunucunu anahtarını değiştirmiş olabilir. Could not find known host file.If you accept the host key here, the file will be automatically created Bilinen istemciler dosyası bulunamadı. Eğer istemci anahtarını kabul ettiyseniz dosya burada otomatik olarak oluşturulacaktır The server is unknown. Do you trust the host key? Public key hash: Sunucu bilinmiyor. Konak anahtarına güveniyor musunuz? Açık anahtar özeti: Host key verification failed Makine anahtarının doğrulanması başarısız oldu For security reasons, the connection attempt will be aborted. The host key for this server was not found but another type of key exists. An attacker might have changed the default server key to trick your client into thinking the key does not exist yet. Could not find known hosts file. If you accept the host key here, the file will be automatically created. Yes Evet No Hayır Host key verification failed. Verification code: Doğrulama kodu: Enter passphrase to decrypt a key Bir anahtarı deşifrelemek için parolayı girin Enter user account password: Authentication failed. Login failed!<br>Please try again. Secure connection failed. Common Name(CN) Organization(O) Organizational Unit(OU) Serial Number Issued on expires on SHA1 MD5 MD5 {5 ?} Authentication failed Kimlik doğrulaması başarısız Error Hata Login failed!<br>Please try again Giriş başarısız oldu!<br>Lütfen tekrar deneyin <br><b>Server uses an invalid security certificate.</b><br><br> <br><b>Sunucu geçersiz bir güvenlik sertifikası kullanıyor.</b><br><br> <p style='background:#FFFFDC;'>You should not add an exception if you are using an internet connection that you do not trust completely or if you are not used to seeing a warning for this server.</p> <p style='background:#FFFFDC;'>Tamamen güvendiğiniz bir internet bağlantısı kullanmıyorsanız veya bu sunucu için bir uyarı görmeye alışkın değilseniz bir istisna eklememelisiniz.</p> Secure connection failed Güvenli bağlantı hatası Issued to: Yayınlatan: Common Name(CN) Ortak İsim (CN) Organization(O) Kurum (O) Organizational Unit(OU) Kurumsal Birim (OU) Serial Number Seri Numarası Issued by: Yayınlayan: Validity: Geçerlilik: Issued on Yayınlama tarihi expires on Zaman aşımı tarihi Fingerprints: Parmak izi: SHA1 SHA1 MD5 MD5 Exit X2Go Client X2Go İstemcisinden Çık Add exception İstisna ekle InteractionDialog Terminal output: Cancel İptal Reconnect Yeniden bağlan MediaWidget Sound Ses Enable sound support Ses desteğini etkinleştir Start sound daemon Ses sürecini başlat Use running sound daemon Çalışan ses sürecini kullan Use SSH port forwarding to tunnel sound system connections through firewalls Güvenlik duvarları üzerinden ses sistemi bağlantılarını tünellemek için ssh port yönlendirmesini kullanın Use default sound port Varsayılan ses portunu kullan Sound port: Ses portu: Client side printing support İstemci tarafı yazdırma desteği Deprecation Warning ARTS support is scheduled to be removed soon. Please upgrade to PulseAudio. ESounD support is scheduled to be removed soon. Please upgrade to PulseAudio. ONMainWindow Starting x2goclient... x2goclient istemcisi başlatılıyor... us tr X2Go Client X2Go İstemcisi connecting bağlanıyor Internet browser Internet tarayıcı Email client E-posta istemcisi OpenOffice.org OpenOffice.org Terminal Uçbirim Starting x2goclient in portable mode... data directory is: x2goclient taşınabilir kipte başlatılıyor... veri dizini: &Settings ... &Ayarlar... Support ... Destek ... About X2GO client X2GO istemcisi hakkında Started x2goclient. x2goclient başlatıldı. Can't load translator: Çevirici yüklenemiyor: Translator: Çevirmen: installed. kuruldu. Share folder... Klasör paylaş... Applications... Uygulamalar... Suspend Askıya Al Terminate Sonlandır Reconnect Yeniden bağlan Detach X2Go window X2Go penceresini ayır Minimize toolbar Araç çubuğunu küçült Session: Oturum: &Quit &Çıkış Ctrl+Q Ctrl+Q Quit Çık &New session ... &Yeni oturum ... Ctrl+N Ctrl+N Session management... Oturum yönetimi... Ctrl+E Ctrl+E &Create session icon on desktop... &Masaüstüne oturum simgesi oluştur... &Set broker password... &Aracı parolası ata... &Connectivity test... &Bağlantı testi... Show toolbar Araç çubuğunu göster About Qt Qt Hakkında Ctrl+Q exit Ctrl+Q Starting X2Go Client %1... Starting X2Go Client in portable mode. Data directory is: About X2Go Client Started X2Go Client. found. Non-fatal: can't load translator: Trying to load language with lower preference, if existent. Session management ... &Create session icon on desktop ... &Set broker password ... &Connectivity test ... &Session &Oturum &Options &Seçenekler &Help &Yardım Login: Giriş: Error Hata Operation failed İşlem başarısız oldu Password changed Parola değiştirildi Wrong password! Yanlış parola! Connecting to broker Aracıya bağlanıyor <b>Authentication</b> <b>Kimlik Doğrulama</b> Restore Geri Yükle Not connected Bağlı değil Multimedia Çokluortam Development Geliştirme Education Eğitim Game Oyun Graphics Grafikler Network Office Ofis Settings Ayarlar System Sistem Utility Araç Other Diğer Share folder ... A click displays the context menu. A left click hides or restores the window. A right click displays the context menu. Closing X2Go Client ... Finished X2Go Client closing hooks. Broker authentication failed! no X2Go Server found in LDAP Connection error: Couldn't find an SSH connection. Enter user account password: This can be an indication of a man-in-the-middle attack. Somebody might be eavesdropping on you. For security reasons, it is recommended to stop the connection attempt. Do you want to terminate the connection? Host key verification failed. The host key for this server was not found but another type of key exists. An attacker might have changed the default server key to trick your client into thinking the key does not exist yet. For security reasons, it is recommended to stop the connection attempt. Do you want to terminate the connection? Could not find known hosts file. If you accept the host key here, the file will be automatically created. Authentication failed. XDM RDP <b>Connection failed.</b> No server available. Server not available. X2GoKDrive session No accessible desktop found. PulseAudio is not running Sound output will be disabled for this session. Please enable PulseAudio in the configuration dialog or disable sound in the session settings Unable to create SSH tunnel for X2Go session (NX) startup: Unable to create SSH tunnel for audio data: failed to start. This likely means the binary is not available. The current search path is: returned a non-zero exit code or crashed otherwise. Execution failed, exit code was: didn't start up in time. This error shouldn't come up. didn't accept a write operation. It is probably not running correctly or crashed in-between. Unable to read from xmodmap. encountered an unknown error during start up or execution. experienced an undefined error. X2Go Client will now terminate. File a bug report as outlined on the <a href="http://wiki.x2go.org/doku.php/wiki:bugs">bugs wiki page</a>. Failed to start RDP or XDMCP client Check session settings and ensure that selected client is installed on your system. Proxy didn't terminate after 3 seconds. Killing the proxy. Closing X2Go Client because it was started in hidden mode. Closing X2Go Client because the --close-disconnect parameter was passed. Are you sure you want to terminate this session? Unsaved documents will be lost. <b>Connection failed.</b> : (file does not exist) (directory does not exist) Invalid value for parameter "--link". Invalid value for parameter "--clipboard". Invalid value for parameter "--sound". Invalid value for parameter "--geometry". Invalid value for parameter "--set-kbd". Invalid value for parameter "--ldap". Invalid value for parameter "--ldap1". Invalid value for parameter "--ldap2". Invalid value for parameter "--pack". Available pack methods: Pack Methods Option is not available in this build. Unable to create directory: <br>(C) 2005-2023 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> Translators, feel free to add a localized version of your translation including a copyright notice and your name(s). Remember to keep a <br> at the end, though. English example for a potential translation: <br>(C) 2005-2023 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br>English version: (C) 20AB-20CD Trans Lator <trans@la.tor><br> Check whether the package providing "pcsc_scan" is installed. The current search path is: Unable to create or append to file: Unable to change the permissions of file: This is an error because sshd would deny such a file. Unable to change the permissions of directory: This is an error because sshd would deny such a directory. Can't start X.Org Server. Please check your installation. X.Org Server did not launch correctly after %n tries. %n will be substituted with the current number of tries Unable to find the sftp-server binary. Neither bundled, nor found in $PATH nor additional directories. If you are using a Linux-based operating system, please ask your system administrator to install the package containing the sftp-server binary. Common names are <b>openssh</b>, <b>openssh-server</b> or <b>openssh-sftp-server</b> depending upon distribution. If the sftp-server binary is installed on your system, please report a bug mentioning its path on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> SSH key type selection error Unknown SSH key selected. Terminating application. SSH key base directory creation error Unable to create SSH key base directory '%1'. ssh-keygen launching error Unable to start the ssh-keygen binary. ssh-keygen crashed The ssh-keygen binary crashed. ssh-keygen program error The ssh-keygen binary did not exit cleanly. It was probably called with unknown arguments. Unable to open newly generated %1 public host key file. %1 public host key file empty. Cannot open key: libssh initialization failure Unable to initialize libssh. Your current color depth is different from the session's color depth. This may cause problems reconnecting to this session and in most cases <b>you will lose the session</b> and have to start a new one! It's highly recommended to change the color depth of your display to %n bit(s) and restart your X.Org Server before you reconnect to this X2Go session. %n will be replaced with a number <br />Do you want to resume this session anyway? <br>This is a client to access the X2Go network-based computing environment. This client will be able to connect to X2Go Server(s) and start, stop, resume and terminate (running) desktop sessions. X2Go Client stores different server connections and may automatically request authentication data from LDAP directories. Furthermore, it can be used as a fullscreen login screen (replacement for login managers like XDM). Please visit <a href="http://www.x2go.org">the project home page at x2go.org</a> for further information. <b>X2Go Client v. Please check LDAP Settings. didn't start yet. Unable to read from scdaemon. No valid card found. This card is unknown to the X2Go system. Can't start X.Org Server. Please check your installation. Remote server does not support file system exports through SSH tunnels. Please update your x2goserver package. Unable to create SSH tunnel for Folder Sharing and Printing support: Unable to read: Error getting window geometry. (Did you close the window?) Invalid value for argument "speed" You have enabled Remote Printing or File Sharing. These features require a running and functioning SSH server on your computer. <b>Printing and File Sharing will be disabled for this session.</b> Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server. If you see this message, please report a bug on: The SSH server failed to start. Please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server and automatically generates the required keys. If you see this message, please report a bug on: X2Go Client was unable to create SSH host keys. Please report a bug on: SSH daemon failed to open the application's authorized_keys file. Left mouse button to hide/restore - Right mouse button to display context menu Gizlemek/geri yüklemek için farenin sol tuşu - İçerik menüsünü görüntülemek için farenin sağ tuşu Closing x2goclient... x2goclient kapatılıyor... Closed x2goclient. x2goclient kapatıldı. Please check LDAP settings Lütfen LDAP ayarlarını kontrol edin no X2Go server found in LDAP LDAP'ta X2Go sunucusu yok No X2Go sessions found, closing. X2Go oturumu bulunamadı, kapatılıyor. KDE KDE RDP connection RDP bağlantısı XDMCP XDMCP Connection to local desktop Yerel masa üstüne bağlantı on üzerinde Starting connection to server: Sunucuya bağlantı başlatılıyor: to sunucusuna Connection Error( Bağlantı Hatası( Couldn't find a SSH connection. Bir SSH bağlantısı bulunamadı. Verification code: Doğrulama kodu: Enter passphrase to decrypt a key Anahtarı deşifrelemek için parola girin Host key for server changed. It is now: Sunucunun konak anahtarı değişti. Şimdiki: This can be an indication of a man-in-the-middle attack. Somebody might be eavesdropping on you. For security reasons, it is recommended to stop the connection. Do you want to terminate the connection? Bu aradaki adam saldırısının bir göstergesi olabilir. Biri trafiğinizi dinliyor olabilir. Güvenlik nedenleriyle bağlantıyı sonlandırmanız önerilir. Bağlantıyı sonlandırmak istiyor musunuz? Host key verification failed Makine anahtarının doğrulanması başarısız oldu Yes Evet No Hayır If you accept the new host key the security of your connection may be compromised. Do you want to update the host key? Yeni konak anahtarını kabul ederseniz bağlantınızın güvenliği tehlikede olabilir. Konak anahtarını güncellemek istiyor musunuz? The host key for this server was not found but an othertype of key exists. An attacker might change the default server key to confuse your client into thinking the key does not exist. For security reasons, it is recommended to stop the connection. Do you want to terminate the connection? Bu sunucu için konak anahtarı bulunamadı, ancak başka bir tür anahtar bulundu. Bir saldırgan istemcinizin anahtarın olmadığını düşünmesini sağlamak için ana sunucunu anahtarını değiştirmiş olabilir. Güvenlik nedenleriyle bağlantıyı sonlandırmanız önerilir. Bağlantıyı sonlandırmak istiyor musunuz? Could not find known host file.If you accept the host key here, the file will be automatically created Bilinen istemciler dosyası bulunamadı. Eğer istemci anahtarını kabul ettiyseniz dosya burada otomatik olarak oluşturulacaktır The server is unknown. Do you trust the host key? Public key hash: Sunucu bilinmiyor. İstemci anahtarına güveniyor musunuz? Açık anahtarın özeti: Authentication failed: Kimlik doğrulama başarısız oldu: Authentication failed Kimlik doğrulama başarısız Enter password for SSH proxy Vekil SSH için parola girin <b>Connection failed</b> <b>Bağlantı başarısız</b> <b>Wrong password!</b><br><br> <b>Yanlış parola!</b><br><br> Connection failed: Bağlantı başarısız: - Wrong password. - Yanlış parola. unknown bilinmeyen No server availabel Erişilebilir sunucu yok Server not availabel Sunucu erişilebilir değil Select session: Oturumu başlat: running çalışıyor suspended bekletiliyor Desktop Masaüstü single application tek uygulama shadow session gölge oturumu Information Bilgi No accessible desktop found Erişilebilir masaüstü bulunamadı Filter Filtre Select desktop: Masaüstü seçin: Warning Uyarı Your current color depth is different to the color depth of your x2go-session. This may cause problems reconnecting to this session and in most cases <b>you will loose the session</b> and have to start a new one! It's highly recommended to change the color depth of your Display to Geçerli renk derinliğiniz x2go oturumunuzdakinden farklı. Bu oturuma yeniden bağlanmanızda sorunlara yol açabilir ve çoğu durumda <b>oturumunuzu kaybedersiniz</b> ve yeni bir oturum başlatmanız gerekir! Renk derinliğinizi şuna değiştirmeniz şiddetle önerilir 24 or 32 24 veya 32 bit and restart your X-server before you reconnect to this x2go-session.<br>Resume this session anyway? bit ve bu x2go oturumuna yeniden bağlanmadan X sunucunuzu yeniden başlatın.<br>Oturuma yine de devam edilsin mi? suspending bekletiliyor terminating sonlandırılıyor <b>Wrong Password!</b><br><br> <b>Hatalı Parola!</b><br><br> New session started Yeni oturum başlatıldı Session resumed Oturuma geri dönüldü Unable to create folder: Klasör oluşturulamadı: Unable to write file: Dosya yazılamıyor: Attach X2Go window X2Go penceresine ekle Unable to create SSL tunnel: SSL tüneli oluşturulamadı: Unable to create SSL Tunnel: SSL Tüneli oluşturulamadı: Emergency exit. Acil çıkış. Waiting for proxy to exit. Çıkış için vekil sunucu bekleniyor. Failed, killing the proxy. Başarısız oldu, vekil sunucu durduruluyor. Finished Tamamlandı starting başlatılıyor resuming devam ediliyor Connection timeout, aborting Bağlantı zaman aşımına uğradı, iptal ediliyor aborting iptal ediliyor Are you sure you want to terminate this session? Unsaved documents will be lost Bu oturumu sonlandırmak istediğinizden emin misiniz? Kaydedilmemiş belgeler kaybolacak Session Oturum Display Göster Creation time Oluşturma zamanı <b>Connection failed</b> : <b>Bağlantı başarısız</b> : (can't open file) (dosya açılamıyor) (file not exists) (dosya yok) (directory not exists) (dizin mevcut değil) wrong value for argument"--link" "--link" değişkeni için hatalı değer wrong value for argument"--clipboard" "--clipboard" değişkeni için hatalı değer wrong value for argument"--sound" "--sound" değişkeni için hatalı değer wrong value for argument"--geometry" "--geometry" değişkeni için hatalı değer wrong value for argument"--set-kbd" "--set-kbd" değişkeni için hatalı değer wrong value for argument"--ldap" "--ldap" değişkeni için hatalı değer wrong value for argument"--ldap1" "--ldap1" değişkeni için hatalı değer wrong value for argument"--ldap2" "--ldap2" değişkeni için hatalı değer wrong value for argument"--pack" "--pack" değişkeni için hatalı değer Wrong parameter: Yanlış parametre: Help Yardım Available pack methodes: Kullanılabilir paketleme yöntemleri: Pack Methodes Paketleme Yöntemleri Option is not availabel in this build Bu inşa için özellik kullanılabilir değil Changelog Değişim günlüğü Git Info Git Bilgisi Unable to create folder: Dizin oluşturulamadı: RSA file empty. RSA dosyası boş. Can not open key: Anahtar açılamıyor: Support Destek </b><br> (C. 2005-2016 <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br> </b><br> (C. 2005-2016 <b>açıkça iyi</b>: Oleksandr Shneyder, Heinz-Markus Graesing)<br> <br>x2goplugin mode was sponsored by <a href="http://www.foss-group.de/">FOSS-Group GmbH(Freiburg)</a><br> <br> x2goplugin kipi <a href="http://www.foss-group.de/">FOSS-Group GmbH(Freiburg)</a> tarafından desteklenmektedir<br> <br>Client for use with the X2Go network based computing environment. This Client will be able to connect to X2Go server(s) and start, stop, resume and terminate (running) desktop sessions. X2Go Client stores different server connections and may automatically request authentication data from LDAP directories. Furthermore it can be used as fullscreen loginscreen (replacement for loginmanager like xdm). Please visit x2go.org for further information. <br>X2Go ağını temel alan hesaplama ortamını kullanan istemci. Bu İstemci X2Go sunucu(lar)ına bağlanabilir ve masaüstü oturumlarını başlatabilir, durdurabilir, oturumlara geri dönebilir ve çalışan oturumları sonlandırabilir. X2Go İstemcisi farklı sunucu bağlantılarını saklayabilir ve LDAP dizinlerinden veri ile otomatik kimlik doğrulama talep edebilir. Bunun yanında tam ekran oturum açma ekranı (xdm gibi yazılımların yerine) olarak da kullanılabilir. Daha fazla bilgi için lütfen x2go.org adresini ziyaret edin. <b>X2Go Client V. <b>X2Go İstemcisi V. Please check LDAP Settings Lütfen LDAP Ayarlarını kontrol edin No valid card found Geçerli kart bulunamadı Card not configured. Kart yapılandırılmadı. This card is unknown by X2Go system Kart X2Go sistemi tarafından bilinmiyor Unable to create file: Dosya oluşturulamadı: Can't connect to X server Please check your settings X sunucusuna bağlanılamadı Lütfen ayarlarınızı kontrol edin Can't start X server Please check your settings X sunucusu başlatılamadı Lütfen ayarlarınızı kontrol edin Can't start X Server Please check your installation X Sunucusu başlatılamadı\Lütfen kurulumunuzu kontrol edin Unable to execute: Komut çalıştırılamadı: Remote server does not support file system export through SSH Tunnel Please update to a newer x2goserver package Uzak sunucu SSH Tünel üzerinden dosya sistemini aktarmayı desteklemiyor Lütfen x2goserver paketini daha yeni bir sürüme güncelleyin Unable to read : Okunamadı : Unable to write : Yazılamadı : WINDOWS-1252 WINDOWS-1252 ISO8859-1 ISO8859-1 Error getting window geometry (window closed)? Pencere geometrisi alınırken hata (pencere kapalı mı)? X2Go Session X2Go Oturumu wrong value for argument"speed" "speed" değişkeni için hatalı değer Password: Parola: Keyboard layout: Klavye düzeni: Ok Tamam Cancel İptal <b>Session ID:<br>Server:<br>Username:<br>Display:<br>Creation time:<br>Status:</b> <b>Oturum Kimliği:<br>Sunucu:<br>Kullanıcı adı:<br>Ekran:<br>Oluşturma zamanı:<br>Durum:</b> Applications ... Abort İptal Show details Ayrıntıları göster Resume Devam et New Yeni Full access Tam erişim View only Sadece görüntüleme Status Durum Command Komut Type Tür Server Sunucu Client IP İstemci IP adresi Session ID Oturum Kimliği User Kullanıcı Only my desktops Sadece beim masaüstlerimde SSH daemon could not be started. Disabling Remote Printing or File Sharing support in the session settings will get rid of this message. SSH daemon failed to open its public host key. SSH Error SSH Hatası SSH daemon could not be started. You'll need SSH daemon for printing and file sharing. Normally, this should not happen as X2Go Client for Windows ships its internal sshd.exe. If you see this message, please report a bug against the X2Go bugtracker. SSH süreci başlatılamadı. SSH sürecine yazdırma ve dosya paylaşımı için ihtiyacınız olacak. Windows için X2Go istemcisi kendi iç sshd.exe dosyasını taşıdığından bunun normalde olmaması gerekirdi. Eğer bu iletiyi görüyorsanız lütfen X2Go hata takip sisteminde bir hata kaydı açın. SSH daemon is not running. You'll need SSH daemon for printing and file sharing Please ask your system administrator to provide the SSH service on your computer. SSH süreci çalışmıyor. SSH sürecine yazdırma ve dosya paylaşımı için ihtiyacınız olacak Lütfen sistem yöneticinizden bilgisayarınıza SSH servisi sağlamasını isteyin. SSH daemon failed to open the application's public host key. SSH süreci uygulamanın açık konak anahtarını açmakta başarısız oldu. SSH daemon failed to open the application's public key used for exporting folders and printers. SSH süreci uygulamanın klasörleri ve yazıcıları dışa aktarmak için kullanılan açık anahtarını açamadı. SSH daemon failed to open the application's authoized_keys file. SSH süreci uygulamanın authoized_keys dosyasını açmakta başarısız oldu. Restore toolbar Araç çubuğunu yeniden yükle <br><b>&nbsp;&nbsp;&nbsp;Click this button&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;to restore toolbar&nbsp;&nbsp;&nbsp;</b><br> <br><b>&nbsp;&nbsp;&nbsp;Araç çubuğunu yeniden yüklemek için&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;bu düğmeye tıklayın&nbsp;&nbsp;&nbsp;</b><br> PrintDialog Print - X2Go Client Yazdır - X2Go İstemcisi Print Yazdır You've deactivated the X2Go Client printing dialog. You may reactivate this dialog using the X2Go Client settings dialog. To do so, follow this path in the menu bar: Options -> Settings You've deactivated the x2go client printing dialog. X2Go istemcisinin yazdırma penceresini kapattınız. You may reactivate this dialog using the x2goclient settings dialog (Menu -> Options -> Settings) Bu pencereyi x2goclient ayarlar menüsünden (Menü -> Seçenekler -> Ayarlar) yeniden etkinleştirebilirsiniz PrintProcess Save File Dosyayı Kaydet PDF Document (*.pdf) PDF Belgesi (*.pdf) Failed to execute command: Komut çalıştırılamadı: Printing error. Printing error Yazdırma hatası PrintWidget Form Biçim Print Yazdır View as PDF PDF olarak görüntüle Print settings Yazdırma ayarları Printer: Yazıcı: Print using default Windows PDF Viewer (Viewer application needs to be installed) Varsayılan Windows PDF Görüntüleyicisini kullanarak yazdır (Görüntüleyici uygulaması kurulmalıdır) Printer command: Yazıcı komutu: ... ... Viewer settings Görüntüleyici ayarları Open in viewer application Görüntüleyici uygulamasında aç Command: Komut: Save to disk Diske kaydet Show this dialog before start printing Yazdırmayı başlatmadan önce bu pencereyi göster Please configure your client side printing settings.<br><br>If you want to print the created file, you'll need an external application. Typically you can use <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> and <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>You can find further information <a href="http://www.x2go.org/index.php?id=49">here</a>. Lütfen istemci tarafı yazdırma ayarlarını yapılandırın.<br><br>Oluşturulan dosyayı yazdırmak isterseniz harici bir uygulamaya ihtiyacınız olacak. Genellikle <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> ve <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br> kullanabilirsiniz. Ayrıntılı bilgiyi <a href="http://www.x2go.org/index.php?id=49">burada</a> bulabilirsiniz. Please configure your client side printing settings.<br><br>If you want to print the created file, you'll need an external application. Typically you can use <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> and <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>You can find further information <a href="http://www.x2go.org/index.php?id=49">here</a>. PrinterCmdDialog Printer command Yazıcı komutu Command Komut Please enter your customized or individual printing command. Examples: kprinter lpr -P hp_laserjet Lütfen özelleştirdiğiniz veya kişisel yazdırma komutunu girin. Örnekler: kprinter lpr -P hp_laserjet Output format Çıktı biçimi Please choose the printing file format (regarding to your printing environment - if you use CUPS you may use PDF) Lütfen yazdırma dosya biçimini seçin (yazdırma ortamınızdan bağımsız olarak - eğer CUPS kullanıyorsanız PDF'yi seçebilirsiniz) PDF PDF PS PS Data structure Veri yapısı Please choose the method of printing file input (some commands accepting printing files as program options, some are awaiting data on standard input): Lütfen dosya girdisini yazdırma yöntemini seçin (bazı komutlar dosyaları yazdırmak için program seçeneği olarak kabul ederken bazıları da standart girdiden veri bekler): standard input (STDIN) standart girdi (STDIN) Specify path as program parameter Yolu program değişkeni olarak belirtin Please enter your customized or individual printing command. Example: Lütfen özelleştirdiğiniz veya kişisel yazdırma komutunu girin. Örnek: <Path to gsprint.exe> -query -color <gsprint.exe dosyasının yolu> -query -color PulseManager Could not allocate buffer for getting current working directory! getcwd() failed! PulseAudio failed to start! Error fetching PulseAudio version number! Unexpected character found when parsing version string for major version number Unexpected character found when parsing version string for minor version number Unexpected character found when parsing version string for micro version number Supposed to skip major version number. Something is wrong. Unable to convert major version number string to integer. Unable to convert minor version number string to integer. Unable to convert micro version number string to integer. Unexpected format encountered. Unable to start PulseAudio binary. Unable to play startup sound. Sound support will not be available. If you downloaded the bundled, pre-compiled version from the official home page or the upstream Linux packages, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> QObject No response received from the remote server. Do you want to terminate the current session? Uzak sunucudan yanıt alınamdı. Geçerli oturumu sonlandırmak ister misiniz? X2Go Client could not find any suitable X11 server. X2Go Client could not start X11 server. X2Go Client requires XQuartz to be installed. If XQuartz is already installed on your system, please select the correct path in the now upcoming dialog. Refer to the end of this message for path examples, in case you do not know the exact location yourself. Should you have <b>not</b> installed XQuartz yet, please follow the outlined steps: MacPorts users, please install either the port <b>xorg-server</b> or the port <b>xorg-server-devel</b>. Upon successful installation, please follow the instructions printed by the port utility to autostart/load the server. All other users, please obtain and install XQuartz from: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> Afterwards, restart X2Go Client and select the correct path to the X11 application in the general X2Go Client settings. This will most likely be <center><b>/Applications/MacPorts/X11.app</b></center> or <center><b>/Applications/Utilities/XQuartz.app</b></center> SessionButton Session preferences... Oturum tercihleri... Create session icon on desktop... Masaüstünde oturum simgesi oluştur... Session preferences ... Create session icon on desktop ... Delete session Oturumu sil Session actions Oturum eylemleri Select type Türü seçin Select resolution Çözünürlüğü seçin Toggle sound support Ses değiştirme desteği New Session Yeni Oturum running çalışıyor suspended bekletiliyor KDE KDE RDP connection RDP bağlantısı XDMCP XDMCP Connection to local desktop Yerel masaüstüne bağlantı Published applications Tanımlı uygulamalar fullscreen tam ekran Display Göster window pencere Maximum En Büyük Enabled Etkin Disabled Kapalı SessionExplorer Back Geri Create session icon on desktop Masa üstünde oturum simgesi oluştur Desktop icons can be configured not to show x2goclient (hidden mode). If you like to use this feature you'll need to configure login by a gpg key or gpg smart card. Use x2goclient hidden mode? Masaüstü simgeleri x2goclient'ı göstermeyecek şekilde yapılandırılabilirler (gizli kip). Bu özelliği kullanmak isterseniz oturum açmayı gpg anahtarı veya gpg akıllı kartla yapılandırmanız gereklidir. x2goclient gizli kipte kullanılsın mı? Create session icon on desktop. Desktop icons can be configured not to show X2Go Client (hidden mode.) If you like to use this feature you'll need to configure login via a GPG key or GPG Smart Card. Use X2Go Client's hidden mode? Show session tray icon when running Çalışırken oturum tepsisinde simgeyi göster New Session Yeni Oturum X2Go Link to session X2Go oturuma bağlı Are you sure you want to delete this session? Bu oturumu silmek istediğinizden emin misiniz? SessionManageDialog E&xit Ç&ık &New session &Yeni Oturum &Session preferences &Oturum tercihleri &Delete session Oturumu &Sil &Create session icon on desktop ... &Create session icon on desktop... &Masaüstünde oturum simgesi oluştur... Delete Delete Sil Session management Oturum yönetimi SessionWidget Session name: Oturum adı: << change icon << simgeyi değiştir Path: Yol: &Server &Sunucu Values ranging from <b>0</b> to <b>65535</b> are allowed.<br />A value of <b>0</b> will either use the port specified in the SSH configuration file belonging to a host or shortname, or use the default of <b>22</b>. Host: Makine: Login: Giriş: SSH port: SSH portu: Use RSA/DSA key for ssh connection: Ssh bağlantısı için RSA/DSA anahtarı kullan: Try auto login (ssh-agent or default ssh key) Otomatik oturum açmayı dene (ssh-agent veya varsayılan ssh anahtarı) Try auto login (via SSH Agent or default SSH key) Kerberos 5 (GSSAPI) authentication Kerberos 5 (GSSAPI) kimlik doğrulaması Delegation of GSSAPI credentials to the server Sunucuya GSSAPI kimlik bilgileri gönderimi Use Proxy server for SSH connection SSH bağlantısı için vekil sunucu kullan Proxy server Vekil sunucu SSH SSH HTTP HTTP Same login as on X2Go Server X2Go Sunucusundaki giriş ile aynı Same password as on X2Go Server X2Go sunucusundaki parola ile aynı RSA/DSA key: RSA/DSA anahtarı: SSH Agent or default SSH key Run in X2GoKDrive (experimental) Connect to Windows Terminal Server X2Go/X11 Desktop Sharing Direct RDP connection X2Go Client is running in portable mode. You should use a path on your USB device to be able to access your data wherever you are. Direct XDMCP connection ssh-agent or default ssh key ssh-agent veya varsayılan ssh anahtarı Type: Tür: Port: Port: &Session type &Oturum türü Session type: Oturum türü: Connect to Windows terminal server Windows terminal sunucusuna bağlan XDMCP XDMCP Connect to local desktop Yerel masaüstüne bağlan Custom desktop kişisel masaüstü Single application Tek uygulama Published applications Tanımlı uygulamalar Command: Komut: Advanced options... Gelişmiş seçenekler... Path to executable Çalıştırılabilir dosyanın yolu Direct RDP Connection Doğrudan RDP Bağlantısı Open key file Anahtar dosyasını aç All files Tüm dosyalar Error Hata x2goclient is running in portable mode. You should use a path on your usb device to be able to access your data whereever you are x2goclient taşınabilir kipte çalışıyor. İstediğiniz yerden verilerinize ulaşmak için usb aygıtınızın yolunu kullanmalısınız RDP port: RDP portu: Open picture Resmi aç Pictures Resimler Server: Sunucu: XDMCP server: XDMCP sunucusu: direct XDMCP connection rdesktop command line options: rdesktop komut satırı seçenekleri: New session Yeni oturum SettingsWidget &Display &Göster &Keyboard &Klavye Sound Ses &Clipboard Mode &Geçici Taşıma Panosu Kipi &Clipboard mode Fullscreen Tam Ekran Custom Özel Window Pencere Use whole display Tüm ekranı kullan Maximum available Kullanılabilir en fazla alan Set display DPI Görüntü DPI ayarla Xinerama extension (support for two or more physical displays) Xinerama eklentisi (iki veya daha fazla fiziksel ekran desteği) Width: Genişlik: Height: Yükseklik: &Display: &Ekran: &Identify all displays &Tüm ekranları tanımla Bidirectional copy and paste İki taraflı kopyalama ve yapıştırma Copy and paste from client to server İstemciden sunucuya kopyalayıp yapıştır Copy and paste from server to client Sunucudan istemciye kopyalayıp yapıştır Disable clipboard completely Geçici taşıma panosunu tamamen kapat Auto-detect keyboard settings RDP client FreeRDP/X11 (pre-2.x style options) FreeRDP/X11 (2.x style options) Auto detect keyboard settings Klavye ayarlarını otomatik algıla Do not configure keyboard Klavyeyi yapılandırma Configure keyboard Klavyeyi yapılandır Model: Model: Layout: Yerleşim düzeni: Variant: Varyant: Enable sound support Ses desteğini etkinleştir Start sound daemon Ses sürecini başlat Use running sound daemon Çalışan ses sürecini kullan Use SSH port forwarding to tunnel sound system connections through firewalls Güvenlik duvarları üzerinden ses sistemi bağlantılarını tünellemek için ssh port yönlendirmesini kullanın Use default sound port Varsayılan ses portunu kullan Sound port: Ses portu: Client side printing support İstemci tarafı yazdırma desteği RDP Client RDP İstemcisi Additional parameters: Ek parametreler: Command line: Komut satırı: XDMCP client us tr password parola ShareWidget &Folders &Klasörler Path Yol Automount Otomatik bağla Add Ekle Delete Sil Path: Yol: Filename encoding Dosya adı kodlaması local: yerel: remote: uzak: Use SSH port forwarding to tunnel file system connections through firewalls X2Go Client is running in portable mode. You should use a path on your USB device to be able to access your data wherever you are. Use ssh port forwarding to tunnel file system connections through firewalls Güvenlik duvarları üzerinden dosya sistemi bağlantılarını tünellemek için ssh port yönlendirmesini kullanın Select folder Klasör seçin Error Hata x2goclient is running in portable mode. You should use a path on your usb device to be able to access your data whereever you are x2goclient taşınabilir kipte çalışıyor. İstediğiniz yerden verilerinize ulaşmak için usb aygıtınızın yolunu kullanmalısınız WINDOWS-1252 WINDOWS-1252 ISO8859-1 ISO8859-1 SshMasterConnection Cannot connect to bağlanamıyor SSH proxy connection error. Failed to create SSH proxy tunnel. Cannot create SSH session. Using environment-provided username. Cannot connect to proxy server. Authentication failed. Failed to start SSH client. Please check your installation and GSSApi configuration. Check your GSSApi configuration or choose another authentication method. Reconnect session Cannot open file Cannot create remote file Cannot write to remote file %1 failed. Argument in this context will be a function name. %1 başarısız oldu. Error writing to socket. Error reading channel. Error reading from TCP socket. SSH proxy connection error SSH vekil sunucu bağlantı hatası SSH proxy connection error: SSH vekil sunucu bağlantı hatası: Failed to create SSH proxy tunnel SSH vekil tünel oluşturması başarısız oldu Can not initialize libssh Libssh başlatılamıyor Can not create ssh session Ssh oturumu başlatılamadı Can not connect to proxy server Vekil sunucuya bağlanılamıyor Can not connect to Bağlanamıyor Authentication failed Kimlik doğrulama başarısız Failed to start SSH Client. Please check your installation and GSSApi configuration SSH İstemcisi başlatılamadı. Lütfen kurulumunuzu ve GSSApi yapılandırmasını kontrol edin Check your GSSApi configuration or choose another authentication method GSSApi yapılandırmanızı veya kontrol edin veya başka bir kimlik doğrulaması yöntemi seçin Can not open file Dosya açılamıyor Can not create remote file Uzak dosya oluşturulamıyor Can not write to remote file Uzak dosyaya yazılamıyor channel_open_forward failed channel_open_forward başarısız oldu channel_open_session failed channel_open_session başarısız oldu channel_request_exec failed channel_request_exec başarısız oldu error writing to socket sokete yazarken hata error reading channel kanalı okurken hata channel_write failed channel_write başarısız oldu error reading tcp socket tcp soketi okunurken hata SshProcess Error creating socket Soket oluşturulurken hata Error creating socket. Error binding Bağlama hatası XSettingsWidget Open File Dosya Aç Executable (*.exe) Çalıştırılabilir (*.exe) XSettingsWidgetUI Form Biçim You must restart the X2Go Client for the changes to take effect Değişikliklerin etkin olması için X2Go İstemcisini tekrar başlatmalısınız use integrated X-Server tümleşik X-Sunucusunu kullan do not use primary clipboard birincil geçici taşıma panosunu kullanma use custom X-Server özel X-Sunucusunu kullan custom X-Server özel X-Sunucusu executable: çalıştırılabilir: start X-Server on X2Go Client start X2Go İstemcisi başladığında X-Sunucuyu başlat command line options: komut satırı seçenekleri: X-Server command line options X-Sunucusu komut satırı seçenekleri window mode: pencere kipi: fullscreen mode: tam ekran kipi: single application: tek uygulama: whole display: x2goclient-4.1.2.3/res/i18n/x2goclient_zh_tw.ts0000644000000000000000000060135314447111613016046 0ustar AppDialog Published Applications Search: &Start &Close Multimedia Development Education Game Graphics Network Office Settings 設定 System Utility Other BrokerPassDialogUi Dialog 對話框 Old password: 舊密碼: New password: 新密碼: Confirm password: 請再輸入一遍新密碼: TextLabel BrokerPassDlg Passwords do not match 密碼不相符 CUPSPrintWidget Form 表單 Name: 姓名: Properties 屬性 State: 狀態: Accepting jobs: 接收的工作: Type: 類別: Location: 位置: Comment: 註解: Idle 閒置 Printing 正在列印 Stopped 已停止 Yes No CUPSPrinterSettingsDialog No option selected 尚未選取任何選項 This value is in conflict with another option. Options conflict. This value is in conflict with other option 此設定值與其它選項衝突 Options conflict 選項衝突 ConTest Connectivity test 連線測式 HTTPS connection: 加密HTTP連線: SSH connection: SSH連線: Connection speed: 連線速度: Failed 失敗 0 Kb/s 0 Kb/s OK 確定 Socket operation timed out. Socket operation timed out 網路操作逾時 Failed: 失敗: ConfigDialog General 一般設定 Display icon in system tray 在系統狀態列中顯示圖示 Hide to system tray when minimized 最小化時縮至系統狀態列 Hide to system tray when closed 關閉時隱藏至系統狀態列 Hide to system tray after connection is established 連線建立後隱藏至系統狀態列 Restore from system tray after session is disconnected 當工作階段斷線後從系統狀態列中還原 Use LDAP 使用LDAP Server URL: 伺服器網址: BaseDN: Failover server 1 URL: 備援伺服器網1 網址: Failover server 2 URL: 備援伺服器網2 網址: X.Org Server settings PulseAudio settings Disable PulseAudio Disable sound input Your XQuartz version is too old. Your are using XQuartz (X Window System Server for OS X) version %1. This version causes problems with X applications in 24bit color mode. You should update your X11 environment. MacPorts users please follow the steps outlined on: <center><a href="https://guide.macports.org/chunked/using.common-tasks.html">https://guide.macports.org/chunked/using.common-tasks.html</a></center> Users who have installed XQuartz via the installer package can find updated versions on: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> No valid XQuartz application selected. You did not select a valid XQuartz application. Please try again. Some standard installation locations may be: <center><b>/Applications/Utilities/X11.app</b></center> <center><b>/Applications/Utilities/XQuartz.app</b></center> <center><b>/Applications/MacPorts/X11.app</b></center> X-Server settings X伺服器設定 X11 application: X11應用程式: X11 version: X11版本: Find X11 application 尋找X11應用程式 Clientside SSH port for file system export usage: 檔案系統匯出時用戶端所使用的SSH連接埠: Start session embedded inside website 將工作階段嵌入至網站內 Advanced options 進階選項 Defaults 預設 &OK 確定(&O) &Cancel 取消(&C) Settings 設定 Printing 列印功能 Warning 警告 x2goclient could not find any suitable X11 Application. Please install Apple X11 or select the path to the application X2Go用戶端無法找到合適的X11應用程式,請安裝Apple X11或是選擇應用程式的路徑 Your are using X11 (Apple X-Window Server) version 您正在使用X11(Apple X-Window 伺服器) 版本 . This version causes problems with X-application in 24bit color mode. You should update your X11 environment (http://trac.macosforge.org/projects/xquartz). . 此版本在24位元色彩模式時會有問題,請升級您的X11環境 (http://trac.macosforge.org/projects/xquartz). No suitable X11 application found in selected path 在您選擇的路徑中沒有合適的X11應用程式 &Connection 連線(&C) &Input/Output &Media &Settings 設定(&S) ConnectionWidget &Connection speed 連線速度(&C) Connection speed: 連線速度: C&ompression 壓縮(&o) Method: 方式: Compression method: 壓縮方式: Image quality: 影像品質: CupsPrinterSettingsDialog Dialog 對話框 General 一般設定 Page size: 頁面尺寸: Paper type: 紙張類型: Paper source: 紙張來源: Duplex Printing 雙面列印 None Long side 長邊翻轉 Short side 短邊翻轉 Driver settings 驅動程式設定 Option 選項 Value 數值 No option selected 目前沒有選取任何選項 text 文字 EditConnectionDialog &Session 工作階段(&S) &Connection 連線(&C) &Input/Output &Media &Shared folders 共享資料夾(&S) &OK 確定(&O) &Cancel 取消(&C) Defaults 預設值 Session preferences - 工作階段偏好設定 - ExportDialog &Cancel 取消(&C) &share 分享(&s) &Preferences ... 偏好設定(&P) ... &Custom folder ... 自訂資料夾(&C) ... Delete Delete 刪除 Share Folders share folders 共享資料夾 Select folder 選擇資料夾 FolderButton Sessions folder FolderExplorer Folders Create New Folder Rename Folder ... Change Icon ... Delete Folder ... Open picture 開啟圖片 Pictures 圖片 X2Go Client X2Go用戶端 Folder Name: Error 錯誤 Unable to remove " ". Folder is not empty. Please remove the contents of this directory and try again. Delete folder " New Folder Help Shows this message. Prints version information. Shows the changelog. Shows git information as used at compile time. [Deprecated: please use --version.] Shows available pack methods. Do not resume sessions automatically. Hides menu bar. Disables session editing. Starts maximized. Starts hidden (minimized to system tray where available.) Starts in "portable" mode. Forces OpenPGP smart card authentication. Disable PulseAudio. Disable sound input. Enables Xinerama by default. Allows client side printing in LDAP mode. Enables thinclient mode. Starts without a window manager. Enables shutdown button. Adds RSA key fingerprint to ".ssh/known_hosts" if authenticity of the server can't be determined. Starts with LDAP support. Example: --ldap=ldapserver:389:o=organization,c=de Defines the first LDAP failover server. Defines the second LDAP failover server. Defines the remote SSH server port. Default: 22. Defines the local machine's SSH server port. Needed for Client-Side Printing and File Sharing support. Default: 22. Sets the default command. Default: 'KDE' (Desktop Session) Starts the session named "session". Sets the user name for connecting to the remote SSH server to "username". Sets the default window geometry. Default: 800x600. Sets the remote X2Go Agent's DPI value to "dpi". Default: same as local display. Sets the default link type. Default: "adsl". Sets default pack method. Default: "16m-jpeg-9". Sets the default clipboard mode. Default: "both". Sets the default keyboard layout to "layout". "layout" may be a comma-separated list. Sets the default keyboard type. Sets the user's home directory. Enables or disables overwriting the current keyboard settings. Automatically launches the application(s) "app", "app2", ... on session start in Published Applications mode. Defines an alternative session config file path. Force-enables session system tray icon. Automatically closes X2Go Client after a disconnect. Hides all Folder-Sharing-related options. Sets the broker name to display in X2Go Client. This parameter is optional. Sets the path to an SSH key to use for authentication against an SSH session broker. The client's behavior is undefined if this flag is used for non-SSH session brokers. Enables the use of the default SSH key or SSH agent for authentication against an SSH session broker. The client's behavior is undefined if this flag is used for non-SSH session brokers. Does not ask for user credentials during session broker authentication. This can be useful if you are using an HTTP(S) session broker without authentication. If you run an HTTP(S) server without authentication, but with user-specific profiles, then put the user name into the broker URL (refer to --broker-url.) The user name then will be extracted from the broker URL and be sent to the session broker. The client's behavior is undefined if this flag is used for non-HTTP(S) session brokers. Use broker credentials as session user/password credentials when using broker mode with broker authentication. Currently only affects direct RDP sessions. Enables broker logout button. Use a custom/branded background image (SVG format) for X2Go Client's main window. If a directory is given, will randomly pick an SVG file inside of it. Use a custom icon (SVG format) for additional branding to replace the default in the lower left corner of X2Go Client's main window. Disables X2Go Client's UNIX cleanup helper. This will prevent X2Go Client from terminating spawned processes after the main program terminates or crashes. Use with care and when in doubt, do not use this parameter at all. HelpDialog Options 選項 HttpBrokerClient us us pc105/us pc105/us Error 錯誤 Login failed!<br>Please try again 登入失敗! <br>請再試一次 Your session was disconnected. To get access to your running session, please return to the login page or use the "reload" function of your browser. 您的工作階段已中斷連線。請返回登入畫面或是在瀏覽器中重新載入頁面以重新連回之前的工作階段。 Host key for server changed. It is now: 主機的SSH密鑰已經更換。 現在的密鑰為: For security reasons, connection will be stopped 由於安全性的考量,目前的連線已被中止 The host key for this server was not found but an othertype of key exists.An attacker might change the default server key toconfuse your client into thinking the key does not exist 目前沒有找到伺服器上的主機密鑰,不過有其它類型的密鑰存在。惡意的攻擊者可能會利用改變預設的伺服器密鑰來讓您的用戶端認為原本的密鑰並不存在 Could not find known host file.If you accept the host key here, the file will be automatically created 目前沒有發現已知的主機檔案。如果您接受目前的主機密鑰,這個檔案將會自動被建立。 The server is unknown. Do you trust the host key? Public key hash: 此為未知的伺服器,您要選擇信任此主機密鑰嗎? 此公開密鑰的雜湊值為: Host key verification failed 主機密鑰驗證任失敗 Yes No Verification code: Enter passphrase to decrypt a key <br><b>Server uses an invalid security certificate.</b><br><br> <br><b>伺服使器使用了不合法的安全憑證</b><br><br> <p style='background:#FFFFDC;'>You should not add an exception if you are using an internet connection that you do not trust completely or if you are not used to seeing a warning for this server.</p> For security reasons, the connection attempt will be aborted. The host key for this server was not found but another type of key exists. An attacker might have changed the default server key to trick your client into thinking the key does not exist yet. Could not find known hosts file. If you accept the host key here, the file will be automatically created. Host key verification failed. Enter user account password: Authentication failed. Login failed!<br>Please try again. Secure connection failed. Issued to: Common Name(CN) Organization(O) Organizational Unit(OU) Serial Number Issued by: Validity: Issued on expires on Fingerprints: SHA1 MD5 Exit X2Go Client Add exception InteractionDialog Terminal output: Cancel 取消 Reconnect 重新連線 MediaWidget Sound 聲音 Enable sound support 啟用音效支援 Start sound daemon 開啟聲音背景程式 Use running sound daemon 使用目前的音效背景程式 Use SSH port forwarding to tunnel sound system connections through firewalls 使用SSH連接埠轉送來建立 可通過防火牆的聲音通道 Use default sound port 使用預設的聲音連接埠 Sound port: 聲音連接埠: Client side printing support 用戶端列印支援 Deprecation Warning ARTS support is scheduled to be removed soon. Please upgrade to PulseAudio. ESounD support is scheduled to be removed soon. Please upgrade to PulseAudio. ONMainWindow us us pc105/us pc105/us X2Go Client X2Go用戶端 connecting 正在連線 Internet browser 網頁瀏覽器 Email client 電子郵件軟體 OpenOffice.org Terminal 終端機 &Settings ... 設定(&S) ... Support ... 支援 ... About X2GO client 關於X2GO用戶端 Can't load translator: Translator: Share folder... 共享資料夾... Suspend 暫停 Terminate 終止 Reconnect 重新連線 Detach X2Go window 脫離X2Go視窗 Minimize toolbar 將工具列最小化 Session: 工作階段: &Quit 離開(&Q) Ctrl+Q Quit 離開 &New session ... 新增工作階段(&N) ... Ctrl+N Session management... 工作階段管理員... Ctrl+E &Create session icon on desktop... 在桌面上建立工作階段圖示(&C)... &Set broker password... 設定代理伺服器密碼(&S)... &Connectivity test... 連線能力測試(&C)... Show toolbar 顯示工具列 About Qt 關於Qt &Session 工作階段(&S) &Options 選項(&O) &Help 幫助(&H) Login: 登入: Error 錯誤 Operation failed 更改密碼失敗 Password changed 密碼已更改成功 Wrong password! 輸入了錯誤的密碼! Connecting to broker 連線至連線代理伺服器 <b>Authentication</b> <b>身份驗證</b> Restore 還原 Not connected 尚未連線 Multimedia Development Education Game Graphics Network Office Settings 設定 System Utility Other Left mouse button to hide/restore - Right mouse button to display context menu 按滑鼠左鍵以隱藏或還原視窗, 右鍵顯示選單 Please check LDAP settings 請確認LDAP的設定 no X2Go server found in LDAP 在LDAP環境中沒有找到X2Go伺服器 Create session icon on desktop 在桌面上建立工作階段圖示 Desktop icons can be configured not to show x2goclient (hidden mode). If you like to use this feature you'll need to configure login by a gpg key or gpg smart card. Use x2goclient hidden mode? 桌面圖示可以被設定為不顯示X2Go用戶端的模式(隱藏模式)。如果您想要使用隱藏模式,您必需要將登入方式設定成使用GPG金匙或是GPG IC智慧卡。 是否要使用X2Go用戶端的隱藏模式? New Session 新的工作階段 X2Go Link to session X2Go工作階段的連結 No X2Go sessions found, closing. You have enabled Remote Printing or File Sharing. These features require a running and functioning SSH server on your computer. <b>Printing and File Sharing will be disabled for this session.</b> Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server. If you see this message, please report a bug on: The SSH server failed to start. Please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> Normally, this should not happen as X2Go Client for Windows ships its own internal SSH server and automatically generates the required keys. If you see this message, please report a bug on: X2Go Client was unable to create SSH host keys. Please report a bug on: SSH Error SSH daemon failed to open the application's public key used for exporting folders and printers. X2Go sessions not found 無法找到X2Go的工作 Are you sure you want to delete this session? 您確定要刪除此工作階段嗎? KDE RDP connection RDP連線 XDMCP Connection to local desktop 連線至本地桌面 on Starting connection to server: Enter passphrase to decrypt a key Host key for server changed. It is now: 主機的SSH密鑰已經更換。 現在的密鑰為: For security reasons, connection will be stopped 由於安全性的考量,目前的連線已被中止 The host key for this server was not found but an othertype of key exists.An attacker might change the default server key toconfuse your client into thinking the key does not exist 目前沒有找到伺服器上的主機密鑰,不過有其它類型的密鑰存在。惡意的攻擊者可能會利用改變預設的伺服器密鑰來讓您的用戶端認為原本的密鑰並不存在 Could not find known host file.If you accept the host key here, the file will be automatically created 目前沒有發現已知的主機檔案。如果您接受目前的主機密鑰,這個檔案將會自動被建立。 The server is unknown. Do you trust the host key? Public key hash: 此為未知的伺服器,您要選擇信任此主機密鑰嗎? 此公開密鑰的雜湊值為: Host key verification failed 主機密鑰驗證任失敗 Verification code: Yes No If you accept the new host key the security of your connection may be compromised. Do you want to update the host key? Authentication failed: Authentication failed 認證失敗 Enter password for SSH proxy <b>Connection failed</b> <b>連線失敗</b> <b>Wrong password!</b><br><br> <b>不正確的密碼!</b><br><br> Connection failed: - Wrong password. unknown 未知 No server availabel 伺服器不存在l Server not availabel 伺服器不存在| Select session: 請選擇工作階段: running 正在執行中 suspended 已暫停 Desktop 桌面 single application 單一的應用程式 shadow session Information 資訊 No accessible desktop found 目前沒有找到可訪問的工作桌面 Filter 篩選器 Select desktop: 請選擇工作桌面: Warning 警告 Your current color depth is different to the color depth of your x2go-session. This may cause problems reconnecting to this session and in most cases <b>you will loose the session</b> and have to start a new one! It's highly recommended to change the color depth of your Display to 您目前使用與x2go工作階段不同的色彩設定。可能會造成連線的不穩定,並且很可能會喪失目前的工作階段。強烈建議先將目前使用的色彩設定設為 24 or 32 24或32 bit and restart your X-server before you reconnect to this x2go-session.<br>Resume this session anyway? 位元並且重新啟動X-server,之後再重新連接這一個工作階段。<br>請問您無論如何都要恢復此工作階段的連線嗎? suspending 正在暫停工作中 terminating 正在中止工作中 <b>Wrong Password!</b><br><br> <b>不正確的密碼!</b><br><br> New session started Session resumed Unable to create folder: Unable to write file: Emergency exit. Waiting for proxy to exit. Wrong parameter: Help Changelog Git Info Unable to create folder: 無法創建資料夾: Unable to write file: 檔案無法寫入: Attach X2Go window 連接X2Go視窗 Unable to create SSL tunnel: 無法建立SSL通道: Unable to create SSL Tunnel: 無法建立SSL通道: Finished 已完成 starting 正在開始 resuming 正在還原 Connection timeout, aborting 連線超時,中止中 aborting 中止中 Are you sure you want to terminate this session? Unsaved documents will be lost 您確定要終止目前的工作階段嗎? 所有未存檔的資料都將會遺失 Session 工作階段 Display 顯示 Creation time 創建時間 <b>Connection failed</b> : <b>連線失敗</b> : (can't open file) (無法開啟檔案) (file not exists) (檔案不存在) (directory not exists) (目錄不存在) wrong value for argument"--link" "--link"參數的值錯誤 wrong value for argument"--sound" "--sound"參數的值錯誤 wrong value for argument"--geometry" "--geometry"參數的值錯誤 wrong value for argument"--set-kbd" "--set-kbd"參數的值錯誤 wrong value for argument"--ldap" "--ldap"參數的值錯誤 wrong value for argument"--ldap1" "--ldap1"參數的值錯誤 wrong value for argument"--ldap2" "--ldap2"參數的值錯誤 wrong value for argument"--pack" "--pack"參數的值錯誤 wrong parameter: 錯誤的參數: Options 選項 Available pack methodes: 可用的包裝方法: Support 支援 <br>x2goplugin mode was sponsored by <a href="http://www.foss-group.de/">FOSS-Group GmbH(Freiburg)</a><br> <br>x2goplugin mode是由 <a href="http://www.foss-group.de/">FOSS-Group GmbH(Freiburg)</a>提供贊助<br> <b>X2Go Client V. <b>X2Go 客戶端 V. Please check LDAP Settings 請檢查LDAP的設定 No valid card found 沒有發現合法的卡片 Card not configured. This card is unknown by X2Go system X2Go系統無法辨識此張卡片 Unable to create file: 檔案無法創建: Can't connect to X-Server 無法連接至X伺服器 Can't connect to X server Please check your settings Can't connect to X-Server Please check your settings 無法連接至X伺服器 請檢查您的設定值 Can't start X Server Please check your settings 無法啟動X伺服器 請檢查您的設定值 Can't start X Server Please check your installation 無法啟動X伺服器 請檢查X伺服器安是否有安裝正確 Unable to execute: 無法執行: Remote server does not support file system export through SSH Tunnel Please update to a newer x2goserver package 遠端伺服器無法支援SSH通道型式的共用檔案系統,請升級至較新的X2Go伺服器板本 Unable to read : 無法讀取: Unable to write : 無法寫入: WINDOWS-1252 ISO8859-1 X2Go Session X2Go工作階段 wrong value for argument"speed" 錯誤的"speed"參數值 Password: 密碼: Keyboard layout: 鑑盤佈局: Ok 確定 Cancel 取消 <b>Session ID:<br>Server:<br>Username:<br>Display:<br>Creation time:<br>Status:</b> <b>工作階段識別碼:<br>伺服器:<br>使用者名稱:<br>顯示:<br>創建時間:<br>狀態:</b> Starting X2Go Client %1... Starting X2Go Client in portable mode. Data directory is: About X2Go Client Started X2Go Client. found. Non-fatal: can't load translator: Trying to load language with lower preference, if existent. Session management ... &Create session icon on desktop ... &Set broker password ... &Connectivity test ... Share folder ... A click displays the context menu. A left click hides or restores the window. A right click displays the context menu. Closing X2Go Client ... Finished X2Go Client closing hooks. Broker authentication failed! no X2Go Server found in LDAP Connection error: Couldn't find an SSH connection. Enter user account password: This can be an indication of a man-in-the-middle attack. Somebody might be eavesdropping on you. For security reasons, it is recommended to stop the connection attempt. Do you want to terminate the connection? Host key verification failed. The host key for this server was not found but another type of key exists. An attacker might have changed the default server key to trick your client into thinking the key does not exist yet. For security reasons, it is recommended to stop the connection attempt. Do you want to terminate the connection? Could not find known hosts file. If you accept the host key here, the file will be automatically created. Authentication failed. XDM RDP <b>Connection failed.</b> No server available. Server not available. X2GoKDrive session No accessible desktop found. PulseAudio is not running Sound output will be disabled for this session. Please enable PulseAudio in the configuration dialog or disable sound in the session settings Unable to create SSH tunnel for X2Go session (NX) startup: Unable to create SSH tunnel for audio data: failed to start. This likely means the binary is not available. The current search path is: returned a non-zero exit code or crashed otherwise. Execution failed, exit code was: didn't start up in time. This error shouldn't come up. didn't accept a write operation. It is probably not running correctly or crashed in-between. Unable to read from xmodmap. encountered an unknown error during start up or execution. experienced an undefined error. X2Go Client will now terminate. File a bug report as outlined on the <a href="http://wiki.x2go.org/doku.php/wiki:bugs">bugs wiki page</a>. Failed to start RDP or XDMCP client Check session settings and ensure that selected client is installed on your system. Proxy didn't terminate after 3 seconds. Killing the proxy. Closing X2Go Client because it was started in hidden mode. Closing X2Go Client because the --close-disconnect parameter was passed. Are you sure you want to terminate this session? Unsaved documents will be lost. <b>Connection failed.</b> : (file does not exist) (directory does not exist) Invalid value for parameter "--link". Invalid value for parameter "--clipboard". Invalid value for parameter "--sound". Invalid value for parameter "--geometry". Invalid value for parameter "--set-kbd". Invalid value for parameter "--ldap". Invalid value for parameter "--ldap1". Invalid value for parameter "--ldap2". Invalid value for parameter "--pack". Available pack methods: Pack Methods Option is not available in this build. Unable to create directory: <br>(C) 2005-2023 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br> Translators, feel free to add a localized version of your translation including a copyright notice and your name(s). Remember to keep a <br> at the end, though. English example for a potential translation: <br>(C) 2005-2023 by <b>obviously nice</b>: Oleksandr Shneyder, Heinz-Markus Graesing<br>English version: (C) 20AB-20CD Trans Lator <trans@la.tor><br> Check whether the package providing "pcsc_scan" is installed. The current search path is: Unable to create or append to file: Unable to change the permissions of file: This is an error because sshd would deny such a file. Unable to change the permissions of directory: This is an error because sshd would deny such a directory. Can't start X.Org Server. Please check your installation. X.Org Server did not launch correctly after %n tries. %n will be substituted with the current number of tries Unable to find the sftp-server binary. Neither bundled, nor found in $PATH nor additional directories. If you are using a Linux-based operating system, please ask your system administrator to install the package containing the sftp-server binary. Common names are <b>openssh</b>, <b>openssh-server</b> or <b>openssh-sftp-server</b> depending upon distribution. If the sftp-server binary is installed on your system, please report a bug mentioning its path on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> SSH key type selection error Unknown SSH key selected. Terminating application. SSH key base directory creation error Unable to create SSH key base directory '%1'. ssh-keygen launching error Unable to start the ssh-keygen binary. ssh-keygen crashed The ssh-keygen binary crashed. ssh-keygen program error The ssh-keygen binary did not exit cleanly. It was probably called with unknown arguments. Unable to open newly generated %1 public host key file. %1 public host key file empty. Cannot open key: libssh initialization failure Unable to initialize libssh. Your current color depth is different from the session's color depth. This may cause problems reconnecting to this session and in most cases <b>you will lose the session</b> and have to start a new one! It's highly recommended to change the color depth of your display to %n bit(s) and restart your X.Org Server before you reconnect to this X2Go session. %n will be replaced with a number <br />Do you want to resume this session anyway? <br>This is a client to access the X2Go network-based computing environment. This client will be able to connect to X2Go Server(s) and start, stop, resume and terminate (running) desktop sessions. X2Go Client stores different server connections and may automatically request authentication data from LDAP directories. Furthermore, it can be used as a fullscreen login screen (replacement for login managers like XDM). Please visit <a href="http://www.x2go.org">the project home page at x2go.org</a> for further information. <b>X2Go Client v. Please check LDAP Settings. didn't start yet. Unable to read from scdaemon. No valid card found. This card is unknown to the X2Go system. Can't start X.Org Server. Please check your installation. Remote server does not support file system exports through SSH tunnels. Please update your x2goserver package. Unable to create SSH tunnel for Folder Sharing and Printing support: Unable to read: Error getting window geometry. (Did you close the window?) Invalid value for argument "speed" Applications ... Abort 退出 Show details 顯示細節 Resume 恢復 New 新增 Full access 完全存取 View only 僅查看 Status 狀態 Command 指令 Type 型態 Server 伺服器 Client IP 客戶端IP Session ID 工作階段識別碼 User 使用者 Only my desktops 只選擇我的桌面 SSH daemon could not be started. Disabling Remote Printing or File Sharing support in the session settings will get rid of this message. SSH daemon failed to open its public host key. SSH daemon failed to open the application's authorized_keys file. sshd not started, you'll need sshd for printing and file sharing you can install sshd with <b>sudo apt-get install openssh-server</b> SSH伺服器沒有執行起來,遠端列印與檔案共享功能需要先安裝SSH伺服器 您可以使用下列指令來安裝SSH伺服器: <b>sudo apt-get install openssh-server</b> Restore toolbar 還原工具列 <br><b>&nbsp;&nbsp;&nbsp;Click this button&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;to restore toolbar&nbsp;&nbsp;&nbsp;</b><br> <br><b>&nbsp;&nbsp;&nbsp;按此按鈕&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;還原工具列&nbsp;&nbsp;&nbsp;</b><br> Invalid reply from broker 代理伺服器的回應不合法 PrintDialog Print - X2Go Client 列印 - X2Go用戶端 Print 列印 You've deactivated the X2Go Client printing dialog. You may reactivate this dialog using the X2Go Client settings dialog. To do so, follow this path in the menu bar: Options -> Settings You've deactivated the x2go client printing dialog. 您已經停用X2Go用戶端的列印對話框 You may reactivate this dialog using the x2goclient settings dialog (Menu -> Options -> Settings) 您可能需要於X2Go用戶端的設定對話框中(選單 -> 選項 -> 設定)重新啟用這個對話框 PrintProcess Save File 儲存檔案 PDF Document (*.pdf) PDF文件 (*.pdf) Failed to execute command: 執行命令失敗: Printing error. Printing error 列印錯誤 PrintWidget Form 表單 Print 列印 View as PDF 以PDF格式查看 Print settings 列印設定 Printer: 印表機: Print using default Windows PDF Viewer (Viewer application needs to be installed) 以預設的Windows PDF閱讀器列印(必需要安裝閱讀器) Printer command: 印表機指令: ... Viewer settings 閱讀器設定 Open in viewer application 在閱讀器程式裡開啟 Command: 指令: Save to disk 儲存到磁碟裡 Show this dialog before start printing 開始列印前先顯示此對話框 Please configure your client side printing settings.<br><br>If you want to print the created file, you'll need an external application. Typically you can use <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> and <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>You can find further information <a href="http://www.x2go.org/index.php?id=49">here</a>. 請設定您的客戶端列印設定<br><br>您會需要一個外部的程式來進行列印工作,您可以使用 <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> 以及 <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>如需進一步的資訊,請參考 <a href="http://www.x2go.org/index.php?id=49">這個網址</a>. Please configure your client side printing settings.<br><br>If you want to print the created file, you'll need an external application. Typically you can use <a href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm">ghostprint</a> and <a href="http://pages.cs.wisc.edu/~ghost/gsview/">ghostview</a><br>You can find further information <a href="http://www.x2go.org/index.php?id=49">here</a>. PrinterCmdDialog Printer command 印表機指令 Command 指令 Please enter your customized or individual printing command. Examples: kprinter lpr -P hp_laserjet 請輸入您自定的列印指令。 例如: kprinter lpr -P hp_laserjet Output format 輸出格式 Please choose the printing file format (regarding to your printing environment - if you use CUPS you may use PDF) 請選擇您要輸出的檔案格式 (如果您是使用CUPS列印服務,您可能是使用PDF) PDF PS Data structure 數據結構 Please choose the method of printing file input (some commands accepting printing files as program options, some are awaiting data on standard input): 請選擇列印資料的輸入方式: standard input (STDIN) 標準輸入 (STDIN) Specify path as program parameter 指定一個路徑做為程式的參數 Please enter your customized or individual printing command. Example: 請輸入您自定的列印指令 範例: <Path to gsprint.exe> -query -color <Path to gsprint.exe> -query -color PulseManager Could not allocate buffer for getting current working directory! getcwd() failed! PulseAudio failed to start! Error fetching PulseAudio version number! Unexpected character found when parsing version string for major version number Unexpected character found when parsing version string for minor version number Unexpected character found when parsing version string for micro version number Supposed to skip major version number. Something is wrong. Unable to convert major version number string to integer. Unable to convert minor version number string to integer. Unable to convert micro version number string to integer. Unexpected format encountered. Unable to start PulseAudio binary. Unable to play startup sound. Sound support will not be available. If you downloaded the bundled, pre-compiled version from the official home page or the upstream Linux packages, please report a bug on: <center><a href="https://wiki.x2go.org/doku.php/wiki:bugs">https://wiki.x2go.org/doku.php/wiki:bugs</a></center> QObject No response received from the remote server. Do you want to terminate the current session? X2Go Client could not find any suitable X11 server. X2Go Client could not start X11 server. X2Go Client requires XQuartz to be installed. If XQuartz is already installed on your system, please select the correct path in the now upcoming dialog. Refer to the end of this message for path examples, in case you do not know the exact location yourself. Should you have <b>not</b> installed XQuartz yet, please follow the outlined steps: MacPorts users, please install either the port <b>xorg-server</b> or the port <b>xorg-server-devel</b>. Upon successful installation, please follow the instructions printed by the port utility to autostart/load the server. All other users, please obtain and install XQuartz from: <center><a href="https://www.xquartz.org/">https://www.xquartz.org/</a></center> Afterwards, restart X2Go Client and select the correct path to the X11 application in the general X2Go Client settings. This will most likely be <center><b>/Applications/MacPorts/X11.app</b></center> or <center><b>/Applications/Utilities/XQuartz.app</b></center> SessionButton Session preferences... 工作階段偏好設定... Create session icon on desktop... 在桌面上建立工作階段圖示 Session preferences ... Create session icon on desktop ... Delete session 刪除工作階段 Session actions 工作階段動作 Select type 選擇類型 Select resolution 選擇解析度 Toggle sound support 切換聲音支援 New Session 新工作階段 running 執行中 suspended 已暫停 KDE RDP connection RDP連線 XDMCP Connection to local desktop 連線至本地桌面 Published applications fullscreen 全螢幕 Display 顯示 window 視窗 Maximum Enabled 啟用 Disabled 停用 SessionExplorer Back Create session icon on desktop 在桌面上建立工作階段圖示 Desktop icons can be configured not to show x2goclient (hidden mode). If you like to use this feature you'll need to configure login by a gpg key or gpg smart card. Use x2goclient hidden mode? 桌面圖示可以被設定為不顯示X2Go用戶端的模式(隱藏模式)。如果您想要使用隱藏模式,您必需要將登入方式設定成使用GPG金匙或是GPG IC智慧卡。 是否要使用X2Go用戶端的隱藏模式? Create session icon on desktop. Desktop icons can be configured not to show X2Go Client (hidden mode.) If you like to use this feature you'll need to configure login via a GPG key or GPG Smart Card. Use X2Go Client's hidden mode? Show session tray icon when running New Session X2Go Link to session X2Go工作階段的連結 Are you sure you want to delete this session? 您確定要刪除此工作階段嗎? SessionManageDialog E&xit 離開(&x) &New session 建立新的工作階段(&N) &Session preferences 工作階段偏好設定(&S) &Delete session 刪除工作階段(&D) &Create session icon on desktop ... &Create session icon on desktop... 在桌面上建立工作階段圖示(&C)... Delete Delete 刪除 Session management 管理工作階段 SessionWidget Session name: 工作階段名稱: << change icon << 更換圖示 Path: 路徑: &Server 伺服器(&S) Values ranging from <b>0</b> to <b>65535</b> are allowed.<br />A value of <b>0</b> will either use the port specified in the SSH configuration file belonging to a host or shortname, or use the default of <b>22</b>. Host: 主機: Login: 登入帳號: SSH port: SSH連接埠: Use RSA/DSA key for ssh connection: 使用RSA/DSA密鑰於SSH連線: Try auto login (ssh-agent or default ssh key) 嘗試自動登入 (ssh代理或預設SSH密鑰) Kerberos 5 (GSSAPI) authentication Kerberos 5 (GSSAPI) 認證 Delegation of GSSAPI credentials to the server Use Proxy server for SSH connection Proxy server SSH HTTP Same login as on X2Go Server Same password as on X2Go Server RSA/DSA key: Run in X2GoKDrive (experimental) X2Go/X11 Desktop Sharing X2Go Client is running in portable mode. You should use a path on your USB device to be able to access your data wherever you are. Type: 類別: Port: &Session type 工作階段類型(&S) Session type: 工作階段類型: Connect to Windows terminal server 連線至微軟終端伺服器 XDMCP Connect to local desktop 連線至本地桌面 Custom desktop 自訂桌面類型 Single application 單一應用程式 Published applications Command: 指令: Advanced options... 進階設定... Path to executable 執行路徑 Direct XDMCP connection RDP port: Open picture 開啟圖片 Pictures 圖片 Open key file 開啟密鑰檔案 Try auto login (via SSH Agent or default SSH key) SSH Agent or default SSH key Connect to Windows Terminal Server Direct RDP connection All files 所有檔案 Error 錯誤 x2goclient is running in portable mode. You should use a path on your usb device to be able to access your data whereever you are X2Go用戶端目前為可攜式模式,您應該要使用您的USB裝置的路徑來存取您的資料 Server: 伺服器: XDMCP server: XDMCP 伺服器: direct XDMCP connection rdesktop command line options: rdesktop 指令選項: New session 新的工作階段 SettingsWidget &Display 顯示(&D) &Keyboard 鍵盤(&K) Sound 聲音 Bidirectional copy and paste Copy and paste from client to server Copy and paste from server to client Disable clipboard completely Do not configure keyboard Configure keyboard Model: Layout: Variant: &Clipboard mode Fullscreen 全螢幕 Custom 自定 Window 視窗 Use whole display 使用整個顯示器 Maximum available Set display DPI 設定顯示DPI Xinerama extension (support for two or more physical displays) Xinerama延伸功能(支援兩個以上的螢幕) Width: 寬度: Height: 高度: &Display: 顯示器(&D): &Identify all displays 辨認所有顯示器(&I) Auto-detect keyboard settings RDP client FreeRDP/X11 (pre-2.x style options) FreeRDP/X11 (2.x style options) Keep current keyboard Settings 保持目前的鍵盤設定 Keyboard layout: 鍵盤佈局: Keyboard model: 鍵盤型號: Enable sound support 啟用音效支援 Start sound daemon 開啟聲音背景程式 Use running sound daemon 使用目前的音效背景程式 Use SSH port forwarding to tunnel sound system connections through firewalls 使用SSH連接埠轉送來建立 可通過防火牆的聲音通道 Use default sound port 使用預設的聲音連接埠 Sound port: 聲音連接埠: Client side printing support 用戶端列印支援 Additional parameters: Command line: XDMCP client us us pc105/us pc105/us password ShareWidget &Folders 資料夾(&F) Path 路徑 Automount 自動掛載 Add 新增 Delete 刪除 Path: 路徑: Filename encoding 檔案編碼方式 local: 本地端: remote: 遠端: Use SSH port forwarding to tunnel file system connections through firewalls X2Go Client is running in portable mode. You should use a path on your USB device to be able to access your data wherever you are. Use ssh port forwarding to tunnel file system connections through firewalls 使用SSH連接埠轉送來建立可通過防火牆的檔案系統通道 Select folder 選擇資料夾 Error 錯誤 x2goclient is running in portable mode. You should use a path on your usb device to be able to access your data whereever you are X2Go用戶端目前為可攜式模式,您應該要使用您的USB裝置的路徑來存取您的資料 WINDOWS-1252 ISO8859-1 SshMasterConnection SSH proxy connection error. SSH proxy connection error: Failed to create SSH proxy tunnel. Cannot create SSH session. Using environment-provided username. Cannot connect to proxy server. Authentication failed. Failed to start SSH client. Please check your installation and GSSApi configuration. Check your GSSApi configuration or choose another authentication method. Reconnect session Cannot open file Cannot create remote file Cannot write to remote file %1 failed. Argument in this context will be a function name. %1失敗, Error writing to socket. Error reading channel. Error reading from TCP socket. Can not initialize libssh libssh無法初始化 Can not create ssh session 無法建立SSH工作階段 Can not connect to 無法連線至 Authentication failed 驗證失敗 channel_forward_listen failed channel_forward_listen失敗 Can not open file 無法開啟檔案 Can not create remote file 無法創建遠端檔案 Can not write to remote file 無法寫入資料至遠端檔案 Cannot connect to 無法連線至 channel_open_forward failed channel_open_forward失敗 channel_open_session failed channel_open_session失敗 channel_request_exec failed channel_request_exec失敗 SshProcess Error creating socket. Error binding XSettingsWidget Open File 開啟檔案 Executable (*.exe) 執行檔 (*.exe) XSettingsWidgetUI Form 表單 You must restart the X2Go Client for the changes to take effect You must restart the X2go Client for the changes to take effect 您必需重新啟動X2Go用戶端以讓設定變更生效 use integrated X-Server 使用內建的X伺服器 do not use primary clipboard use custom X-Server 使用自定的X伺服器 custom X-Server 自定X伺服器 executable: 執行路徑: start X-Server on X2Go Client start 當X2Go用戶端啟動時啟動X伺服器 command line options: 指令列選項: X-Server command line options X伺服器指令列選項 window mode: 視窗模式: fullscreen mode: 全螢幕模式: single application: 單一應用程式: whole display: x2goclient-4.1.2.3/res/img/icons/128x128/audio.png0000644000000000000000000001215514447111614016056 0ustar PNG  IHDR>asBIT|d pHYs7]7]F]tEXtSoftwarewww.inkscape.org<IDATx{՝?M<a`@Fkx"BP &G1&1ٸnQc̖{QFݜĄq<FyL0 00<TOv鮾zz9OWU[q _r݀r9 s( Q @cH0ؠV u@ p hfR[ o%.8 x4T϶yAH|wS|6OuFiR`90)b^1 ,pDItk,_~5 5O2zAӭ_ hjK - tz`|4ݚܟB 4zx(qS&c`q kV4׹nK"MCi-4*Xn}&vܫֲl K ֽ#~UQ0uaWhlPI}S8~:ED'04who2n-VAup|u^7Fxv t\hjN+h5x嶎++ŕ8r2o絭_jzR'$<%nϪ-@0~m,K/*-Ąo ֗gݔ]zQ9^SE *O 'e3LCz VxMٛ;KGeeF|/n4ݺpu7 -GS^zJ?~A`6V0iPQFŜ?MV`Z)k?L$VEnt߀d|]H|DLAXx72rtvDȴaJMQt> .}deH@ӭRg ~"@,ߦ\1R7/߿ M~YVxڗ0kgUlP-".VK6f\TPw/,oH)Y] <3`jO!1XggJ RQ*UAa$^N_/T:`(̛*d4@H'U1XF&`EQL(u)`d,6W@8X)Ew2},tQnMV )s%:3N_ hB:Pӭ pyE!K͠W: kRjoKrEN"9n 38vvsRkT`R=0[CRFӺ.~WB)zwQ^}ROB]u10K IKuLXVB]PtK(@D"EpŹ.?uՃ[c/^Dp~?w"rS8{tX4h7ݷ!ʊ%ZȲ C?! ݄Aw6ݩpn0N3q8(cR*˲7Ҩ̦4pipF"?8D{nog y;})b3n+R M㬑#q)I>:Xm<';8/ܕ\AP[HMJ1Wo_:c؆wZ~MYMܿ1x# I(0݋lr 7˵'+oEfoH8-|m:j#-#LUE wNv`Ve (g gݴ$%() z9tBHctE/17>gG@ -|q%htl@ (WdL > X+۷;*gAtCl~WϦL}V*<Ştnt ,hi~JU:{)nȤG#\AT,:ohS :;FƱ>o#t#MӮzl(1W/8%C0EG/S~5% pڃE#(_/kO>xM!JMLGq*JⴴK7o3r v !{Esy9dd"@ QȬґZ6F'T Qi[9&l8B&g АEťcZ{c԰H]NQ-Rv70" \= Sx&@ʤ]Q4%,JC$=i4@{$P0"sxb]h,5 J۵.&VkWL8ٛHdg&#D(7\쨓pM(o8&`EKY `2?QP3C|"9AөFi;4T0LJȞ|D2Mb\0>Fy1LĒ ZW1iai0rةq6!m  3=b(, {=oI}VJ D8&U={3R:h[)M"{5C@ ׻!lX"HoJ;P߬0sBPQ&: d47™3t^gl  `M"HɤF}vD0&z98@[*%3GNQۃP{b\|QlbL2k2g!l3lvqj?ng65-jbM,€%@LC}4b{]- $Oyaө;:dl:PifĀ'@LC]b~85 r#jw3(:c*sPLnPG1hnRE|㫚9(~K^e* h5h5 5td^h,Nx^Ay*wP@nGke4w8w.M<\3f~BT& LC¥1LC= ,3mIpie[Pޚt-&/g$HF1 uw ,4ݚn\į5@1o}T0 u ƒ5(6Z;  -4Z ,ǎ=^1 5XYGHJrp'0ŧj~ioTk Mޘf_!l')P-?H"f9؁&øc\E{3@asBIT|d pHYs7]7]F]tEXtSoftwarewww.inkscape.org<pIDATx{UǿVL1y$1vŰ&AwE݇JCxȊC`?.Tɂ] L<{2TUOuuOOwMLtIG{S{DkMKo%L]Dxu{)}$[NШ͇9TVEHniC|SCso4 }[=!DH$7EGܼRdg 672gܲy\olP:м\ubo{ɍ̕ ӴeCC#Yx:o Z)FR_W#XTQUWUu5QE&"Q5QKp"zPO"J)%"j0)|$m܈[RƘOl_ aˇ'Ωg9w9Km&^c \d襷.HsQ %3'GYu -~.yp{D lpͭ=mhI}~ ռv }a"`h:e$~vRs[.UfohQ9|H"&ڣ/$>4?F1ysڂzOI0~8L!G_z{ r1}賀[b9K[Q}b ' 0pq̘:Mq͍n}}J":sW8Gª2&톏А> nzVjʘ A6T0|`^s '͋g)HB]]&K`( qjlF.ʌ v^SGE7 JC+/gi/ј'q6p>{h߸~i]|L<'j7_us~3aKUXDfέs'-:Sj ;|Xqdc*M{6M**Όݫ1~&ǖ,[+:@iwvc7?Ք!!e|XAxnou9di+VJ}?WAgb%KYk J7gTwF<_h,c \~xNMS,}\r)6WmlCqG''vo_@i|cY t:cZcXF~ΓP~geƲl،x <=뀙w (jI#ӯ䮧? YOyuJ$>1gM9uh^}dm[O߰:et7dJ1A:yuWڻYQ;7ι2ZunE` LXD͌ɠyA}Ԗ׾Ǒ>o+yi|.Yk"b|m xmqezӯ̻-M:,M&6lkO$_r*#rT0yzMser/WhUZ47.5F8~fȏkΝ҅ a^x=irѲ:F1`~y4 s3'd&hW [\;̊p1q<_gM |Ղc:'lK$n9aM9"5Zn 2f6YLEcYySr ANL>^}+A c6@iK|ISǮ&wtzGwƻ=iCXWS߰%%2+J˛;lۛ&h|l`܋o控vNZCǏ7gÅ#/jiCvh?I*~7C`w]9Kuh}.OO^Oˤheqa{m`&`S|BO < d Tϝ^uVt[©9O_ȷnOz]ňDŽc饫|YmGY 3%J^jw4|w8(M@O c.= T3 rL=W.i̖tcC=<1uSRL0YH9= e|/G4k4RoAHY}I1hӘ ǵs&bQ ߸/|cݒ;vƻ>KnK`*~xå*MƲ>_^{+Jz> 1b7fN޶V_SW/yvEKg XgB1xam6ˀ}_|;;zmywqkM$4 X2AWu _N`}RMvGs:w>!mѠ,]6:@:̟/Wt5-QQl7]ïwե׷,Ym'Ge@2ٔ9k>| gjt%p.CAW3u+fo=z8 -N O|{ɿ4 /„:gX}uj1q5i ByO$7FDf,p&ȶh'\p{ gXe(rc~PȠ*UAug_@A*`4aH{/ m_@=j %V8?@%U%pT Wp%{&:)T*?^%@0յGUT8y}cun3>lUdbz%u;,zRh4M"WM+V9#Q+Z0ZTr۸l_Ggh$RH 7@Z#݁#I,U/=\Hwn!XYgKƬr&R(^=6 s πib-~$A%!}0XuD{KsxHI1>ʗ^p*X4J[ T%?<;S{E4)`d4J`:6mʙkuW{8N/fY#: gm/`x#͜)PbDžN i`1 ;#8C@] "(GIHi{JYyJ#r ̔ˍH,G$mU%`acy :" Z)tHŪ#Dy h[ LR,r jkΥ#MRbfJ;xrP^oP(u{}yB'9,HGb1- "!8Dؖb$KXڔzI~;@8ְC-fjJx4u! 2P̲FRC |4*-O3R q*pyÅr`IU@yt`a!R)QlVhJb"Y{\|;ŕ;JY;B*DRa&p5Z t%F/JF,A !)KQ͡-'F*Kq A28XxT:JB Gc ,|sh!yGK )KGG P `AaM{Al-0;4˕aI RJ/K8_B 4Y@X @R^O2.Z T墉l D@CcP!G8T^l*UaJ *UB 8[@RvW1)w{AhTJE-e}2F kPIp+(2B(C"Up9+HݾVfirΧntEe̒\Zn(qCZ)j~cktO)asBIT|d pHYs7]7]F]tEXtSoftwarewww.inkscape.org<IDATx{p\W?uCJ۱Ll',v#NE%Bm-l a`kv XE L ,^'v_Ķ";V_qqjI-%KVoխ}^s֚e\K}XZ,2q,2q,2qK}w-p'^Qޕ_) |xOgzl)jBUxHLtU &g9;qOg]U#@GWo[`1>VZ|^FәGUWmmQDͩ:5o)>??P_t^Ձj#'є&»ش2]GWqW#{ cW=q3Y+"<6^@3]Z˽갤.}oD_QSL9N) /ۉD"Ӟ.Lg,xxSSB񷴖m|uf iO&ODLݲ5` l۞ܷ'F<]pǂ\U%!@GWNs6x|@X,RYu?׎vt W\tt6ܱd2\pӧOzjq] u_ twX(|k|/gbddq=_}}=mmmO!߻@L\-.㢯 o&RzǦR)mƭ-RQ]p.xRmY_uK5|>Ϲshnn~˲Y~#WT|~#{:38|k ;[W5O>$۶mcڵu=Zk_}r$m/{:ӹ:q b]/w쪟W0f82!5M_k J_=li_wyL䦛n"Z`!pk{/k=] Oa~Jž={H$ wu|gٖX<*Ƣi R ?}nnfw8uRy 2W.XL 1@U G]6]-Voxk'}^x!?H&ٳ+0 t|ȿaEQ8PLx p`_w?tcsǧOf``L&ó>ȈRζm^?44fD馛ظqcx@X5)_Fp Bz:O+``ʕ8eY|'N~޽xܛ}T,9pï_qpdC:zo.G11{PkM__}}}aR)v /mfv؁iz۶m>pxL[[ ]d g]3\̸Lݼndz:_^>Rs+ie:87Ҁ͉s}xNUtK$_7k٭ q8rr4i?/|﷣$BS4hqg9cq̴%*+$?;L\ =]P7|;$t z":nUS  L !pdq4g,yC+P}KüVJb>ոDFZ[H;? sQ wI-̿SJHMQGMAkA;/Wg/䅋mOiac9{ʽ-51)*pܩ,0`mANR=V }E 1nX_Yq&XK?9D*Tz:ӿKO=,GOBhh"oy 3@]uYdrk:f~lGz:#G|xJC5&@\o N_mpZWG̽khL9S}CՉ.x~ߗ4yie!ws]X20TVzpSRPgpIR6ص)΍qKtz!@ \PSE"*{1uyT1LA1S].ߏxח$ ƄG$ﳤΠ!!im4پ>6E0Z&ȀqXes"@)i^e !?\P''4ҚL^aHA}|r4& h*a8l.}s98o鰲q5E[h iD+I H!**8 Eo11N̲lRj~P+2䅀-Ge `s!e`XK^=LOJ@ j`NSu]GQ\ "_^E żK97LOgzʰ`j cN: [pQ#ARK ZC<"E-I#]T +=8WtPJh+!jZp: T#d$*Fwz|PdH Z\"خ&j dJ8PI ^g=@P\\EJ~ @נ LIO6k O.Jx pZw'&Zam@s5@`n.\Vo$jV ]| 0&@pPB OR`[1a?Wijje 08WTM@TX ".آ X Pue(g"B4@XCh.z $XWSEG/[/Rp#WtZz\\Ak&W("z:ӃSXEv lp<= % lGS)4x/ K ^jE$Pm6p xe%,OK{-=aań}Z)Z! B9"CxX# A *Bָ)XLahdh'Lo8F!H],=hq5xaRƌ. Z5^:8@DP8T (4Ba G&\#Yxm)-r xB`xZ W6b !J5EE›,ҊqLqYC(!0"" VK.=@\P@巼z@"cR؎q53~1.R("^BmX+f;( @-B.茇ta6pRp:k` RaJ y`3$R"q'G\+IB!(_7PNG@T tp⠖0+,X%v\L1hf\\w.LZp^v4Qch/M4v= lP (G 5@\@R$So”㍧~kЕr̄V 94qS1huC(Bcp]5F/=ز X T (ؐ*e, q 1JЗ-e*, B1UێB9J0.`&b fC>ә$0.0,P Gy]L*W2Sbu]kbs>Mz  =JI@Au`{N./j '@TNu@VAԌa:`8 |Ogz%ĪFYs䅀\l'A 5S;Z1UkUH[Mo!$llxe,*J V5]8V\0z :4[+mBQ3D(v ᥏C^q޿1Z(twwm;ܜ{ӛTU)EUk_Z18NR),ɽ+^'F%1 WM=r1gpv;תxq]waٱ췿Rj,d7,?p2deYI!DH+$sFf CPS-B `|q)4t}Cޜ/dYeB10}ѱH$2v]wk)܅FU7h4R@=Z !RBzu}k]tXSZ2.@O{IAه?;f -Ib=^I)3eY8Gy$cR[o~ a,kzz%JZJي7+X'_LVF#HE=5 @r+hflGã ~WDׯ}hSJZbbi+R+M\HXJ0bIJ$hZ7knV+"ǏŤd,hM̷*HMg]`"N<M"ӧ62`bz"hZ7K)RMR&u@~#/K~D2L NjRJzA4h$rѷlOy9)5\\eE,uŢgZLj kw)sgx7u'/(E Rk-|/E0 pN6uK]]]r׮]T7!DL)BĴ1!D(RuɈk-CkX>ߋq>E7X<:E.\ I6ؑY0s kcMdX6ceZܓ+tR} !\fK,Z2 P___( 1q JGQu!LTJRJ#Zk)!K:5B:=Q]5)҂3z XҲ22"9uNJ0 w, 1u@RAk`FR*%lZ7!RZ 70s:'Rx:J@I !2Z9Bd"B*2BQ)isb+%fPwww4&˲RRʔ뺩@ "z_: $Aŵl6Z묟2'[ 0h3Rʌ8ifbŻ{%j|IQJm^Jdz{&  ($z["E+[rg!JᦔCi۷ǐ-"?^gYVmہOQ'H!Z렷[1u<:"0&J7JtړZk O9ZRց/ksRʼ:Y!DV) 1*m;S '46!꥔ uBuZ블2^?6ʹO5ZZkۏ>,uQZ!DA)Z)eNkSJ GuHj 0 ;DB!eFu݄a $Jz2  x ZYJH)> ~'/6MsqÇU?9V05M3 PaD\5d{Өrv]Z[XluLPmذxmDd,CWWܾ}l6+ 0 iZkò,ZD!kvYjzꩧTggg`) \uXܰXb,2q,2q,Dߍw gIENDB`x2goclient-4.1.2.3/res/img/icons/128x128/edit_file.png0000644000000000000000000001411314447111614016675 0ustar PNG  IHDR>asBIT|d pHYs7]7]F]tEXtSoftwarewww.inkscape.org<IDATxy\U?UuwN!,lI'!k04p,!8"*z\Q3Qu8QD$26KdH"a4{K:]TwUw^իjytu'9zwwwRJ&rELʄTL(@˄TL(@˄TL(@?8 x87\Ώ'5sBx\-4nۙMw~|m \^ŋ  HZA>|mǸy;^Є@@-2YygI Sd0۟*_6Wb 4)$ `V5ίuvWB!P2-@buwe3_>vFlgq]i]Y mZ~VlJ Kj|nw/a? k;NݸfuuuEz{״n?RۺHƫs/n5 T$c>v_>"z$v\q\uu|QFΝ_a$ItCrp@g>QyҺֵ*d}0}On|!)(D> ,__qg j<7?X9S3Ma&UV_6CQAlC]膉tFdgw8=NYFK6 PzJޯT%H nz,F GnxG4|ƎI,h*S!)%w'#x3&@h=]sI oxx ĐpԐl3z?Lw Ftu5!UvZSOAP 69;Vd FFDlv>c~ZܱuCG{0.xMlV%+a8ǟl3hR&R)4$>ƌF@'pyۺ xcb+蒈!"Q3LoTk^ H[?@DۺūPI!w;GXK)ٲs!3k|_JTEMsl3cжBk4"?+hԠ 7vS=7yu~O0ʷr n[򟅪7 073ǟ΁0ҡ'=:+e<1N  Y'@YiC^WO0aNLy3]{{ر]ʶu-.)($/RdS0?ɒCDun> ͮqd>61.m[W 7̭g ;wS>' 5}Wky>@e tn_q?o*WBjBfoMky(@#W;w`$#mgw;Gi"ޮH%R(iUirM`8,T|K'Y @qnɜRX4ْhQOk/Z"5-<ƮL]RΨEΠN.]÷/^jf-ޢb-a>tCiZnG5ٓ2ҼM >zkq<%1{5 |jdFh*qL7zy#W 5lj,nH~^:Ga8=\2iux6KssJ</`< #GxGR{$KΘDKsx_eFuu2=XU,0@m@NcXLƏ^<4 5̩^dRKgѼ}C:'5,ɶmiw(/ B:fb!_mgȗ?}*"G@!>V*8wk},wz/d#!eiͪ||mo睃L"`;&Nbq/A 4Y6՝}^ѼP#WUOA1 (‹5G#~͡Aȉc.ңI\͋%̙;i(d l>;<]?4e~]`fXC|)3yh^E9hRئ@bhAާk@㿶4`H?<}P`Y{v2]z$ΞC:L}8bnus(Œ<`~9̶`]1;EE4~J=5كz}C:̆q|-! EVX0H5homrm.Rۄd5YV}ސ :N=6.v Do_}huqV"Rn`v/^GgT zN!a0s[?1#-Aj3av,l+; K Մ@hkc;kFH5V|' f>tZ ͗py+5nV0eQ!dA\=t% sϰi~:BpsۣjŕG-y ^qݪ M 2ްu0|pXgjц5.?_ZԿaO !9\usrnGڟ=-;&XOOeg:SaϾ( nXoB 3\'ЧǹB½MFX<ݐYѼSjaՇ*.HZXqV:,ߠhG_ǯKjޘ2Y1ʓ TÀC,JKub Y 7I.X ⎡,U5Bx^&. TY{^a.nj4.K" s򷷆.:\zFOɥ;%9y)o6ʳ*_/@ UXMԊO=@'yCxw:G^}Cu1Fu˦B,_ P, T?y ra ndxzǂ@,]XŵKL ~؊ \@Ka+?o` T`czIE)o4 Nt%PwSG:?p o 2v`B?^P:gJ`ߏ[UY^oyw}e;>uǽK xw{;\z۾b-;  Q/v!Cc˖-MC!#cU2moK 4BNӸjI-Snbrlu ?cH44:yIǜ;_VsuLm" PjayLv;mBjY~bfPQ2e% Q&亟\{OI5~5_ \1V L`N,W `Qف|kSZ.>6y)O)!8q{N ^_એ5>ԍ$ [vPk|vv}/"hn|ie㩱D3qeh@(F*.) -ϊPj1X%Z2\D/@B(ڲL`rA,'Y(/E"(_ `1FБ L@Z!ϧ&wD(K VN/0b[<-"-_nWJYc;Љ,Ʀ43a )*Nw1]@Knv>H‰4Q/>D^D(,':q$I JlL`13!w^0gn%u%lsb˽^d2mG }=-mˎ}-y7{܏'>N*n܎ےBDt :DX `}YCmK2 )ͼ{TԶ7:ۏ'5P}߹?E LZ |nЧ t,ksg{e])@ԂpL9Tl;=7 |ksSFe&2!c& P2. P2. P2.u$ IENDB`x2goclient-4.1.2.3/res/img/icons/128x128/edit.png0000644000000000000000000001320114447111614015673 0ustar PNG  IHDR>asBIT|d pHYs7]7]F]tEXtSoftwarewww.inkscape.org<IDATxyս?{6f,$ #F%.hG'/ M4BzcaѸy,6ADE0HK/uK5Su}ϙ5Uu~RJ,. = )))))))))))){O@s_?mzGzncV:8yܾb}`)\8_6:Ie)gvPR@JP%^*ZT@?z[H.OQ yl xGx=Π!,#09.X9pAIHH X&~u= 7XʹE7v@!?(Q(^9ʂ5T7>zn`Iӂ<gtjФ&qlw}LDN.o8"yW2ەXjU&<,l#a(,ss,uw#`S'!?: ;&U(&@Q@[U) @U%6V6/~,zM%:$0y ;~(5aq/#.!171EAE,zO7*03;Csoت} QNLj$k ޛ"oM,t.oXم9$-~P$륀Pm#51ӒEܾc?r0Jx?()9I?鲍Bձ@͌A r^g;Y_Mx~H } RhE  R" K\n_6(W 6Xu#xb p} 8~=/ ЬFu~V+",1bu 1,sP.F?diD)== [`SoQRHx~cBD'_d",԰()6pt,Y, p}y2*3}xQ'QNWfܾs@ڍr픁 ώ )0 bR@")c9vz_Kt#\n_0d,nQ`x;R?-8_/x_/rl}=U"ZL-Cxn,Ի`P䇍;H =項~ïPLK5Ś㑷&1"ms NU-Qx+Y([ddyYJǓyc``°__?W~}2*nw77Sgm¼,8 t`дy#xjqVuXO)Aw1 `C %4WcʸIB*B080}iwߪ-Ntc=U{rߙ^FjC(B"͋'QaLqjWg"oy=WNɡ_KۗfO?dx͎*Īw=>d9ah4XX8OfɢўcC um9d@;# W CEJ) .jR*`pl+&`*lMF 8#Xg,㇧' v~p q$7/% V)071ϛZU^Y?$㌺XIW|g T%0'<U\8uPF# g!L(IlTɫТBۉoЉ&~_I#~sWǪq>>߮S}fazhUK#jc[JY'`|kvo-Zdk.BHc9N] pw2c4.ρs{ۻMާb0,UϜ@Y`ZGMn].ccŜ"C\Yk mu||H}O=磅wx=7NMBUMglk6~IV~|O~mLa<>]kJǼp}C,K/\맍ȰލD3nXbJ-.-v r:xFN(IguC 9Tjchu_ڒ|S}X'GZt؝Qm_/Ts ju!7K/ey׽[?v4r%O-npV- '%~f}(7zЯ&9gM<w5ܾ-6ξ{Cz _96~<}".y=gdO.l; fa=5EwG?Vȉ.KJ_?/ Mۯo ;ZTlI r ɞqv6L3x :d߷1U)Tgb/J<}Õn1s5O3ѫUKG[/HgC 9Z`UڲG˷3l C+پD&|SrwsiU -! mW7 ^߫Rk۾~jaX=3k rs2+d!Uk,m vy?>/Fü?z[`=^I7` 8-'6WɑָIċ[8\'{])z=?%=^^gܾhr.+-7>tkGmZ/4I"֖RgIנW  9̹x GZxL밉_UƖhUh>h8"KhDZ|99 D!@x眙/e?Qdņr!^\YѪwezPgg+װr诛yzzL  avpAfʨk uиێE$k-0|0=Ux bOO| M 6FkYm~vܸO]n VmjUY&USݫ=<44v°_!t@ݸ.ͷxP)%˞-w7=3ѭ3~xq>L%C`HsU7U~R9ՍjԿo_ c7W]V54B/3FK!YɌsr71$D]Y1ϧm,va(] n!L -SECp8] آ~ե7M@LyxdOGwj0__?D&hycJWX+GۭUlLNuBhn4oznzy?t^0 @=j`Wp x=ͦ}p?/;]Lŀt}~~D)xq>jڇt", vaZ9?}`?:8H.hyJكU LJ)aSN; ^Y_6Us"f#DS-[W{fTH&XQdJ6nr#Qd]QmY6&J1]4`L+;xrs *؁*l[>n1a6JFE.ȃUyO#xM^or[+G\}upiJ!%{ j.׼'7p*p翥=\?Sn6aiY hQYv+EtRlMPZl4ij$O*{v,>cK`R!{z[`͖v)U!x_ o[6MB IE}i_$sRVO-l`RYd=LDh(ENd ' W3"' Eg&Bbb6(Z?BHDvɖeu}_)&׉p!# )IEYm٨f|Ӄ9*@AR@E-i0BmHgt^H9`Z B@oY'B"@"@"@"@"@"@"@"@"@"@"@"@"@"@>U IENDB`x2goclient-4.1.2.3/res/img/icons/128x128/edit_settings.png0000644000000000000000000001325614447111614017625 0ustar PNG  IHDR>asBIT|d pHYs7]7]F]tEXtSoftwarewww.inkscape.org<+IDATxw?3{{ƢP=B sԣ#!@ȓrSs$B'jh-(c1fcnZjj3h3vUwWy=zg;[~oTUD"vJ.%9%9%9%9%9%9%9%9%9%9N@*t `\NYJjA!BgWo49֧!Yy+Y' v&pn}?_[ȲX^ۉ ݺ':y-YO^_.>0p5sQO{nm)Ug˝vt?{Ȳ=v"Zw' m4%=)Ȳ0pɋ[xgo z4՘xyĭڿnភ4[n6i. Ij>la`!e?wNǣ !pn (A@N`˵ ,*~t^۔q(/^FS 1߃aZӉ/d2z>!iWO i<_uUqpܳɄII~SWp{0bvO[oeځrԼ f`s^3"_Klg<` IRy,Л~ER]8n9\dĂ`a/@{Qþ݀(3LO>P7T]=`lrߔo.?i ,yO `?(I?XZ:6zUy~#27'㖯7fࡌ#c ]]T} LdqV}H Ԕk6Rn1?YXaÁ= @E.cmYE$IF+9@Pz[k\u6kQ-{Zo7tEMq:<"a6L`pnݔuң 88AзpzN"lihBZr$wDd[ľ Ue AbʾB27>i @e80) &5SMA ftWkm`&9,?s:3KRxe{ʞz@[}Iy@&8xVCKm̒]/li] Jmq=2bnC\K`^N"2@'`xՉ6 Ӗw1;b ]=-`_Pd*C*}[3KԜ7h:`|~ra+'λc\J60`oWg;6+;"7(.nqݹYZWf `½WuĺPp]9v*i0w_QUv,&TP%Ykh,N4T=' r`[/h.<cZV,&a& &c {'me&0RbpI"7Dõ lO6[W~ :ч2ⓡ4&E}&br}s'-H4& Jhp Q,lT?YoB@6KL, h yuauqu24W+ˌVwbI{K)^f4_+ ;_ufDQk}պk0p0"7pU$eG}m+O?9wO7t8?B ĐO3&04J`1f}DO?";MPwv * ˛%6˚3+2q<?`6 VM9Pxp3 2 < vLلg,Vggeyp}PlVl1tS3č07pn]3ɚ1Ͻ/.C {E:Yy&Vƿ֐hPh,+6,笐*a,|yS;oUn9̒Yxx\|B|=An~h_*ƀv ӟܐm}Xyh?0!"WBGY/SlRxm-.7h+;טT36,댑:, u{yaK#:sTxsVznn@Xv녭y@!@H?2Wo:ʥ~[oisD. O獇yD}{.AX[L(Þ ~t[#֚%,l|?Pݼ=n`"~7pbё%; h۞mZY&S9 '2Ć Y9%< \[3Ӳ\,mE:ވ7N ?KWQ{4ĝǣQ?eg;/-~GBB ?z}M%?8֔ʎd e mU-V,z*y㦸z f\x\m^@g c!o'o- 5  )@tڭIϜF}YjԒ9Ik1QoD{M4[h/ξ  g {:Rc~<\;]~^]?8跁Ӝv`J fdY%QbB𧏛WEba&8c&Dag ߺ/_7$Sgk2F*5܄~6i1XRiMR ξ΍T.[g|Ɍ$r;*^3oek#AA"DKU1׳ZQYfLx Y+ >f/ π/9pڦQ,1p-8_Aςg0 DB@PiQ) 3MC۬!'<%nD֚v4E8'6|xpN>?KeC pn}=OYE4o "0Kh[ -N>RgcmLix.Wp_an "PGAX[SK@.e0`g ,f $,ʒy~"Pض/ \[ݓ$I6`{9-*/<͛h>~UEd9IeJ/  -TXNrP9\y)_ @ODxI p‚Kps}uHĐ*fbOnx-\E̩ 6<5{HxS<»XMCp*e"Ѷn2E!I n~EGz"o΢4QX)͟Q$~" :Fʢp=,jJ>Ư{(c ?QVBIQ`a#$IzmX.IXޑa4Uxj#8G}S~!Ez"H 88k+H0U[7L'3Jl+ >(2e,$f=$$n),u$>Ї/iq=Tv)*㳾`:AJb&SzrII IR7Zk\lFv71p3 2¬e JȚ_A[3JkuuR|XWO=$9Af (3~$$HC}x]a.}`4x9_NP@ D.CҢr=,iN0DQ[ƮtiHI)"I*Iҍ-&8>|Ș֓c(]ovlϊD7?ڢAl ݓ0XdlLD *|KTj$݇6| z8kqD'r4|~]i,!%d$Ig /ދEL+:A4W9q.Ig7)P@H21Ƹ*SOT^2DAEf4"(_$i m^_u^V9K83IrqeI9@ 3{B\lmm14nZ}-E=$,DFZ6-XHZԝ5eaCƶ_U?NI9F:4 n6e#z u6%L ,WO}EUm3t6>faT8sNIӄ,fhkvx&Tj4Wi [:J%4'I{ӕΒߎ=3S[lVгi$@[H$ݝP !)'9e  IRZs60Dź`x#KqJ(rJ"$"$"$"$"$"$"$"$"$"$"$"$"$"$"D.5IENDB`x2goclient-4.1.2.3/res/img/icons/128x128/file-open.png0000644000000000000000000000772314447111614016640 0ustar PNG  IHDR>asBIT|d pHYs7]7]F]tEXtSoftwarewww.inkscape.org<PIDATx][lkN q$JʦTJA J Q@oj%xXV-UQ[*y[)m-E*4U+D#qI@oN9}ݙsrf?vf>;g|ύqΑ#0:]EN#'@Ƒ q8rdE+S` E/%:]U`tK)S˕jmQ@Jz58x=g<s=8-ob#R}nzjta@AJ=]F٬-9گzmr5ofpspf^ZnN]gqƀv -\:f J/;P,ej;1,E g+Z%持=k(T+*OTxezR Q,aKw}rt _Tk$y ALQ4xQpȶ|WJR8cVs=@qGzWx|SH:%SY&0@fKۖ {RT "`@vwo z]v0}Z6J"FxQY%J*⅂hU>Ei P*2MTkQVb~+g '8[͢)/YvU%T"'JNT@wYh('>_xn}3^@6JgbSCmkx1?}c]Tt {u@u޹ WOH]]FR-eP!@!qkX1 5RA1jvo`f=^_8朗D{zok,9IM^_y\%EB͙x|۹+Sߠ&xNgCBbMҩW$P-5,/`ǵM`(G2;+q 8:SfXkkdΘg)8XIfgyb`zHog  ꦉv[^Ҽ|8Ɔ xCB2zt*G4]#<=@Z{T/.{v:?8 $0ٳm9Sl$œ٪be`Nn؃rΥ`vlζeN.`ρd eRF(@` ۶aK;<T?'3 5 !wqsO9 Avi{Kjm,ӡr^Yݾns O߲֚ wttگeemi>g-xsvHs^};^k.4a{o炚_S$6D82PDT{y8/ ! PGδTk?k13+O&r$ka! #]h0 X*k֔2oZ s@N.ͽ$^`lhz.AH2 (Tҝv3Cqd<"4wj *skEܵmP"5ٺ8S ϻPQjT5a*ZY,҃%>+lo5`hp:w0+Un6/ۃci74] 8>#mbYOݐ:I&Ca$^`TA2 plƭ{X 'Gֆ fg܂@ @ff_r?"ȕфJM',†!sHx@λ vе7?l$Isj "YVlzd֍snNEG0{zam克< @D14Ko aM6.) @غłwD%}c[:lv K&hwۏp]',M"B$6‰sR @_)#}]~0<4a#<@,6vb  v!p3@8h2Jb :a٥-fd pV0|gaKDSC x ?Tb0K}SnWTK;0&!%@t :^B',F'c @LbH"N#DvJ/ti}Jn @׬)5jxJwڃr/VBx oœg @7]Yv^fᄉjwvfE :nr  @9/եf L Dmw{fC$#5 Ad&Uːa ,}J "yL%{ە` };]p\pf.EB^"FOMM-x9 B{X L q†0{^i eRT`RP nusPNi`om޴Æ~v=hhѻ&Wyl ^oh|ݔfe!4 L ~a%3"mX4 0Li u:(mIL?'MlY0)6†C q⬔$M,$::onzM$ 04`H3l})G{/ /ecLT^b]N&@`Kc -➚#^aCZwiAޙ1 !ߙ+EC^Oښ/b ⍽CMU,ĭS1 |NcoXIS1 co XXabKGD pHYs7]7]F]tIME #X !IDATx]mh~gvS%ْ-R\Jk 1IhFn~Bh~Qh!ӄ n)L?~4?SH@)Ԧ$.k%ٖ}fogwgfnu73"J)hKa4ihЦM@[ ݃ ;>1#@)")AH)WN6.k?@a|r-"MB$6'^Zwn5F ED ^xjg'/3AQ@@(*ho=E9A'y4 * $2`;"J& 65s$pB5C[p1Pbs- y73F *F =? -ۅ$^{n+ۖiveHq /^-]2@` V\SO݆=/]֏iqWn,Ff@ IK+=u_BexbW(J AOPW"NJpTp/PN\?8SO~WJ闸P>v?+I4*˪GgE3" Rc,MLPvp<3[z|釧N|r(upZ_ 00rU{c@ʙe1Ҙ eT͙iTj&1 Ԟ20 t7a/.;wcKՇg=0b|rFجN :!0}fa䁁=_pP^omȜr)au өm?V]Keo##/++wd|[o,nfu#Ǩ <{;{L>lG)@ƬR>QC'xh$ +0;v(=@ZI+S}vSRzL0 б<kNv(/;y8U;c䆿EhlR++k'yc\A8zS CGH(@G&#' Bzry mE ޴Ѩc*R"P*6wH -9U - ̠ KJP F܂x Z:TP*2`L i&(oݎڃ!'R0ܟcQv!;I-.( 4Z Y G2'[U&0B oW(þ6~FMA.(,c2(3m> uŇ6808ǁ,)~QX\Gc`>(M >hv"D ~Z[*s @)T ,ʧ ̙~`:$-0Xh/6?x@ ,$=ESڕ[R"˟YQ~E rp @)xd4ڑvUNSaY(݅c8ꈰC7X2tfq5*ʝf CQT- c|&^:ğ7H`b98TS@~bAO7Sd5P8D޶ 8fX2m'҆HQ&wi-H,mYEo(]9\Sf}m0v[0 mIWqm!P Ccy*؂4,Y)e@0#W?B_ ɣ Q6gL <{xjX4-dFPrV1>}k@bo!k!j9J8l^bhvc+Ccy1$ xE ALP mθiC (B&k-ݎ6OvX T(- Ss|F)޼iK&sY|PF^[ %C jtD(py6 ;pن8 >1hݢX&6ui% 6}83F%.lYH# fP84֡6KJ2 RdΥu'/ `vªZFk箋p`gN{!Bc{uLR(6?!wJ)rGWV @ȥkb;Y;QhSdaSGmi5M ǚ#2',-1e00^, `tI DJmasBIT|d pHYs^tEXtSoftwarewww.inkscape.org< IDATx{VU I F"Eߌ#2uTuGfZ3#KibQ:P$AD >Huz9}=ܳ^^k-J]hCht"`!0OUgev?"8fTkH`. ~B2UGj"r:pKF"#T4B_bU]ṭc=襪K]W""׈T`99Ed+m ^* Z XhuO feR=k "݀GcV P5) 6M#'&k "M|~RE|i*׬ڠl<tri*פH]6)0#M4l:mVrl3 h)'DdSઔmF@lRLןBɘ#cU4 vb"OC)(lϕ ( "En`1z'"HOY,Vb ʠͤLSD\Ny;@d J2T[<&̋bktV/+{eY4eGb^{ENZ Oٞ 7,3~i*DdhV:Tbbk, Y 잰b\3ArLpmm%ΪrBuql2 >e[I9KUe)04;*"߅?r7rf::k! {} ;گ8lqnIp}^I܇zCqz0JU$GB.3}5%XULPep]f>Mx}Rg(ԤD1jyÒ'a-pc@XxƳ1s1u8EU$B;bK] SxޡN%Vc;CA;~`x*X Z4p_a{2/ gIݛ{*?N_h}K͡Q "퀹HUCU%e&]9r*..8FUTU\ 0?a;ohDh`'CT`#@{3omUX:"Ҍ"t `)?I?CUNXVˆĆW@lr>Vn/OaeiE.iQa hU[hE6Jˠq7c.xuk,g*?ɫ<zٷAGrW! f"x|Y#p"cwC=@t8c+">"WҪ#yߜ @?`|7㕒ZЊ'y ;&;zOGUFGs,Ԡz| jskQx W~Vx>V`9Cz|GY1;f-Ji.Gr,VheB;,ex H\4_3WF v*|WPOlECE^`/"{`GW`ɭ'UY$w*R׿pY1MmV\u|9G. :-{>HǗεn0q0&AC@."gBȮدdq3E̵֍{-=r'sr3ccȫ=>[}Qv'\,IBdwg' 9}9rsjWu UIvEB媽Qf L+$Ze'b ,n1JIn,eV;?&pȬiS'ٱ~d ϡ7i\ѱpN 76gyDDSBD;GO @>kc{rhSglʗC?w՜A1zNFG`T=s<=>.srDd[7Wb Ff<B\x:(U}2"%0 ñTkE|(PBD >uɈg%e' 7P%-|dzJ# P4aK 8i#n \ʟX9VUFvvД+JjUTlaq\}~N>8g-N %|̡C4?'Li2<Ž΢,+ppiiGrJ`_ۻ ?BU?PnlD9^D6vzE*(/cAR-?klb<}&'Ъ4U]Wa_^H{E<`oyE O1Uk%Tu_ƘCTC HG.k4z()nM>~쭪{#FGHZuWê>i:qZf h1i?lX1/¶T^ D]@kD +=沲%'0TTuy0%sn Q3nW (hIENDB`x2goclient-4.1.2.3/res/img/icons/128x128/kde.png0000644000000000000000000003373014447111614015522 0ustar PNG  IHDR'sBIT|d pHYsbtEXtSoftwarewww.inkscape.org< IDATxwygnݽw{Uo $1 KB 8lcgb1-ĉ9.ycS@*[{g̙9SnY~gΜs=g2BJI9s&sV!e{rq/{ Ir;p~W)_D8E=w1ʀ(b5瀿Og{R#u/ C y!rc~Oww{1{g3u ZjWDlJED!-- ЮnWvϊ(\ y@J 91Q(Guf4{|wTrQZOc] X̟s dkKOWVwUT!*֜o?;3Mp?'˚lLql(LeuTKر}jwql iO'W.ƈ U01KDNJu2wQ)|I_G Ǻ>.^ɊuݜG2zs@ ?-n`T]1ɲyJ=ydϕ΋jÓXW pNYT/7!,hC8`y`ښ0iZL db栂Df~0Zߪߠy-); 3/4!$bN`Z0 47Ze=E/20V` W``x\ἉMɟ̎LlkrEp6^_RjCgϘ$FLPpm<&Gn6 aOAђLO]L* 9EcsE,)I jR1Rt6gglHY>IK&| pZK͔Z-!y( lr *`A~G46Qd:_tJ{"U -.1.[\e0-+?㉞{&K^&V&Ӵ ;E|x0[z ӱB }?Sz3ӵU,)1-Ս~{݃y&.l/[_auG N;4R`}O=qV61𤂿e B `{1^Ft P tF4̔OQp 4ؤ=Z(zT#G _,LDLRWtszr|'e!«i!krDEL0iU篖S: [ L`K,gDb< dҶE3.7(E;*0|^@e PDbhl<.Zӗ%1M˕LACW6˺MK+Z,)@HcEifTܠ>?cm=ccv LS,qPY"+Fܗ)cVV)mO u jh<"㶋fi$vCɤ)MвwĚcUJ۠c'GxCgM5Nm؋CHlBIydGΤIk6" gT\jFKSVSGy*\2)%?>7t)M*˲;HOkL'έ3H N@%6@`0 ,*2LaKSs^e ;X3M "vXĄ&3?H9I'#CwGr@Z/%lE|-',I,[]Rmjjl ;mj_2pNM6xMrB  MDapaVŒz{F )fBX=r jC UmoH?$ɘGC''cx{Gʞq <)`DHl@J`!!2ڿ YN 8HۓY7\uEJ=ȷ?.c#V`!Hkؤiqࢦʫ `* ( ` {7AbrPȇʌRp3-kF@,@‘nx6k6p!0X&a4ŵOCkLsAT $bl 3r}6{QMK2ҝӲs;M˵]X76`l$ZVB@:bPH+=|MXqJ8T \ý,Jvº?Im I8> mjEL`O'r%,lIGZ>z|& $dBf@8(ayօO7GUrgN }xnN$hn }B%t$@.kq>XNA*npm]k@iij[,yno߻yM~%8805)L6tbW*͵q2 "mۖQHN<tj+A"&fe kgc=1˗L8{wO"4uEtގ[fɩ3!_аS_$+HPM$BJgEP\vf O|>df}aQsO_>[9kV-oj4B~{hST$БӔ˗T~J{Hı,K#lتG}TNPA!j 6 r-xfG?1SFbg5ҁҙ d}C~bFxuIC(چ/Ce`.W,oL?+:&ߞ8HnjC,jPRҾ|i$OK>άK:geז%ӗν}g_Y6*,\ D(^.Ie/wnIH3f#@:o dw^55H [rv6l2% @*ò|n9Sb9c:IK wao hr}eYrttEZ}s8pc9!IS/HG%ҒX(c3pt=T@niޒ0uѻ0bWtT{`QysӢi/'qNKƛP^k@" gt09y ZypFrɞUpviky]W t8;{&(=N@]q>Vl'u]˼"aK1&F&:Jn SKFgLc#z.I.?G<5[3AnOefj{9K$v?' ʼn"#le$"E<4h5pH pT(' "-m]/aIO:VqHQYRE% rܠ}$[F].fF\gZcxpѾDl_A,}z67iɟ]͘OZ3x咿{Rrx G:n8mZ[VKjʼn"c=DZc ȟpj60,'+ p9պ|e] 4ՈwVɝG^3L92э~TAT$p_Pb^ZUo9rD*g'ly%=n2R!A@;]ظoZ?9:D w_%V<9A0rxaJtkߗVFP"( D !qDR!49W;^щ">VN0N;#l  xojf"ɸ\Mظ(bc!stA"ʨ HBf">( pb7^w@6 .\fA{(xnZ?zLne,t 'Fǁ;|3Z0X (NGIU|5>&ΑZ:<%pă,{K!xAdGs^d<P1N?M$mmKXdⳛ9yr9=Wta(Ut퀈2V~ @lA~ J!lZi0S DxzߨFjR=0m= !Nq`PpwN_~Ŭm ժ ,i 3;,ppK% GN2yk=&<ē/||Aq%N $:Z܏vXWY *i1STcLab°ϞuaOpQ,?9XFu ol#7W Fǘz-fጅM#/tK(uZ[K+3 +Rp` v]_ѝd RB,?F外}=@)acѳ*_po?C,eeW+N_%-ԟ\'Ě AQ45 c%\X|S(F>`N|\xSs3?%"!8Hͣy꘸ki6B(ev 0U;5l#(:c_x; uS D$nǻ#弲fpt0Y$5ioH/lD“^N](F%@ylXLĄpb7)=c T KĀ%YQi ~"-;=,HP433Spv|!}彂Jb1/9wmD%*PZYĄm:j`ہ!j5 !+qu|j?V%3\ w~su[M>}4ͫeB*P,xwOL&r3m13ou"FUr-(:O\WX<{7}y3SxGNwT [b(Pث!P@A %,~5'sEw["2BV5(0#Z7rc1z>f"gtr.rJJK$>Pv}8a>} 3|FsqhK*~ pǘ[!h{y|գkbȲqqTl "BR@ N@H7 n(̌-8iT(f?p~f~%NA B;(,eh@+Ŕ7q9L1 Xx5PtJz:f4ԵynyP-qRv@@0{-qAPQWCx fژ{@"x,J%ޜ7I(L-뷏^jYWAOQ/p @pNl63 AS@~v*hO4;@(a^!Ƙg ,ǾGǧW\˛J5ҽQp.ޏ ;L;_{-O\ iBSk fBA{0-}TfV̢1`R@:Ku6P"ĖAܰwc$x+inˬGo_2/m?Z50=dn:ѽ /F4+/ ^% SSÎC|㱙[;R7k:DH Sx)c@8TH b"("_etpi.<{kϙʮ177x&]9W&U˹޵WV1εvVU -vs׃[tͪ~S9xÙm|stR쀔&>@mÕ+B3B{I2gf@J(M^81cbx` [RVo`7dC4U9I_=o1mPbWu3澼 NQ {^v*v*?:`;GZHA"Aо%աax_wP{4wMs"cv+g7<[_fvrcTs^zml?886h0/=@tP!hZ A 5b D3œ NOI\nJe`i6g . ;D- %o-tK ~zkg8+ 2A1nY+Onυ3Z՟/RgLCL8@D%C9v߁~sDfmچVӾР= Q'겜6w g58X0$>Y: _H}~Zn ?q_zn{jZ+@╳ElUe<5Xk9# Bt{u$Η]JK$. ZIƩIL*u^jZ`"@߈¥Q:D<~u3ヴ'xKKv^ܸ]/DČ`Zt|S ZpMmuw@ݸEK<<"ץz4 \0x tVph ey(Fp9bY|o\"UsxooNN٪_<)7!j=D F,Ǎol?\B:QL2_i6sjUK= D>'tc8R >Tԓڨ(UQ;f+_A*Y,}vc 1bj3LP&(w{H_Vp{N}!ݔ˩/7;bԻ)qY:(2 YapD76XR`\s[ҐM^¦]&zZ8n"tm'"k/DҜ 8o[-fNs yY5&yjI>ߋtã." ҃|ŝx)gDKՓҋ I*v '~[~TU]m|?J.QOS[+@p[bGOGv8C_ H bmwv2|xn.dDxA7PB%`YYA4l=2#8ܨ>=Ws13etxxysټ_m<[0bom&U[' iY<$f4 ̭\~,RU9s2qU S/'wy4q}L 1JpӥB±!cG(ƫ'ˁU]mjo=xO wr1ઍ[dk fեZً:9ka# 3S7\=9SATMii}Y `9u%6c9^6M`[?S"(m8CCЦ>}& Lc˥`QKi11C!8e|:Ύ 9ITVh DkiRkbl$Gk|$jü?x~kSgţ{ƽ3,'QXDN QE3Q4H| j7m:Ww`9\iHgHpO_9:ױ7A"Fnwv._x虣K b ->޾/_B] r7Z] t_箕[ʩ@R8*GcsfҼ+xm?/sJL`_f]{J^ɝ9X^>9wa1,m)(-~z)&0vHWrKh䎟AEZT0WϨ@{4O^oh~ x s㉝\q*fG:洱xrG}+U/:>#?i'#D@)r>} MVot{ٽ}5Nl >&dKoZ1d{{}z5D1"*w`(.bVa1Uo&]<5xy JuMa^ ! ~ueyDY}#gV1B%m,%6-  @ 4t}R(r3 W$_\zH];L7cT??/%Q&=VO"x-w|o}##zG&{ط7,Q /"^Ayjv9B1`zù*MnlvGB"͇yW?t% wnn*voD:twD #sa7f1ypydЋ,iFz7Z^ԋK8/pw äwR;ͳb^ $Wp%eL?Kg;NE&p'Zxj}~i E/IPgsct,?lӚxtX3p; V$#5$tA QnDHReQdž-}aqj.=Z xXvTm%uKN{ʞ- ZYeYxĵ*v-VhiiM l;/Dm@OPRY#PDaђt݄Q =vbɾ @S~ߧd E _#+ĦKtj4Or ŘP)4n1FyEQ*[oJh8R[D %ݽ Q#nk#DsiHkioS;'H7pEt?3Х» n!~Pq "~9Wr _u&B4i f80Tm46B2S?QM0XAa:߅f}`ˋD7DlTzE&r}>& cYtq)U@I'Mrh9R5)C0D(/ 0j爖 !Ox}:ZxXMwHe@kD^ݖ:e S)1 *Zs6(O\М=〳Jڋ KUhG]4f3 '>E8Ž eֵb w3<ӭ#apvT1:h຀%nǕAD"( J^ͼX_iWA)`I{wHG} ? AK4!^Ggn'@@2WSz7կ>nZh?PFKD] uKWT %6l<8bKK2#m~ l9`3@Wgƚ2RjL]qOGmÏ^=/VλKra Թ-#%;hiY1j,߷>3ٰst#om#x{Wj˛Ș*pq1g'g [  VB޹s[q{xqec&5cj ߯D[T[zNvdY_Q^˩TehG6wQyrK$"%\ʚ*k˘ì߈s)%^wח `9!/.[YL:c,oywȵl5mI:S&2(Xn{ iqdz~ࢻjM<Ѷ=9tIg-_|\?~) G{ys0pPBZ'rBM̿5z[A܏ 83ÊuXX䀹`:r">;|6}*u-9^<8ʋGy,.bk-P1{Za qletdB I/RSB˕ :u6姌{faNNVzƽ>SŽގ &&ǡ{tV*J)[z{jFZ~mgC ~X?&-j0YkywҘ) .BKt->t}AW}*w*n8h{w !_'6#ppDet&=qKBQć@) oNh=+8"{ǁǞ'ˮ{WE#IENDB`x2goclient-4.1.2.3/res/img/icons/128x128/lxde.png0000644000000000000000000002715614447111614015720 0ustar PNG  IHDR>asBIT|d pHYs7]7]F]tEXtSoftwarewww.inkscape.org< IDATx}w|33KJH@( MW@OA)WPQn r-`~/*R**U%w7e;3?f'[  ݙ<,ˢ]n_!ڥmnsB' lspx)F\CDp(3\?2vh!S}!a'iqEʠJ Ib<я[" !@m7Wh|v }!H5q)<eR?'Xmj~yw{&N8J*,,Lv׵R20Uz@98;qmg^^G|?C̙3Q(Uvg18pىJ t Cd"r 619rd%KLׅD`'U *,4NHeNJڿOT -o^O:nݺg3X&f'o$4ipB|6:޻QsTK,DA9jp|}"Y(ݼysv3o4i^ٳ1cSB_\RʠhtVHDhTTTi7 RPGtϗm:wW_օEE:Ie4l-NATK222Y`A><4:5Ŀo#L'J+iiЭy'dbb O<9.jXx HMywtǍ7d޼ySBj/ % UZ}kB;BJ'>VUUU駟no'ٖs7y8Z**fǎws4^pB_Pe3WmRRHJbƌ9}ܕ@pHj+#){uy|/@ŋ;vC `1&oNZTuaHj[Ҧ8 TdY7z>9rdK(ۏ8qSİ2ƘP^x 2b&+nkrpŜ;vx_]bgiL\o  "AJrg̘.lpMji7T׋@$~o.]4s~v[һT>Nƙ|U6|dɓ$~x##@=^pm{!7|NX!z­|)2r7nܬg.Tp@\E</^<(rR)ݺ   &G߰*T-&.^ ^CDnݺuFJʠYbY'U4mxkNα{챑_u8;A\v ׈#K,eaMG\*ajԮqmDGV^6>|"Ln k{_ƕ ByU>@':Q\j3x$Cx ݯɀ $|; v3x1o[yG[#@%K^ Ŗ# .r^[z}C!t=Zq \WJJ3΁ VM 6m4}!~{XV`jCo &P*o?:uk Dঈ\imBuZ{#/\iR!W;;L_0J$_?/K P- V {Gl'OcqAIey-^_*#JD׮]vъH['mذaڵqDX3y.9DZz}ӃOf..wB!R#ЀZ4Ъϝ;Rێ.u &75yzwuuRp!J=VS:P6l64ؓŠFE)\r~Vloϓ*BRj9  . Q\¹;.^V`s0(51 Rbڴi<@UkbPU_~aÆ6lr1AI2DitCFa6WJK* cpKhJjCv^_蝈*Э[hpN(d-::"i`=^1r>˖-M Aێ38_¢{/21a]HҚyw6Qdf5f̘+5rZ .Z0+  z(.w"=z.C-( 6?Xy}?p1c8K?cQ\A~' HJ!XI!8BFBQ*'*+YYY7/ȳX,![n}8,2H*Yh"q⹢o,}5a^S=s̟k֬zf F!RI b 咹׽EOkƱU*U\ffg 21 S|ER :;\vܹs^\pÉ'y@0EQdbbb['I`PgbհW:|PuK~O58[X={~߻ j*+Plg`u+0k֬G{+*iP`%? b„ weddLj Wh\G:BDPmR&777ﭥݺaÆ7Ap(#URBi}}MyOGZJ=obŒfLDz,K Lfff$<;] adTI+ŠAZELBu7\j>{ӦM/Oy.(*w:1$SzDb(!]lIIq7?o߁SzQ">!...䮻W My!z..;~ڽ{R.mn#`^.eO2%c͋աr@/YkuJ*]H !!A #C<4Kz}nݺ FQWJjO"(k:BSeCh4S X7rիW**+F F(2爅$GaQT^&$E؈ Ν;Sp^9<3ł3;81wB6"d:zoC0`t!?>bÆ 9  4j rѢE=*/wI X %FB8'Ç_nt~}=<ў=cCQ쮂6&r Fuφ ׆?ec~݅ ¸={̋iID>PP怋tJÃH$B`axCXu**vرcr\,qƀ$k{u zǐ,CSPġDsx VCCƔ}t67Zr/└Q Argڹµ(a/8E|)NQF \tRXzFf;0 Ia 蠴X}ϯY [y7E|&ZIep{H'DgjrVPoq{q#BBGcowMJц v<щa-u T%5Zc ::2dH}e3#l1ޯ4i7 .XezG )vĉӿO4$׽DəghD spsgGKpG, #&F f; Ur AR :s`޼y_xU˗/桇C!#l[@#`̘1۷xf>lߌ7~@sIh,E]#\Q:;;;ڴe˖yϳ Q&Mz:Rz t_NJ#Μt%w%W)U` |p8eTX7/pף@ʕ+o%ˑPmVi˄HHHs D?>: m.;\蠢Y}iaי{xIL(xa|H_N>jz Zj~b(tRo*Gb f[ Q(B}p.[l0hG .ZVZhrp1q@4*3[O8q37y:{Cu`k:_Kܟ8pt}EÌn1:,F$cܸqxh x#oÇOrx^/%u@ի_)B$WKe8}#OK#>Ƣlfff 5 *IV8ߓ,NhB9~ xh n (tΜ9III08\FD(p՛ Aٳ'I!- oC?dRRͩ |;g"ExU\#k֬!q*VZE@ݣ0Fl߾_q} T0XbaNIB)ܛ $&&iW:t耡Æ ,jpI *GѣGZ"434P}Ġ$)dlΞ>iXOou@lנo#Gl`hD57H7Y4@#"##q@@o\ŨBH d9ՠ%O<pfbŊOKdCڼOȠTPzg \_[Tgƍ7~ϲ 9;hP@e˖TwA8mrĩ+(+555_B6s=VH xL+h~k_,`Pf͚ϟgHEFPGC BA>?bĈC:48o" ")4bŊ{gK^ghJ*1\#Dh!D.#vܹΝ{pW;w< A{Ž!&11Q(/Y Qh])3>L1;ocջy^{8*Fp2V`$t9Μ*| 7#=/---D JLL BbuA_ԄDJ˜JsCD 2C.kmP?H;"eQ/'L+~ tEw| fF|p&|Aiiw]Zw`H"C+˟y晅u'+^NݢňT1`{+.z{tw]nZSBNɡaÆSHZΝE&٥$vU XTB磏>opm ~;Aip" BUBA0b׮]nٲ%;xo4(Pu_~1@r3ܙhU{ -j_ |Ŋ/kB"%.%d ,C ¦gf͚j (Yf=ˊ/J+iO*$1BW9Ξ|WއJ ?쳍 @% 9r IDATN%s5 _F5(CRST:s`3VZZe˖}<@ТE %NjU&ɠ(2'N+͑-[9r䈋  66PfmCuEE&9z: 3Z% عc}vp 4jԨA.Y]'GIf@[Xdj^wwqǎRJ*zh@ ѣG7h+W|E)11JbEHǎMOO_ ,YDLTE\Q~Hb emܸ;d_/^ BD\gϞ 4*lI 5jT!-N9@@Z * Ǎn zQݺj6Q/r>@Ӧ_| -)*j8p@5($T !};vtM m&|t:̙3@J FvC'5~WRkB'M$TiϔD) s=hTxTڵ៧+(D[<{ jNZr]h l+$Az6## 6꺏?Ј(PU{I)Fp( qOzIII h4~ƍ4((=JٶG}exڳC @ ?~äDRm>I#R8,e裏G !>tT |DMAH&ME]|Kp rd" ̔)S2r8O^ \S3FV~8nݺਃ?:V@32f͚].W!^111b41l}dɝSSSZ(r'K)-Zyn8~ :t@ZZZ)QU I Lpueo·Sz+~ـСC'O8.;QQQT*U'Ъ1w]hQH(1$7nn֭x;j3% - f/P>sQH-uw6`P믿^"C M"'|2KrZ'=o۶… R3g3tCᬺSQK9>裍/_>[,oj}EJ2GxG T$S=?>ꫯ s `8JT*cMITT⬙*+k~ O;~evUyyy9;Q3|Wsllll,HN=waڴi qlZ5F6Vܾ>DJئN89vPPs؞={4/ILLMj<3fۓŋ?+//Ƙ 'B#*2Ԕ-6.3f̣rlp?*nO,W1Dh K.ݚg #HZ`HHcȞ@SLsdQ>'̍(`(9w{`X1h ?r/n:SŻ4\k׮ {Wև7''+NHU*I" 2eF3I&E !O6|.]:oLZ@b?#{89ouHOO\`p:f1% ?CN kO !خ?PTTngj=p#(X'dەj?YgϞ p…4 /Kqzm۶-O>C`*Osvy asBIT|d pHYs'_'_jtEXtSoftwarewww.inkscape.org< tEXtTitleLXQttEXtAuthorGiacomo Barazzetti6RtEXtCopyrightCC Attribution-ShareAlike http://creativecommons.org/licenses/by-sa/4.0/TbIDATxitՕZl1Ƅ ðd@`ȐL|edtrL! $Cd@md̘ńfY زwGIXK/UUJ-uWw}B OGv&}&u9*"i6(>G-x;#^`(w;#V!=G^Oӣyn8}E^oGp5)` 689GQic~rw; ;n{sgF$SLy7NOJGah:Mލ3z~Pzbw#'}Z=y _4_ UiA>pFʨ`yl! gL.#,8P/OnI^FФF9~ <3p\3pۆcǰs40R\{pYe'M:so\2 cgk.| 8ryPkv*@{ QYw B-3/zy7\3]ق8[>G ^6mU8g9h95]qWH{ =P UP{ G"}VS5_%@$iXp ઁ ^™/Q2n"v)2'KWB:(`>pB?-@@?,{YgEeg`V+E )^B R7MDi>=pR{ˁqza3?#w,!w/jK?}] N;4t/*>OסztxuHRuӔ~gKcLbP&FY"gW(ͧ+,bpg> #Ű]#~<PcCy=gN}%aaq2d  XjQĪ%^͍U,<1Q,d>  ;~2 I,/4ԉ\ (L;HN^ۇ\۞OFkaԇLNK'Z gs+m͟%&g78ĸ*1Mz(6xbqtq[Y#1"^3 zLmnf6C.KOJO,8ʫ\oq6g߫Q1"=e\-=-ξg=pcB'D $-kx15p3y2!HVQSD5z15_3=зh*մgrSv]qNweYQڀzͤkzX_ g &1CV [&#Oжeۀ(+(AGGVE;L60jͤhtN1+i*5wqz@1[cA%CWnBxUCB͌ǰx;gR#9T!=\*dX}D&L4~F9K#e>gnQuJ%çW_tSxp%uN8#ߌ1XJvnfJQyt!"ugڎ)_.S;;lǫ 53GfVwa%|Rȷ7gHE8?mN]gQuXP_j&T5-l[R_^Aݔ| zjhuL W.YRX&.َ0&N+-\Ͷk>?̗oE%)lc;*_kfËׁ/V9к"bxpMn?<,R-3y}~4|WEFskdŋy&.k=L`LWIͤ&z"dw)*w [~+B&wj9yP%)LZf[H{8RQfa+HTʍmf}B+38ɈG6wbe(E$Sv3L]>: E=hA_ɢ!dY4|fMnbO[])r&A%@e!~t1IsNܜXu&1 Y&e^+ϋQRоj9 fr 2[';kOo8|{g)eI \$ll.G[^@Q}ⵇG%O9 y;-u4dsϊ֘N>%j~#^$kqbðqv+ I^2o,1~C̝DsϣŝN=LzYT2aX` ~#![+1/'O iHamiTi" ¹"r.= |HKꄛ-FTX2ۺ>+bS*shI.c $~ 3U5sʮrX`*KAGK)?B9J *_E$g+UHOC7+6ȳjغ)`R#Rj /HQiAHeT/8^3$[W1y$LL$ܯV\XniwJҜ^H^o,SC&8LM*>qC:F.[hXj4=^n3B0,Y5 I l1vf⼃~]0Gyo*WkrI?/R܉CwߌB,~ ;j0D2.H 򠋔b\ 3? )Pu_TUU:cD} "[M.*[hS>MRQ"ŗ d,*?)^U[I"1 げv[lQ/F o["򍐥qMit[) Uzy>Vsg srPq;KflUƟ <AJހ#2W”-]2[DfUib$ː06CZ}mR-sqK,FY۪ҪF|׃`;Pxb hY)?Zq>60j_HFmɋIHE)(tljRVM;-G*3$[ 3I;2t֒|T0G/NWl.+z6seVD]u0;dqJ\ y ў cr1= $*k>JK:Ϲ^uGXmdAu\cDPl>վrBG,nA:x>j'08/AQWك-j $vWyrxAj $8^[Q9Ӕ!⚚EvC gzˤUYS虃M9a5/gGNMR[aaexޑ29JMaI5x.hMc%g ?H~)ZƙMQ1DL>)W$zԒ! O0^XP1;rUM4hL2)ZW1u DaP- Jc @V[;r#Z H6z3LBOݓ9b䛅9*7xZi.c n^QKhn*2⯪'EYkub&ɫ\n Q cj UӖ@Q wqIZRUP=@\O*=ͤb}$L)Abh ߧ)uoqK5(@!Ƚ{=) J ՠzGUu)6<"vˣuŜƈ|Vc>eel_ݰ(UիhIV[pB_14Nnv"b&yע o":jhn|Ga5u ߹Û8WU#UkPdA˧ _NQ*Pѯe+k`6lo+"$ \Yɸzc+1&ʯک*Pڷ?X@>l**$ ja`O]8WEцڷ?!ʸkTb 7VZJ0#DIENDB`x2goclient-4.1.2.3/res/img/icons/128x128/new_file.png0000644000000000000000000001142214447111614016541 0ustar PNG  IHDR>asBIT|d pHYs7]7]F]tEXtSoftwarewww.inkscape.org<IDATx{p[՝?JdǶ؉cĉ4N $$$ Mh ;<:PZBKYJvٝvլX әtml[XvN[B  )IJAlaOI=ǽe=lJHssZ ((1@E9J P(1@Eg&}9 1Τ|2owlYXPE@=;W>~{PEFpUk51TBJ JHQ&0$`RjcrA>ݱeBS)T@j)ӦL["%Ґ]ǘIزdLB eڼ%*tX画,p`Xy#Nj:9(u|zRk>{Uʞ"{ Q Ōi{_}BF2$H!x3p$<{,l]B0C ?9q P/jcMX/T_y(S@j%%HdVUsi_"1g)@Ix:@\ї)VS3 (wᲙ|3rDbFBE)tq–n7Pf|oWZ, $?L7Lixb2@Ogg,sz%'M%ldE_=|NKSz S0XL,i +hJ@LX%@`2|Y,vu}veE+@ P`(\=uބU[>{wVH ^)/^F+-SY"89 1 | 8G`}e2'XA:$)f:qڗ%F3DVV@ ) Nz >~riBig^Os)ȓqrcSL2@hH^.ݱeɜK:@ :} ni`].jPi 2:FvXS7't.W@ 7<~b)1Vz`<HZĥcEFǮc&sy/j:@4& fW;jt YYJP\@JK#&r(G?O4sФX 5+@q!~gtr4y;8Å%B( ƾ8m+"6@PlNulg/.Y2M'U9ʹg aBg )mv}@GuSۺwjLj{}SY |gk7#:|8j{;xl#Rh 0UW0^0mLYCrSԐ%O`:OkP%|3ʯjd :;.e|'Λ %;A[Є΃[w)&4.ZSl.ǘ?s]<pB0OTZ£-'';%C $a@3l|dB@@g((6]WZea/Guo?_1OCpaNQ7ͦlް|OׇL:òyn]<.)%`{뺙Q1Dk W254WQvd6\5h&`{̏?$%T~,6!A[*x}zm5ur{A ߻ 36 :ܚce 5 3cwЏ:s'lk5=ea5a]NɡZu޹t\X9B3êE4rx#՝] \ kWۄؼd{V:n/\L}u?7严4rW;Ǖ0 ??ںj8UCAGp >!u)F =e*t+[5g7W0jU]Й)di]Kz}Q_[S[a܎0y!3rΰM4mLztlrt)Ws7 {yw-]1t{^U/ Ζ`Wfx#/\Kgbsᐃo58{eT$?ķ$m[)1D3[)sNSU̮ sg:~ <tWqK}6ig{?DO Ւ D6Okҥ9hW~Ndz-[p!_o QW=S a v,2ڳ-Knm%ܿf'ި`["ܲX o|G0hbyKEodSiFK[qZ=WkӒw?WFҘl+dh񟪾 -ρzA\&}bH7v"K´Q30B9hHm\0m:k^fP]nHF1 b]n_ RIt76X?x=r$@2Z5! )hXBKzL 75g*Z)sLl{Md {LQ(˩XjڋTy_ng ]ě F{E`eȡih"rf{JsI%@v2:~Lezt>ښ8cЄdFt|Xz? EEKCF)X,ciAYNbC]FǶ^6v?[mM8`X-5nI~/̯yP{Ns͂NQe,#13"`;0Z`O`:HNvKdY}7awΙYDfܥsZZQ'kk ΕKkYX{fTCtЄ@PCLA!+DF (j١NDX̋r/qi3̯q^<Al;gfsߚl4=Az< M( L-#uE/O1M-N6,uD3Q;p ۫vΫx<ڰMAò#ԄAżFf^q2':'_:#!~:fg7٫ۨrΠKCjsMWEX(.v>E[ΆV9ƭI+\'w2USP bWN4zRhnhnش_~9gD&\C3Bi_+@6KfB\窅n3\^_<6=*U-] ?ni̶li(w}UasBIT|d pHYs7]7]F]tEXtSoftwarewww.inkscape.org< IDATxܽw|?ݽ~ދfY\1clxHIB'O!:&`c{eٖlIz1it6|^}|>i3B)U D O'Q.ITu#6K"ū e")tNPC4JA+0ƣ裗 yaA!0Ēh=*GWX,Bꐴ_6RW_Jgʄ#X```^fa^ܪ$ FѲdεD@z~ KGqlrDW 7Z2*VTϚf*7;sİضGblo8 nXXr}8:zdAOWcR⃪! |8—TWظlD2l<e^q3λU0; qNy)O 2k%2ǒU9;s@+mB p .AĆ'ZOEt|iKC/! 'Y3W/Y3fK0;l߻c}6A0Nrhb3TׂuuyjVuF}fp/X*;c,0]T&(߭ʦ`r% F{:df&:K&rι%(|# #J#h-(Ͼ{Ąb(B@j'3';!,. 2KByť"!ϾjrFt:"h Ш)ˤsZU̘3 0BLyUy _\@9Ϋk],v0Q; E|$Ce?K8fΘ6uǜycίЭaOR1v\P#wj[(IP Td(K9 3c#ȱ^~ymlh"UV@QApanRGp=`Πbng=RhϬZY:L#T)#8<3zn/h@@K=s_ߡC` ז__|hBDyq44Bǐx*gi&AY@_(`Qn8$["w,ӃܐWGdȑ`g8w;ճ/RI ^Пzw@` `$z8]o^;5\`Hs!E]3ww?yoBcF sl׈-`U5{w:gd~)Dm(bد8K 3o5Kwr:?q[s￀_' Nag^+u`HDr_m |H(ȭ/G];hc_B>ln[E`CREKty?&'ɹ3 p<=}Z+J'N*!qZ+Yϼ/^&ixh]80*]~߂%w mZ/ IRۻ|%0t1pR nCue^ʖ]!6!]n>тcJf Wԇ0#GOw(ʀ'!,`֟\Q? LLE#ϱ+JF\5ߤ!n앨ε@_FV>~ 20mДQ6wk~ F7{P Cl*Bt=!2AA/;<;HO:(& irKZu-g66#XYk#k}T ;^p`L? E* `J We泟Vu̮ty+B;!haJv&+CsXl y w N%8&DP |r0WpLM Rgdڹ/^A4VR=>J&8;xLl ,y59D08SO^F ‡ ,[ܕsn_g o^[{ќ|b`r6UF- P_Xsm0õO9C](Ŏ#2C‡.#JaS(P #C{[iG̓j㴂$؈ eD92 ŷH+ENHZk]˗y7ZrZw3W y-i?! 9{ݝ:PK8f'D{#< !>PAPApnqOxo0$5ˠWFDJl'ͲNnVAZ\()9;3ʪvo;ڣ(bJUqols|ׂn_^#ӄYp,Mo۲m ^Y[nD=pAnh=YEϻRMD(S˳9\@lnJ@׌`t:p{9KO+> sg) hۦ: lWӃO%DM7$ю<}ï\՗BME7tQk nb&vVc N+$ P%߉jǫ&Q"xfIXR÷VYG@a H2#G6l-{1uNSMV0fI<᱁ogxṝ)W0zy!L>7d p M?+jt 6Dmհ`~ᖏ}!~ !#QHVnBP!_]"l & x?6t{fx|agv άp|Jujٯ{OtU{9LEjF|xj͞m7d`/"?(ۏ&U*{-xִDI js VPtI^IbB,5W?zWFչZt2\&tʦIRXt:G¼{X0JV654]Cke!{dDw"oH[!Q㧗[ #o<1 I]|a; sl4N011M7KHߥ U+VJWjQ <`&M& IK8Ȏ +;ϜDd 'Zy̽df`"q:÷WpOc\@Ω1\Yw_ٛ`9UibpHapk7#GX}48|+x|wўt]0x#Q{{9ilhL5g狏z=p Ldn!izgx4[uYP@Rˈ%#_'BҖLΧ:S1SQGKtX=[gA̽T{SA֨NZU\4KMH 5˸jl2OOk Yh@a0QfZ-YPYZ%PDã5',C-CF,|j"友>0c,cZ&P§4dz2OU~1BN̂P7ZLl BNл. ݖ/Uu&R t;ׂaW>w-EA_ozbSslIoBS)%"Gַ31ua>zg>I.xu>]% ɣkDGS*@džD֋MJرkа~̫fvrPZ ]X0ZGABFC~1ȵ'g3A2+U?ZW)K7 uU/E|u W4cA7yۻHeicyO}`q51u+@o?㍶y_ 0y `SL$E~2V*͉uکNP_leL Wz ?7J PP;=Hz *柈8qoD,Dq˜q~14t<`,'tB2;U*0) O=k}GV>w*rx 8:$@Tنo8x`1ܺabC`sD[k1N*֯6Wl{s>ܹ֛]fIDK[a0ರ:Fw"?^5vZx{H HM ׃y23νU0;1SDƜ@–72]kp| N${ ЩFUN,N >4V-j X Fl}aĶ&-`卖,h!b~OdZ%b!==z2'hIRAr4 >1H'_*Jtx1mÚ@)ŌB5`ͮ&y0"P"{"Eo|mZ ,Gx^$痻&v_O h'bi!8URn7 G)AJ@(t<4`NKcJDfSyz#|ev(θWq>Hx!L 9 g;@Y)t֜@UT{\-hdnE}ߩL:@q ̱Yd9UP[ìp_ĐWFu2)N`5r¦ϜqAḆxpޜ1-,/P AL13җC?!(ۻHۧ{:7>[R挕6eWUymCH. fO}NDB.̯x IDAT|Y u|C6آJ wnynwǫnR[LDV֗;_2GluP!_I*L1p~ϞE#C!&!~Y6ޔE=dG"Xvdw2+Fj"'N|>B6;Y:6<>As ;vf̉C|/H0 ~)NKtN% BdH0g 64ވx ) #-?-2% *3V6ΰdW (8zAG=!FvH>:< <5wc#!q= ˆ#(~ݑzjyytf.'pht!ojtKk[Zh C,QTX & R8& pomQ0Wh,*i{xHEa(' ؤTq|9ܹrUՓ{uWTy?s+`R90z쨯Clp@l<%Ĺ`/`t^ ytdH:M ybpl 2}Z<;p*vOL{u)D{}!|힣wyus`BcfP TLAe*x`6UHL:@4򁉓;3N @ZaOOw*q\P9?'{a՘|9ٰw?r܎V^Az0@Ni *^[7 C|rkw+K$J(bQ#?8Y%hdvp."4&b vIsʨWvpI K 63(Da)5D@&u5ˎWKuhA0  dXH;. MF((,J~%Ơ2էNB<#oW8K.7gNcr^Mx"ċӌL<5dd0~0`,/jTOK (@l0 2 E'scS9@FGbCQH7,;ʮb e~gJAe0A-#ѬPZTsnlvi_ BPBP?kΪ(#H}Jf4H/>O"@?R:G*.~־7LEl]ͼ1B@ MN(˚ Ⱦc! [NS>3&w l8O^k+X?^=xg5J&UV""Dw-'V[^b3[!}#z ,Œ XgWZ51.tX/&+2W7d3m+Oޚ("ġ 60|[[@zUfR!(&"(YZ&a"?!i dV4n-/t`ML\-7o]:ʇ&I=Zx`ԫp#pAu\F~}}6^W-Phg/TLG swlo#A5X~!_q 4rqu9ACmY >.Ghn7x_{8XF1-s/}ݒU9|N:}RJ GEH`0 F;@Ɓ .g Y/rl㕚ppR΄'e)龷Rƚz]y/BaАwCl`P8+84ǖN_LmqC)Q~or߄-b (@!p/}D+%lTPYrf^Pz q(*3eN9s=Y@u>5.XT*?Iӛ F}AQ_oU,Z" Q?EK@P[*RA "?!n90q6"!0ؼA6yc6 l ®.3vu[=qϫU䎙HpYi ^,oҽZ@:GfPZϡ*oө lo U,$oo*5!)z; &((2Ys` LfvvP* υe=7SCxmC ͘|/x`%z/K,+ȹVF3ǴKE 7M^ ƃ,.,$JD@hPĖM8}, aH$sr8k:&o_q]a0`4$%{H钉 !h쌀#Rfhg7#HQCZ)m!!wϰ{^plVPYAɷ+Ǿ؋ו.r[jB >q'UfA }a YT"Ra;rTB}Q5z|40O`zw1ŷx&jm'mly5^ % 8K̺ĝc(G12𩐪N{Lfr&L? ;/EA5`~l+"@p`)IAH{s''dV`3*zI u9At~3B *˚HNwY\".R% ۮn c,HElW&"R j*=61"iY+/+2 pil1^$c`GG Ijs{tj] a|/D(^tkk<,.SuO6;\Y`LOfE`~q9`45|M#Q +ħ'Z+s`͎:%W/e6(ӖN}s:2&ƃD N'@~H8֡c4qerȵE0I6DVVߩ /eB!_;Ô4-G,m9S ye7t|ɭtLx  ӍGm.c4Ѧ'`U9''#H>;Spd\A˂| K(LmȃWg໫8b,/y?[%l[94%uj!80R%h&2j}r[,'*&ȲHރgwڰfv`FD"PWH|Z0/Dh7h|ࣦ m!#k؁QnOOi l Z(YPu64ȄU"Q]d L™3} Qh|x}}}viTJTIM-~*D@? }zA{!CtGqtã};*6FqqnP@#i7DQ`Vu/|Ϝ^Z`7 푔鲲fh@ 6Nkw-.Y/c&/0AŏaPh?Ft2Gl31`^"Hٵ iYY1Y֋A|d@h=k ZΦ/ $0#|3ғ}Z%"0KJ%riւ:>*1Pyeɸac!}$1 MP1%F4NBr<µlρع@L\+|D08t𣶾oEDwC:>l "GB0wHrGq,/ΫbgOg 1_$I U<܄";߻؁yz:_ߝQ}l0Nv$B[j <_>̔^RZ ȡm'dmg\OJ 9^B\nㅝ$b;]O (fwW y|MzF6mykc}` J.k~~t G~D̀Fvw@ `S,OE-}2UBK?[yУ&OZ>!~5 :dž9Kॲ5t׽ím9 Zi ؝rF6SCt.jf򭶂eZ.:tkD*%ZSEnKm&|e82un? qѢ+ ܾL0-\Po¬~fc#$_< 8:O 'Pg^|^ե(,ɰǍj6FTCŠfKSECB)L:y){~ (@ة_` Us߻(( {ڷeIQ0֯?$ JC xʥjΠꢇ.1eM6$"an2yjs #] bsã?w%2dKN; aAw":>!J0`LYi$q! `Fw~pL!0 7Y1)=xsGPS'bv\Ϝ?ݝ =(uetOlҎ6 _%k󅁦^{87y ndA& @ F Mt`N!9% K|}pQPP"Wz-y<}l}c@)@(DpOVEJpz8xC?22`v"Go)9UT<8_Ϳi lF,Z*n_E:a'(RsM)y9<ՆA3=ϻ2k37n^R& ̓PaH$8 G:ADf\afqp lFx"KSH߻Bt|LOr\ي^ %}$z+tfq 5!rymC~On" r40޽[ w.Xd. P~ ݩ6Q jSY+-LG!RB[/<6`@>N6(:M$qCFqNgd2AD&5͏DC`nq|:3 ?:Oҭ1ߗ"]a0","}{^3|xC_e] gpqB6idfGE:ւS! %)7vߓ{~oAzIxܼ=*E=` Y~יxY"q+EEA׈_^Vg-pXOS?~׼+5QQxikQ7X,iK#7Iw"pR @e.+GtQOƆ] =,).PČsؚ55)' :^M[ڥǃ96#5`¼1k90xdq9gm=2C ;>7rE5*gO^>K&gM?9s#2zF)qSe]fakO\]ˣ#!ѶMĖkIn84xg钋Go~;'*'7bX>Ϟ}ts2lX=ABh=><6ef;jQFժYp{] Ss@Mzj,ѻQG+粓:g"h-htw95U3s*rkEsy_.iͱMO# b+yC8 6~*p fLrf^~f@43RƫFEB=M6>.k ljD,I#h8"tv!>IDATRc{x:wCAY_{j{5;EtF T2gΘ^$Almz;Z0Pkj ?%_ˣ U4wPre@A)rs=HDˠݝδq7 v1D|޽-z{3阶ږ?+2G@iϮ6-5UG@0Wŷ߾h5#U_ӹka8uaL v Z}ȧYWX-eΞXU(oFimBG7r."9xryl>""#6"Jٞ7J8, eɴ"5 3 {U;Wwo޾ Awww~"a0YɁ)!p|dP5{ KH7h'Ӌ;x5'!L> Khw/P¼R$ }2lyijRzGnqNkgg!bB:G٥&,੏G0hY}MpC-B;zQk՚WcI: E y*D8N•G`o7#KSU@#pG9@/Ŝ8 !xeݵݾǴ3?6C2!,ExG줒͙d\4' I/aC'&H,6=nOF'/ RN ĭ-Pf$odt/Q zwfN)$tH (tPl?Jv3u #ަ挲n9EfxEQuko/ F܁ݾ=#=O@ƚm9Esp4%|M>~w{X gpvgTP14~< '`ɨ`][D̗RV!$T@!Gʥ7& Qp."RZ*jcTAt DtR?;^a(c6Y̠Be0ׯS5_Ïgܯx~~coׄWeLၰV_eTC7 LVl3F$Rn?b^ #{EÉ9W b:I,!U# 7?pѽ* @9o${?ɤيFO]+Gn8@X{MzGW@ 56L7,F׵x]##pbhnƫpNASW{ HIENDB`x2goclient-4.1.2.3/res/img/icons/128x128/rdp.png0000644000000000000000000002527514447111614015551 0ustar PNG  IHDR>asBIT|d pHYs7]7]F]tEXtSoftwarewww.inkscape.org< IDATxw$u?=9myr·D$@ DHI%QeI]TUR9PKeEMZ&i&-  rۻfw'=;;3;3{G[^ pw/;}pgqw9.=Gpr#]Ý Sd{ٮ~Ma Y\PH {dX;NеV$-h1I&̿ea2M{2ƌ@4&u["c$dp[ ~4[/lSj3fmFyZŽHM_;V;xI \6;` fg]mumAW߷-y'[x&yE@ F%Ċe#[k \p6h0U4:voT47qDMFA+3Bߋ}2Im~T2DP _x+]@%PTVtAWNh5\h3Y+V-bdYFQdIDRa9d)RXrH݂tW!ꛙ_>y~W^ nTBxQEv@Bzkz}XG79j5U8c`FFH&Ȳ?};83fҔp\%oߊ&` !}54߈*jn燏4ՏU:*&Id=VXi6nHE2}.L5oFeĩ/g/̢a5h=li7j~SeC_S/q1mE)YMxDi kމ }4*8aw:}v_~l5oޔ܍$:RE4)"'c񅾗^O&#ϿM?jeuM2=; PpX;ID-I 51AQlOoᗷ# &{Mh4'j_FDBQ6+-Q bIP8TZg書P%TYvpgÿ?5w7dbna7zm85 {?}Φ]naӟ[ɕ(!(72{ß<(zUƜ'ۤCaS`j7hZjymK\Z\Twt>OS[/4] Ml _&]ugӮ^KeK#B:]Uo6f//qe,"Vmy|ߋHOYa4o5xA c>^C!bb3$i 0%x}=\[TKTW45Kc1;ꛝ/gcfaO ,.ir9jWEnW-1Q`gl8ŰwPX,V:JK"L6$^k@jDQD$D1b~'@`HIQHAC$o5[=pךrlrByAZL y@m2 ADfEnUB}8=;~5^ Kg};k(Ë;l! 7_ʮoNkm}Lj@]gIRB sW{t_ȋr lu[UmFIPWn BiMX\4Φ]M x1d53qa8B"LfoN@sYr 37Cӂ٘&2 {TQ<$7p~֦B9\J׸FHCEarb0QͿg ;T].TTMz, 7A5(@zC7':}/nVw%;ɧGN]emWaH&VFlGiҋ;Lbw TubOK!C&<$Q9.o(hm潭fWS,ݜrb̿wL6qG#@[FRɐ g(@hqd"wSBaд_"5W#W-DZ\ ._mh%Tm0&J6$C6oRb !:;6'W<D9oEb@AQJI"Dq48"M.$RL2`Pohs \Ϸo=H TC-W_&6J},QH ܜp~(ą7$ Z!׌A468M[!JoRNĢlb%by#dȆ(LƂU`2̉%ڝAEa`Ʌ܃3QPkh˦)ƅdb`x>'f.~2e2P:@tm{$'毿88VYC ֪JsES2s/HAN'{!nhHffh:0iX+ U,z Us,潭\§+;o J —׳_fkMvcG{Ά5˃&JEB< Acw.{֦.GO]}bSő+fgéG`'`7?7 oQePfBυo VOPWŌR}mMj=jv5Zc3 n5DwHs@5_H\\(*(,D.NXQɽ|Z?_~ ot>{<}`v9/~[w~M%,#bLz)ڟH*\V-ܵ/.m[-^ZzkU{w|#jV3{MtP䵥 M.z{m2OlO2$riȵY >\7āxr7o;/ُ_w?U1s[7S%Vvbl py,B$-zύQ C-E}裂h08"u=6uʓk^/6섪mOC?//ѵd,䟹-iך`ozdm`z?o&Q);P]ylWU׉a'9yh}LRs p):?g&5Q[v>6{ۯ?'NFP, @IeaKu!p:\z2Yҿ,/ :~fN^M<n&޿ۑUZ[\dc-~GIl:΋gA\ՠĂi&zt Eʩ 0gr1Fg/~Oំ2+_)HƚʮG>|rdۧ?$&y}gz&1II;vo{?J~/=SENk?7{[B!w2Hk7 xIËlg8fV+ .mO>ߟ|V4Xzkt"&|k_ //zc&~4̗vsi1ശ^ 'C'^ )Ph@i?\5>G"Rİ(xbQݖ 0SNĥ7&c_xw4azNN%fis>9=CD|;yJ-u^ e[/nĤOMmwp~`&@ExO}\IwO._.F<џ7zrQZ`5TY6NomJld$9=@d.Gs _%ٯ]:>Gڝl?hzqR⤺֮`5(:< '񄔼P;qa~i/LĂ 鷜kMa/-j[ _I/ A D,M\\[h T0gٍ͇?y~Gv\ű7r"ns恳DcͶwZ;7#UzDñB( E|3g*^ -^VqPl=xa["_&= )/*L6~/I/暚M^@}pFWN]F{g1t:fpYZ~gܕ]a9DGN/d0W &( "HJ7 ro#SKoL$g"g ֪+68wTI&۪pʞv 4l.[mOm`$bAjfݰ/^P\Ȋ'?? uhwxR:{mG]] 13W\L~G>X0cX(X0. LQ2I$ dVX2yQjaW=fz1PIY! s7l`?ue߉"e!׵Gs?H:auFjk@oI%c#AB&h0J`dGfvYh4,xs2 @35CeE!.`7}b3XYڿ|wznj~9;&gV[/ _A1?Q謊S+#1$I"&% pB$1Hf(`1I"ZnlZ]2Φ~M @|R-Ƿ_o3i(Upa=t (4Z 26wYpO@I|SWWTs pn0eV)[Ov(KO+ sٿHB"pz˃k6/% 1I%FXozҿU]'LjEdw[/4ŸQK@R%e+(w?B g7E~,z-6,+YK!H*_zcf[ feRelXS7 p6e=2/@_p p4O闍vAp\d.hCB{:ʤs!dC(&sc""')|eVVSYYn^5G}N 8?xT~8mb3#$d/NF}nn.`'J&f3afIZ^eeZki"zh?d'@G߳-@> Z|Ȑ w*+p6 pllvg/1A Xp1;Ī:@Id((wǙ&HD|\+?*ڏthߎܹ6G $h,.WM/Vϥ[Cyz$@蟽~GZ#W&27w?!̆ZKh ܙO!@{ saBWUr߱-w~ ٠U `jzm!P2EQf/zϦ2-O2+upB6[-| .IDATs =@rlwGXhB!<1^#M 4dsʟ~ih0{MywZ\ 4;;GLZUJPo nXS !C5k65Ӡ'ou /I/ c?B}gӻjO!dW-= p:vB.2̇,⡥g VvkLeRhӾ}Ɇ5l? hvjEv_SٖBzKS?l:QPhwKd p_3}ޟR_iou[r:Ta`TiVpYkhL Bշ2c#BLz?U+3-wfU,$7<p1$B "*Dk3DuzL]%#ZĪl(rR8 T< ܹO!.Lrs*'/~l?$fJr~80,9@Nr,ICQ9mN,.G`#$s=± 6C~ّ€;ZdpowG;!E.-rF2auW㿱U4Mu&\Bdsa N1䛼8-Ƃn_7 /RJ8@2;ǚ Z,mfWc暟 x}ʾ0'ZZ՗#gadeqϭavT[WrL!̆SZu6K0(@c<]Uӿ'Bú2x"M]ˋv`¨Xm~ZF13_{4 ji {rjݿM8m2±U$] ^폩ٿ2<~̆xRY^9J|O)лUh_/-cu,=sfY9um?_MD|˩7i1~߀]ܵh;>\}4iѶ9!=Nq#b`y#ߥW39矾6I+R7{G>H3uqq TAS[U#5e5k\Jiч px'.^go+:~ վNvT{qհtga[(&iMRҽԕnaS7W.ojbHI틐tе&x!,jM2θ7ǽOǪzoȉhO%_s5eՃ2~r5]p Cs ?޶ѿLˆۂAs_/ӉNr˱V?r"~k׃|wf•kgH~\ow;KF ɫN CM [mw;QTRfg} ql&,cN,ձD}m/|5H[2Y kH5@mOi9'zDA:{TڲȂ_hC.f!-♜]?W$0j|\@vk HMe[&Ϡh?ոOTgjCP'8@Gu}I:j&QfDl ArRGao'bL/7ܷ^9=}^$y&Vr e-Ɓj*nKsO<^)5[$Q翏d,  &/ݜ˾KC5~)t-zf»rA ڈF2Z~pe׉}R&A2Ed%QLQ2ANDc??{=DX!c`"mDtI]d>3-yi=E D6MVQk5hKflz2Dz 6/;ޓ#Cђ̊Cɖ}Jz G2dnZzdxf*t=*!NxȆNܵ(z[.Ǧ!w.=Gpr#]{qw9.ήvLIENDB`x2goclient-4.1.2.3/res/img/icons/128x128/resolution.png0000644000000000000000000000635414447111614017164 0ustar PNG  IHDR>asBIT|d pHYs7]7]F]tEXtSoftwarewww.inkscape.org< iIDATx{pT?nKHȃ(O/P PA|j;iѩ3eD2b b-G }&wos>3=wn4! yѻE @r$G @r$G @r$G @r$G @r$G @r$G @r$G @r$G @r$G @r$G @r$n%SaQuDOl45VXSRF-!Eey2h*Qč /K`ZEe3F{O8Ħ<@P )Y'pEeZk~c 0'R"33ηEMD\ QtmpfsQ$?{I%PK 9J 9J 9J 9J 9J 9J 9J 9JcikX8R4%@0P^eww.@]ILYt]Y>!8Xeӎz}zb J䉛r(£iVN)`ˆ^o2~70(ҹ4:SX@$]nD5&=8| xxfY}Gٰ_ /S8yVW~{F'M!#ƣe.K-IO5TaM}'4k `՞|}.Ow7)9tZ% @ U{XZM`@k6$Q+;8,xWt 6r@04GymYY _)M,9v[_rii}ļ{*Wa'Ǭ4' o,-a?@,#]NE70i3n:fKyà.&~xR?a񚪘Qr{(Ĉ#Sx`zfOQa.,;Iqi1GjNepڸpHRt<OOKn/\N &hNgewy }}pVD?tKa찔WU!/L-]՜2oE9w7|5tN-rW%V vptSuy`[)799\pvr~1):ݕgi%X/p2oV6Iˏ{vaw1 áO2RmFi7; >ō2.3<:֒瓝60zy1NJPYgnz`h|Ԟ<;M>v7D^lLǮv۬[@@hƬ~h  "| ̈́{=aw&[_{|ѰC4ޔox)xhj"Csh|>dk@fEs u*- MԵb0{nN/oo5:R5K46z5p2h'QxnS8K*E4G|v6Vir|ʴr>ᐏ%d=mq0n/lߴ&n{.\'lTjѸͽ n!bq蘟g6kcW >hcz,3vl^[ҁx6v;B_th~pߕZ)̾<7Nf4xN&h ٸ72}MyfN?KgmĒ\^Io4ΝQ`۟|9mf=Svw9ǩ5N.J¾-wܺZC]Es1(Ӹ L4*ZnRR8uJ#u3pֲ4m)Jx EVqJ;,cu9'*5Auq KUH 52NLw=M? c|g|i16n7!xk.I MsOěXc߮#q@[j \Fc$ hϷ'XqJ?ET=h4 Nbެ^ jB ~`h}T) HO4m _5w ;M5|?ctv-G5^^@Sl4zϾ[_#nn"i\ Z bW/m0.%:4ߞK ]]݁[#L@ȷ@#Xr4-G6xtE9nN`zA+vWzXཤ n1 eFYzo;i ݵ3=Xe٥iLdx^b\¤{:WVPQkt8;ՙm3e A"t=zwn6͵! ¢ 9+ yL50G<f7EgD^"m'D8H lƚ^d-plƕG 05WN5KцBEԩ?f1>RXT+y ~@9dh! cҒ|FZEe͟ؽ GjH7!ti>]eiߕ7DH%((H(H(H(H(H(H(H(H(H(H(H(H(H(H=DzGIENDB`x2goclient-4.1.2.3/res/img/icons/128x128/session.png0000644000000000000000000001151014447111614016432 0ustar PNG  IHDR>asBIT|d pHYs7]7]F]tEXtSoftwarewww.inkscape.org<IDATx{x?3d7HH()"BAZ]JUPZmOmZŧڵozk}{GKXjkQKQ RA!Hl6fov<$sΜs aa^cc%c X09L%c X09L%c X09L%c X09L%c X09L%c X09L%c X09L%c X09cD@SY˱c~널dl޿'-$:VѣlX ^_*u@$ `; ͂X(/pmJym!X(/P<\U($BuD[b;7Si &h 9ҕ Vh5 MO089uB3'1u Mși4Ҏ/ ҙȗ_~bo%+FlOv;]E3+(M!Vm r+ ra ^_Ti`L)NmaIJ!n8W;xlC;Hf;!F .SrP<@R\ow;7}fV%ף=ɂ*ѝ`KmmS Aاj|ZۋJ, eyIϜ\:W;wUFC=mJ٣X*DF8-1kbq DYmq]4.T x}󁕀CofNu !kꢱu`.aT,ǎw,?Ȗa&'%>l`=;Fb*/z[=vK̛ᜓ8ixBheF@SѦ _` ÁwQ:jdi1Fkph > /=15{?’um[K|9V*~8k2(C oG,ƧyG7=_;[b sNq1pc2} ..{#']v*SǸ4)Sa= UW}–R7@5ɪt6-5iiABZ8}Z8v O*3d$TۗWMN¶.j=}fD4ylC\}`Un(~* :C_OL eC#ouy5Y)~'Ho{ İlRKDQ _#1~XckSN%94M!޶~ZuO@(~7O݌ĵ%ؗ!U_>\03jKа=1_nG;H.5+n]ݻy„y ۾(~Y7H^z8e<i0Ϊ3>;z \lNz})O6P1]A(PPDxv~uBhZ$f•@SB#T_(NQPD]~ƣ3@0]cKKH-v5rt*]G+XE @˛]v)mv;*"!k{}kaʛM"s9il;:N 0TM`%$Qp(*3 [S Ǵ[DKT K`CyS2æ][E$OO_tUFT䎓A`ɫ"LN4'F;0R_kaBj(}Nc;t:';r)Z_;燁_Nٞ&2$rGoih#iDtZ#q_@~.+fzbviÇ) ogCbuEm?^/C\yJ6+k^JuU~$tX]ng}9^##K݃f5N^xW䑴O»c7v"N*1ƚj-">qĬb7 ' (i:Xˇ]$g X=3]z2Ac^B'8]z?Fe^P74n&WRJ95VPmϼx@ˆ7ӻ>!lkY%+WWT91$n'hoqƎib}J-]Lu|Knόfp}ʰqO?.2i:ZB7/q>PBE$xBrM,`i2ug;F3! -d(~9n~OD+-lۗ![{spnsƸӟYo3:Ab` `fҍ[\]J !Li9鷦rbPgM,:rc+,7}_@[_{x}ˁOngNv|ٚs<%Cm_ԛ"mbl~/\e0l\~J;?[IgOqi.?={[BpIrc@ފ_V*m7yk_+ N׀X]َ &;qdU<%S9}߭"Ju܏UQ3%nb >^7R:h{d]Oy ug`17u} .YUFPoM ^;w_0~XvF7*~yg /1Mt\:r o+AZ:㼳?®>Ⰻ8N;N?gnn_w]W%O: J{7sz d (~92/ɳv1#i07&H/uG≛R0Q'S;^0qP BʖVU: 9HHN7$7I/j| pWlg-6S=ؤ˝\ ]s/0^Zr_M<'/Mkg+~`y,cRO 㙕[:gE_Y&j~qTՌqe<р!8*Vi,*ONaw4Qlr/ɓJbgS_<x$SYz> YwBU:7PD;spz ["! cy\◊?d[ü gKCH=)!HK 4L7 \Eosu]RQc3KM>ֵ 끾gBupūݣjخZi^_F*:n~9"$?05 hL;G%wbM/Iez[+ny9z<58@0mptķrDˋ%~'9?Ž6G;{i`iO7#F~pۃ~0( ֠[_PW)%~`4#o gl-p<DŽKUPz΄tÒ&mن!9/XZq/гoǃa1Ǫ[H7~oͯ;9 Vylc˕"^K(e ?qS2 gM(ӫ8sr$*+t6:3;HwBJ/b ^_"Ok斘73*4Qq)B 6 o|wa H.Z qC`JqR?NUDuHUD$pW8ɟ@ ypC%S >u^˻%лZ3 ]$'+~a `x}9ೀݙ%Oe[z40x}q$<.+BoYyr:X09'X09L%c X09L%c X09L%c X09L%c X09L%c X09L%c X09L%c X09L%c ?\ IENDB`x2goclient-4.1.2.3/res/img/icons/128x128/unity.png0000644000000000000000000004232614447111614016130 0ustar PNG  IHDRbKGD X pHYsHHFk> vpAg01CIDATxw`TEnͦRH ;A Dņ*vQ*"UA:"IHO6پw?/H >dv9;Ν;sFH)RԔ]eW)>9_·_g \} Hʎ%q&pύ;U`kqOh N[nl;<Zd{}\O|eޣ硧U |oXZP/Pk?eBFްt7ްVA 2}( ˆDݠ`:.e\(e@f/wP[J_ F*ÉZSIAt3q5wY {!|'@~毩ACd9\2J.3޲PVnL@Gyv><ٍ73W ZDOke Dw8.~Ô[Uٮ| @yA<␲^9 "Y-ڲxl}6DJKcco}~N{i !jRJ7KF<\ =wDIyL}| RWgQ{N?2y u3{"7}~rhCv p MLohT( ڭj$nԼ\ &'kH 8% >R:f>λr* '~ٯ{dtGA~K9["sy/dyo)O=r/d&}=ZV_9D4wBQ>`H`/cM+Vmp1]t!)탵Va)P$re;(pIE\JUGĂphyv@j Q#WSJ؎G ޾뫦M0Ƕlm&Ԕ`^ Eڣ (w\]Xxyϊ;o.)L/d-N}{r&=9 6H VP vo2)yHV{1԰v1r?m!(\F"Pk/*@DctG10Z!JQtgV\U=g oBQz)߁HT>?q:wҙ{!d=zH+gKYy#  le>2DRIWU-`lмB* Q߅*[ժWMh m[Z|=~uަO-RyGḰ{.lori^@~$@0P,k\.=l-_aIP]Wmn"@͵';:3;XJ}o ~}4(uG.*SO:Y#.q ZX_Kښ ρ&:dS77D b,&;ΜÛضA:ƀxXAWS__3ȹ[;c~1<ȹ=ma|~Ykj%Jmѻ Nkd‡W:X%ZsZx˕P;h׾F:|\;/}!W~?ٯ=ڀwqqcWm:SIYj[чΗ ݱљwon$86]'8-;UhҮʃR"H,ܠ%k!\ #>)AR-Iܽn˕y5].Ss rGr6!b}$!؜%"ǍX-?bPڨ^מFX.))=L~d;ē%9>|Oz7/2Ln[d9ڤ.r \Sɉo4oumhygLJnjI1\}#h@)}Ϲ7yǃL!j_Zawb:I;Z "CE-Ƶ`6h >|t%nձPs:ld J)k]n;[@㞬OAZo^81|Vjr[]~O w@k ӳvd\gv Ф4~ko*V7qe`WepW/_xOeoG ?ESސwg.o?|V/R|hw)[Hp4{ZCP1/k+JANCR2μ';Ëwp\ IE{Xruo׮'?_k3WlRr" ɊrA/J!s5lXo;ڒWEqkv '6֨g, ^o Ӄ_4.G+z'VX^@NZCYU˶rhY5G'.Tt d|l:1\JN+J>C)A!{#fVY*Sz=+m~Wm)xQdwva'^.BG$-^ r# ;@>=v[)Nnmxx8=22 8‰[r {^n.³HB ؔP?hb i;-بA~AM4p\׀|].#clMRfģRvHumo3(@kwJŹ}) 6Mh&sONE])B-\%w"os}1>s:w_SYWzџՏ mѳ`_8i,r!wqG!Oפ;'T-=G_[q`,(2dϛrG/WjM:Eѻiਗy_A.5ٚrpVa$b޾t^>!g7ÿe5-9+ƞ@&kD`w^`dn"W-/' B@v? C8++9,_f^v ${~ ;8R' .~T $=ZR-2k$#.-Efͻra(jrUhs{_gp^ؗ73BV} ^})[0sΑ9#{pˌk(>ri~nmZSYSޛx|b89qcn[}p3_'p#{N}yMւ< ;3T㙲n]̲)|22x{0s:&r唳'Cq̎ 5S'@= 3<91v@Qk_9mva1ܐ6 2Rl;(&@={ɷs8zOuw;^=8_sYTkO-943@W>܇ ^sqG^7WJ{Nh^7V (}Lv0~uBvy>pf':+%r*Pqՙ{ܼi .ex(AScjWMkz/,+An>b|<gcBvz@ T<\ (h1gnزo<. ߳G;Z.W+@<CtwqƓv{i$hmѵbXekp⎘P}n@ϻ𔵑{5@qyPS9ѐsׁONy7rz??x7cy\0A'T ?ej'Lm (ZuoMt\y^ATQV&j26nW÷p@/`&Ȫ 2H/ kgdW ՒɁu׋^QVpZKo{m>rZ;c\ͅρg3bik'":)[ukz51f u)_eK>DU#a^I>MΗ=e(0btmR.iڨ.,ǝU89}ycGs:, ۽?ObPS[0tV1sqi[=`-˩6W+=7;Χ<F֨octNY=UZF޸^۵-8D3e E//G]ߥ${7\;Ɩ!lJO1ehɱnpg2kjޠPP%uHgʻon´#ÃicKǃ^*9zX2 A.i>K;h(a9M0{$k7*n*ւ  ǭk} @kفj7*ӏ V-WAh|Nq̯\]S] dWeR9bAO5AgVjmY/ >]4ËR0lI㸐Qojkj= oi_2R_SY_QVʣ`hoM0MnN3Z0-NWƀ}Aq>#ɮ9&BV18'm%ēj[e ('A VG-tQXfF1jr?X" |?@/@ gS}LCfZX<(l-BԚΆc-  H@ޒrZ 'f2W](䗎5^MHsQ1LQ' Dx\koCW- 1em텣nV Bb4PT+@L*lpd?vV)];Z^:m}x TX @ϧ{Ad`.oDN[j4; XvrL̓sZ`c_ZU ˝lo x3[Gl ΐDZ QnWB@M40 N݉Jaĉ=W01po/8TN8DX--=Qo7Ww_#~] 9/ |Mue{;{o\GuvN%*R+?@+6J$_ޚ!+(uxtW1ɸk\i,9g;-ۼXB'-LKCkfD2YMu(oZQpIlϗq\q-`̳NؙR xBf h,S%4 ALVAL= Plx;/3\~2Sߦ7'`K3^wuNPPTr()gSQopuΛVTJ |_ oOW熼Y_myøB*$QY v '[!/(k`1ET+USppI*J}EOCƛ;ӎbuXb HqHTR.:FPj ZD y?3g_2y Y/ 6#g^p,xx_< DS#lڞ <[2b[tG;_&֘CTnK)+wOr.9A/9ݴm(~C0 >a bPZqiPp2gvˍZœT0}6%b@I<0TL5uSԸ`l/:5ɽ <=쭜JӖLoзpkpSD N`0K sN~ա-U{m]MQ[|o94SOc`X*)yIGl5oOPԢ3AW+(, .zk`K4 /葌`}iOsZ/_Wl e=z7_W ;ۀUgAYW#AZZ?yEPb2.}wXqtP05E!BzK.9zopWp~|б|]=K+H%Ȗsr`_ N}V@m ԯ U;ph&&{PP)e*}N(Y ؝02ŇMC^a*`)zThw7-|#R\=?@q+W2?ٖ-˟\VR&G-z^_.wlf˭.A~'q;aJ b!Zc/Gp #?xVh<98<1i ^R*Z!ze=`1h%ia\-+fFcJ|ȥr cIwȟ  ; @0}@ FU[@lК+AWg)6Iߪ?'37i9K.p> DB3LoF4Ci6T:A} c dKH5(*ʨO.mz'w,*W>R~az'I+f*%#ۃW4vDQ^Xp5Ԫ! OCW-y oǃ- zO9(lQ} [?fo||ۜS\⹮j s:< "p4)K|S\=_r|N5t6b(>ٳ  VK;rwDB}ݸAĸ+k{or<"mBljX E?}N߼pl.X7*y#Pɭ s}r0@Cmޞs;|/8x dY'5gя˺JX9zG9 i}2| '[gGix!vUk\H _=d}S.=r Y/q} rR^WȦ1EFzhҲnC =_@coQC`mN@[mC/p)9UY Ro׀埉l$ds~j ={V)'3͐Oʇ!@)nפӠx46 垾=<'&)Am4;rnZD^\hRk[SkA>#0"@Q;GA꼵Uyl"@ ȇs9,Fl lQ_a ` 03_>tOk~,O^KZ}<~q#l3JXcz0ﭮwݏ O}M+suǒzDQQT_AUV~ގ`1r ȑ',LN_JxY䋉`:XjF;1;KY*vW#zGǠp ̞> "d; GN],}?{/5cyF1gR]n>4ڵbm` I[rV9- !!-(;ԩph_}g|o|K`H>eUUWQH@&'倲nrPr,/JwsF™nPw>I0Cu BKCw@-xڷ83g9j?]3iش$At_1d_`uYnN͆W!گkj -1( n814k|z_S VKZ !fw{H%U`\bK顬^PZ_W3 @e*kgU5eӌdʽYVSݰ֗&Y@y԰ZtCmzU\$_k`>(EMRVVj&h)"pӔ"A8$>z ❳˝*0H:G`z,t]P6l|?ysPpy J?Zzn-0|8|H2j-}Y}0|ekd,!*M@PcrID>/nʘhxJvlG0԰~R:PYh: +'.O]a>b| ,+#Ɣ'̯]$A]3Cʎ[S- sJyKXY"P@ MEJ>f+3V<ւ'=r%Lpq",_ŗy ?~AW \q|ÜZwkcf-:ˍ磢. ׭ W_]<6\B ;npW)-#!Gq lirCBfQUC cMσaNT呲6E[@Lc݅ibhJJ_.+E?e6^yG j_PZw@ctm<*Ծ{ 3:,÷~cW`?J?噲CZ'Bx ^Wޮ I@;o6j PjjWmה#sN`jU/m g-V-kSTW|o6]\Vҝ!?@ Zr!ZjTW++@P>o`{87 |LGbwa7yQA@bpJ=7gM*| S2ɯ U/BC!!8$n! -{!|YBɸi OJ!RfCJq|"qg/1D(_|n8#j9C mvĹ-8Y׽u&RR%5/~3p||7>"5*2,\&'B:@C M"AȻ߀=1E`7s{VDV !Bd"Dr'^aU4f= (1t\rnV^+NE|CYlK :5x>ČTBZ$ R!W]EKA$CtY?{W=1OpwDXƕ|sN~ fσY~1_E ]i_.°n!f&о2cx-N0 yZ 75O|t 86^>\(ՊJ X<% jĨ\3|]-M ,t^"x" nTAJ-9g@ޛGgXr.zyϠԵ`Ծ cKU8 S.ZKFlQ3*u,9?K? o$gO Db>j-M09y T~'d{\rvᛂFBؑ+B0|tڴ}O~{ :Ng*T'㜟o.ŸFS@| S{]AIRfdQ{BW ͭzc)vd "e{mu.:zbz gW+֊J(oHqT)7U B~P |}kJWAQ0 g=QUC2Y yQ/gƥT*f"1vIA?Aph\m/}ċ B V.73D'V9?HP=+8' 0lb.CAذX<Ĕ$:YƁ7?$ @{z|XNmfm:ƵZ(L=`Pz``lJKmzo~:Rbz2iqY<!/Z_S24R'^~=R^˲sSĜ >۲#sWe7?_Jq+ޕĞҐAP?{w}ZuQ{u:jOab{H7!ړ^m]]T{ۉFeBخ[!rnWxC"H,:NY2(W0*8=fctc6ÀNLًW~W׭}ȢtK} +% \Ϩ q$Pif64aui (/n \yanS0-)C)u3zJ Bd x/|[Jlf8z>OߏTcwL>NPcíaʕj ǵLl~8> GbFT"cb+4@>pat>W;+ Oڔk _{1oe"}@6`hlVtb6sW*m{T2nrtPշV Nbu0gPSv] Y E1u/;RTX9y' O?^eX}QvxY0=7 0 [`{98`xy$P9H7[#cDXU| ¤@0D6bYγ|rrudȞ<rܙ|>>oÇ] 7I,L,848k޲VᯎPQ$0(aS bbЖ7ϜW=?CGm.Nف@'8XnsN%8g(C}`QMl +K@e}$SC1+l?! s탄ߚ~X7~G-)`37,8#K%/\ ( Me ›K%T38';r3A 8mds1y 9\"6#d7pY = p=؛z?!AEm4CH|̈́[K$-P4X2#vQC,f-@0,e;@U|<-) ȝWX_-}Z r̕/Ca$-CH"ܶfTMT1DkQa5*? ?=}GkF>]"V-BXHc0LTg|Mrz|]z6spޘY =WM)?Y^#Bޮ#ߥ/m?pTGN#G<} -}n}o#Џ@u-|k# " P6SGȫ\NzRđ *ɶ/.pMͫUtw^tQ>.*3,m [V!N|ˀ3=C6xW8g{~e? o'Y d/}4[we# y_L'Btۚ-߸ ~8RB_H ktz ;SwsɏC)s[z)U },D\Cݙ4}uYحlATZz\ |-3eG|7w 8on6@b9X١e`xl XǠB¯xgdcRz_*澧TrN=_ flM:@cu/K謦({@<(@-& p9r#H^EYE݄SC3m&h-M$>6B@rIUKC',%3ә+>\8+Pʁn^3nYx(3ŸZ f$]`)xe DTmCopºɴbZy&鹫cc{Z E]njA:A5H~d= W7fnp(sr ؗ{󶁾7t/_ pmby>mXt@h F;!d1`|7ɊzL6(ZKUZ_:Y Nh5B U=*Q%]ץ,}zSo,[(s>'|D_%sr=1[IUf!\Aδ0[N}'XD4Vs/ROrOAAT- f-C12kM- уyemM E;@)k A !ipNpG>HnTؾ Ocs(jc?Բs/GWߐ81|s_8qˇ)!뻽Rm|ٓ Y޲>b ? hvs+GP!vWa@oAxJkc[]˿v( "ƋКF9_@HjNQ FNӭh+C{>*me,aH~{Y[wb:a E(=baeiRDm',{!jz xgDm0 ^`em͕ );t]`,Sdqǚv{ws\N(ܾ=2J=ioZ뗈*}~Pe-_7a.n[fbODER]| %upgGkx'IY^{!8e (IS!=}O@QRyi5CxG=53ʫ8Q0b/X״d Si:"ށ(CY7j4VBVk  m:ܒFya/vO+ұ,{nAu|^ G?0\立?vrE?KYU!w^xz1a,z#Aj^HiUFՎvլ?ەyb;$nڣ:P4C?X5/bf#*G Z/)&^ y dWY9"B\.ZUSor%xsE{NMrxւ>KW?g/\n9Vʇ˺')@ @<~5^ ʯ0PkמOE-ϴD.%J}C!URiM jUebUVh,4. ..pI)Mz4$g?@q~~ 2{^p㝉ӐzzagH(<~");\śg1?7&90e?lija%8rO|%?2ʇ[WA~c`4{1ZI[V=}N~. E\ľrZ[[x&YO =--f!ཥ NurS=}{Oߠo9AVq5> =xU.rAҀ}!FQ>"JbKkw\x^;]\\ <= u秹gQɻˑ I9TNq4& Z&u`xUX0ƺߴīj3% 5}87e(hԻAnSW+\?'R"%tEXtdate:create2012-06-06T22:37:01+02:00l;%tEXtdate:modify2010-11-05T14:17:07+01:00[tEXtsvg:base-urifile:///home/mike/MyDocuments/4projects/x2go-upstream/x2goclient/svg/unity.svgɷK|IENDB`x2goclient-4.1.2.3/res/img/icons/128x128/x2goclient.png0000644000000000000000000004532614447111614017041 0ustar PNG  IHDR>asBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtAuthorHeinz-M. GraesingQBtEXtCreation Time12.06.20071¢"tEXtSourcehttp://www.x2go.org/artworkrPtEXtCopyrightCC Attribution-NoDerivs http://creativecommons.org/licenses/by-nd/3.0/e, IDATxIeٙ;o7 /RoOWx{Oe{D:7ZP=^}^<ϣfНlSUC|+Z߼opOgtW_Vp+_|seaz?B?N ڗC0(Nj#!xz,/3cT ?[\X'K="S7[՗VwO_.*a ϗųYn,3^3y`F0Af9HdҚ3?o~'w/fk4+"  f(UGӓDF?W b}Ȉ^fhgX@9~#H3b; fdwo6k k} WVTJەFbsg)@N~/y@ .R0QQ5W)y#ē )%'}8X+B?s]_$aj9wα$9ϑxGtzS)y4aS7F c?j ΓETŃY_zH"~ 66B |j$$Ir!G=*R $&Qv_)C *A A+2c M%A={'iw,^BEk.{;bg ? ,J)A i4LNMh @ H>r||CE%l05cbq218IӧEQJQ{Qcm#M+TPZ"AڬLaI\'ғx%c燄''.>S ()l0R"'P29;E^gſZi|l}ٙ: R8omS._| 1{{{#ethOxh7pF~w=7׷XZZ^Bfk׮v|>$ IHM?VDQIbE; U:qB %aNZ5$'SƠAiH4xDiɥ vi4$Ir޿|4J$qbXiXNֆDZk`S ОF!A,}ʡ^ XZh!y>x>F@{jV#=܌R4r 9><$Sm;j-w>޽e899ժq-|߻0s(a":ol\fIqth (mPHRQkk9f^-mvR%(UAk D`ocvW2 ׯv|.WzEVmӝFeDRsMO_Korxdo|~B7zjez6ss3J _z~L[k~7Tjk;RXiKhKKt߽Gg㶉NAf^AkҧT39[31Zs|tgO_"z:{*_3@V## F8hwz4[mNPI!33Wf;>3Ox[\@ۦ\.>-\g.4Co8Q*q=)8Nn8QqLkV(`dp'^ =3sF}x}6ן25H-pEJD6A`֠\kɻ_~nx|}+hNhR 0!0xZJD)>^õs`kk?Ooc#DzaAkj+/ћ^;3 exǬ=gn\ pp"6&KU1Hq>'S^QH)B T\)?$_o󕯼:ABKVō7&Vlj"OR?!IqHkTH6"e`t~ b<)3=Y<|CJ/%~G=fwA=Eޢ=5/xPd6D'=i N9ܹN~a% >VZ6nTԁ33ư`=ES:lHٗQvJXk@P XT7HgaO=╗'~hpt|B?N()_9"ꗺl2Eq1q>{zw?}ё&SS=J^HicRso e@g69k߆} 1H[FɌǂgD9FHGơ>(mv֊(lmptQk6iv& +u{Osk67Sew{cJ:!JO II [O1?s,jNُerzzl5N[ٜ{*;>ul_d! TnGcݣ\%VrTcHP*y`f*)3|#^=5C [Rh#5eAܢ4G'll03=q{?!ZO4}qX^2[[ۜ:z}QDoEQL$qLRh5 eSl2Efw)SkYY.V},I|_Inbx׿X<8'ROhu/q.JHU ^P}e3@ݻ\(~DяbpF`Tl .%2!4<鎝/%)\sY_yLeKXoўY_]~U*%(MElnl#o:''|耯h4fH0@:JCx)⤏B2"FH#&Ho e €%h,*Fz6E,(aJ!̑' ^'3/_tR?xgÛ;SLLr}r|(U:2S#h`ŭcD+X~L399h{|xməiRό?mi  ÐvyҏCĉnF@i_cPHCDN]' $X\tХm@YZ()Pi=/ O7Pdc}2(Sp$OW(g rr`MkH* 2N ũ[hߛ԰M$I9IoM4^xW:|*%J*Rz:F;ݿΓxxg1| H@cssC`<4@ ~ U*ߜfIV ZQrD;C=a.#q[  ?ad9H:̾T",hL'xK|NmxJ+XyiD}7ci0t8y]޻(J"[0˘g3`{ҳHO=Yq! 8КF=ź7=g[>H!Yӵ53sR  ![<}_>9{{<| ހ?)p `=2Nm$v~Icbql B Aƴ8,1ڢ;aR8zLN D||B>9,ńG;'M&?ݺJFz>zR pe^^ V}]=9em !jqmIu˽N/,33fQyDqQE BsîL+Bsc0 XNʅ;" :F6X v J! qKU-798Ӝ] ^N~J7CiKS6=c#zc{<ْ|yjg[UesB#PJI\T8qǙ.7Yn@)COgܐ̓AJCC(,hNЉUbGcbu@k12'yݏsvRK޿[ar zÆ J%xߨR)]tf/1D%` Q:v bg [ck g,>XAY;Pq{ WTW1q,߈axi܌vL!ϘN%ֳ5v޷nȗ?@xo.9B `!vwyS{&+f8NYIHb뫫8q% 0cZ K{y>oq?yg4]硢qΛ?[Q7X\&c@t3LT TkuffUNNwIA TB$1XgF!+Wh!\; ȼz^{ws϶A`.K+=lpzOPmQd<ǽtc/OљY@J-?櫯MM~cf ~׾}̕h{ ?c Is8_`~?I?YWL`nYJ>tO2&)ES b %n'9N1K9FHҠmP| o!=f-J8^)/yo޻ll>p}yyh7fU룈x>=~.0?fee]N\$=A &`G+PX`g9 8 VT󥤔GKf=I۸.0˿Djkr{>GjQn`jenM+;3ݷ1{s4=#@5䆉 C Lj. ؈㄃VWWXY]~YO Q5v]l \@X_J,IZiHyGV*+O 'z<֯^3ܯ <\cWY',Hӽ5Sz]{}JFҕk4=QlE2~W<(8qb? ;q}u; IDATL4*zBJWb @B Hci~!2O o $gafg%/ B$B׿0>IVjT:||fN#33?;}0u 4Z5k/s36@ o:+ GpϏ@t~jǹ c/Ë@ Q),<`KZ }E HM$ԚudGpb|ʛ/^@7h3|vo}caz~!xFH1e BB#< s|e_2.Ts9:( :C 0FCm2 URW :qJc@NL©ќCMr Tқ>G=~gk_ִEEX87D¤?s\c1@=6~rrǧ}k " D]8I .$Q%,(! 9m,`V ו#A;=hIi}A oCˁ/}A(Juc?[414mre}̑a sf>h ɓ'lnp|r( 6#~B_j jVH- 5 Z/R|FL{X{y`PF`o?Wzs|>7?^{KT-rCLi?Q(es)YG$;fƸ\7%@[zdt-sR~^l5 NsDSO?[al_*#\<}QWao/0Vk7nқ4pMq׃A2*HϝE:eEډu $ms@RWa߷͜y.CKf$am+TBr=@PP\o}_?X"x"f,=R_ c6)jU8D~Sw!Gs[brTpCY^ s j 5:)QmkFwcgghrmDH?X|KJi HcMH m+~, y "F83챈5w TBº(IsYF0(Q!Bgg+mF#F"POcg=F5w~O0kz{g 痉q%#v88v 1TZAfX4IKX_>0fe>U@XhĪ ( $E~Gxg/qN7w>|oޘl3]3ڽI >@{o1;;<|gP[ ڷ !8Ilf-V(1`>=˥K)Ȭ-L\gk,5xyw9:f,|믎ڗ_ajv՞ĜT d?C̣iK?~\o_787/\/"Wa {M`/VzZ:<{[ӟʴ?Ӯ<ns;=b``y84f tFJVqN=ąqIq~*e;1EJ-ÓƩ'ľL$ ]ũs|v^TSͷ=j|,n*첵ce~c4Dž<Ƶz;U2\gb2(.$ OHvA giUvUv`lZJQP2?+Apj!=->=|=~v4r6*P$Q)܁$ CZ2T6ԏl(V}3v MB~Mbsn^v8) EMpә'Tߠ`TzjCߘJJf7'_$50 -н,A@JL-@$| $} lYaKt"Np3P9o1" PdPW@*:W :OGI^<ڑ Dl=NNR)H a1 ~7q6RVVf߿ܦ=`h+Hh@H\`3=g=$+Յ,Z !;{¶ӹ4AD3Gk4脓5ꃳkDoD= c֟0@V?MA_ F\fx^ `Vq;Bm@b2ë 䙫X.G0f|*9emɊC2RCEoAi뗀tLtf+>{L7x4܌c:s/8zy!{nr)3{0"vylq>& m ۔o(a$(+Zb]jqpVLm_H{O can~%|?$lTv[~TR3JxR ޻k.,PPQ  3f]=*mblOWi|Ad=`f10qޯَ8,=pYvVOX #:W8fy|OQgvvRZYa0#)n̎]8I[+]RZk4_Qi5U5ԗ~ӧ3yFM*]8ZֆfI֭[M41;wHV B! >aff979>{ϕRJaHӥR1wTp(FҰiD OA+)IDeF_IIVsOmA& t IlhP);As*a:k#fsK&ڔeIWxޣ]]JktmVkz#X\0aafEa#+o5N[b!h qmcDDY܀rFcZ)LOkH ptyL$CeXur:U*9&fSoOaT̉Z4v;tܢٛ!,JA{f-L#r^4|OOo0=3Mb{ $!}荣ӓS]yxV:TS$2>\h1L{TP(Ϊwy뗕b(m MtIb06N M\@ M(_?}DwHk#HЙ]:<]^a [<"Q_H n7[\~No2+ On4c2i'1I]/7p& IIP-4H*H,HTBgՉ>G[+(WfivR: 3Oc[Obrxȓw5&{ 3_€vMVcQ7K1y#QA5y[8cFҮνE `h)T)ӼD{RkF~iJo~ZI6T^R35Mg>D8ܺړW_V+#Ex#- ۨ)l\*Kj2H$O9BB'<){ iH]t|-l,q+KE@(R_PҜZS7WQFvO{nݤٛT*el;/c&:],%%'q5z6j`أ@kMcN$ΙVL71V2lPvd[O;!},(b 9ʵ'9bo`e(-W/RkL#3\QVkO𽋄B6V>-gW?1en;<~''gE E ".ۧvk:|@4d~F RB!, po+>(Ug^;nv 'l<ŗ%W$u?fsU&"t5J@kM+k apEE9*(6&]A>#GN4?qxӯh=+hC_Ik7&l_Q_)$FYL<30c^b~nj9<#_ϣa̕Coܸ4JrS˿,#"@$JYy.=Bw+$VM3w:ԀOJ$!)]gQ+AP,?X%:\ \ mtAOբV._2&*Yt }%c2GbGKH+6pi_~ɗ1:bKJ4J!O~`u$ʣ< MR4.̳ܾoE ೏ufgzV ™?w)L`AvŭXYe}mIAb+GǠ5YQY 1ٺRtJCYo@/0n pb R ۷vFX2ћ9@$>9`ch}OtzVӗRAR;=GchOp͉穂qDž6R#999ɖl=l:аgDF2m ݒ5J%ĺu:q~Cm)/&?0T]ͿHx°C&2:v!OgiZ-ͱ>HapȽOrUTJR ObrG㓾z4DĶeL I2,^ -4CHNΡ ǙNiS3).`t88K/%gO?{?Lf~?lDTff~# .+˯p߽/ 0th07?mrpӏX}F<88`ggcw>lTLwu90W *@e^II-NmC_9# VK,(v6x3?{z u(`#J!S=޼%5NV n-iՑ.0c,/{qpI84J.'IQ9@}ߑP:bw.QIͶO8\{F88ҵ+t'')C$d9x<*H$D,n?W27ӥVznCV^qD 8tس.,-KĬ6j %ºEX^[K*{ :)OzK|zW?e !ULt&>~Uoo=8M^\.P܋{;W*<L: M dP\4$PPA c($\ߵvѮ0AXbդ;D[<[~w4nrcqNK\DFaMwL V,.rLwo͛sz -(}>UpIH[[[If)/q<`4  ,V ;$Q%j((p(ƁH3(r_,\! <''l='R ŸiRW f_60ԨטPx TsK]K8E}Gg') 0j3; (+ % z MS)1Ig+<.~6Ky']`r3'FAPWiLt/4 yoss]KK˥RRJ2n)%!bǙzPiHܚnV[ tP4[@N t[(wIM.Toz gRaHmE=v6ָG;mﰵ,E6#@4D ڝ6Az5l9SNxλ|2˻Οx-տm_eztnZR/ I?JHOӲiTQ)T,M kOyisH!RנR!:=b>z}?dg@lP /!]>yk{Ohi\y[GL|Jbyp1[{v(88?5Zׯ// LAEр]KiEqUGcMO'|,\^4jr۴U-GG}ZV6sp\VWW9::"\(B©ahE Q/:ڦC3NFI11Έ>F'x˂7#8# x(wDyć1Bf+Wn3Up% W2'D]h. ̣ d,4t=RUn'/ ǵnn5 C/g$@ɗtyQAfɯmA+/jMY8.enK^^5NV0@X:y(40&KOR)>nL8{/ȁx"c >vi* 'g,*o|58`px1@Ǩ!T LOO(hbl`> :7|m tY.V;r9<Ϙ@gL6mV )&'{qeF#*E|Q`gEtc3ȤF _JGƀ'OVVt-wagv+. ʡH@ %LCCw Q]E{ $J$ L9˅DDر{ٙbcq<$.ɉ|ez_;3k!! #_ !}8}(q?N#F/)tXYY! QyҰu-VX,r*yB8|7@wF38DpcAX0ڲhIK6TQg6j(&P>ٌ4 aG'x8xˉe 0:D%9cB46vUTˏ3 *k&84^ۥdWQ˹w !NF˟/(0 xqϾf!A ;{wRBC I ̔UR6<+?uK36L:G7ň`( ;l?#oqܞ6|B͡p.Zha{v,Hz}O|f|QkEWi?՚>nߛВ{W+Vazjt*? zID/Pj:& \&ȷ76m얪oʛ&v JmVt3x3:V??_Os)~' 7; goHy^ӂ\fchc\.{k=H-qLTE!E'bn$9kLW-'0 K}z!>߭{LRxS3쨿ځ:,vf$|$}u]9*J`QK X>LDV2t'4æ>2Lv gq S@XQ7~MۨL<]! "|'2-o IVZ0+?pI!ͤ>k\Lt bIENDB`x2goclient-4.1.2.3/res/img/icons/128x128/x2gogroup.png0000644000000000000000000000343114447111614016706 0ustar PNG  IHDR00WbKGD pHYs  tIME  +IDAThՙkUUsg<茎WMS(Jj%Q}Q}AJ/%S A$ODX!iGi$T 1Σ/bs"ýsk7&`)pޮܚxX302 ",V]\FMDnV#˭&YUD^KUux IKځvh){;:n yZ='S"TUO4bE^&E{1=2lQ-d4&g~-65i< ई,U<D"YU:C jc.U=@H(ÆUZ%"%`keL Al  *I QUO2]D ŧ/^R{7m9!"g6Gx!.x5D'%> |,<JUcx ]EPUGDd3 E 2w:z {CC%ԑ*d"2JnN1 )ԑDdI=al{sl$^Z/T$&"k QCiU=S3E;n Hc !C)'5/v^Z|maEz;E[`V8 y9wι9_= Xu] @xxxF< ?Ц1tl1(|$"e0$q0X׭&#f&ǀM&#ƀ54"Q i㩴yo|YBuzlyN=9"CF 0GRzk%Bb*y`i:MGo%}wڼ04<kPQT{TNgGI pIDL9';( |C@YhGQΉpDX;""[gƊX `d"Nr-stk1]bWXf3H-kGJ(TFڌgC؄!6h/xQ1s@P!#Kd sdlұbNs1]̀snRDjׯ=F*W0%"_2so!߀LA&y*hh 'y 9<"ȴaPNpkk-WōH>&"ۀ Iq*ՔRo1uxcaBksGMQ) @TTCVT)JkV7`*RT~-SOTDLZ(}:UUnƛFdVbOh*]nl4\oB-'5C1Ƥ]Mĭ⼟s%"ES=nrwivb}|MQeY>xW"Ͳn:,E*JCD2AjilբA>"'}bxx 6nHRXO|"廌-Fh,4dSS7Q_|>OTb||l RgV6s}"Qb|#nŋyJ^&&&ƛYqjy^-iJ7ofrr.<06c'"CoaSѵZ322BilCYZ0i2Q#TnѕXMq]v)ДJeܸ`xAEFnQ8P\D} `ܯJ">8Mб Ȳ*N[}O" loTN[ĶCBVְchܓgwq*i_Mt=@վU]n^ *RaP XZZDBaxx/ ֱú>u{>V'IENDB`x2goclient-4.1.2.3/res/img/icons/128x128/x2gomailclient.png0000644000000000000000000004532614447111614017704 0ustar PNG  IHDR>asBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtAuthorHeinz-M. GraesingQBtEXtCreation Time12.06.20071¢"tEXtSourcehttp://www.x2go.org/artworkrPtEXtCopyrightCC Attribution-NoDerivs http://creativecommons.org/licenses/by-nd/3.0/e, IDATxIeٙ;o7 /RoOWx{Oe{D:7ZP=^}^<ϣfНlSUC|+Z߼opOgtW_Vp+_|seaz?B?N ڗC0(Nj#!xz,/3cT ?[\X'K="S7[՗VwO_.*a ϗųYn,3^3y`F0Af9HdҚ3?o~'w/fk4+"  f(UGӓDF?W b}Ȉ^fhgX@9~#H3b; fdwo6k k} WVTJەFbsg)@N~/y@ .R0QQ5W)y#ē )%'}8X+B?s]_$aj9wα$9ϑxGtzS)y4aS7F c?j ΓETŃY_zH"~ 66B |j$$Ir!G=*R $&Qv_)C *A A+2c M%A={'iw,^BEk.{;bg ? ,J)A i4LNMh @ H>r||CE%l05cbq218IӧEQJQ{Qcm#M+TPZ"AڬLaI\'ғx%c燄''.>S ()l0R"'P29;E^gſZi|l}ٙ: R8omS._| 1{{{#ethOxh7pF~w=7׷XZZ^Bfk׮v|>$ IHM?VDQIbE; U:qB %aNZ5$'SƠAiH4xDiɥ vi4$Ir޿|4J$qbXiXNֆDZk`S ОF!A,}ʡ^ XZh!y>x>F@{jV#=܌R4r 9><$Sm;j-w>޽e899ժq-|߻0s(a":ol\fIqth (mPHRQkk9f^-mvR%(UAk D`ocvW2 ׯv|.WzEVmӝFeDRsMO_Korxdo|~B7zjez6ss3J _z~L[k~7Tjk;RXiKhKKt߽Gg㶉NAf^AkҧT39[31Zs|tgO_"z:{*_3@V## F8hwz4[mNPI!33Wf;>3Ox[\@ۦ\.>-\g.4Co8Q*q=)8Nn8QqLkV(`dp'^ =3sF}x}6ן25H-pEJD6A`֠\kɻ_~nx|}+hNhR 0!0xZJD)>^õs`kk?Ooc#DzaAkj+/ћ^;3 exǬ=gn\ pp"6&KU1Hq>'S^QH)B T\)?$_o󕯼:ABKVō7&Vlj"OR?!IqHkTH6"e`t~ b<)3=Y<|CJ/%~G=fwA=Eޢ=5/xPd6D'=i N9ܹN~a% >VZ6nTԁ33ư`=ES:lHٗQvJXk@P XT7HgaO=╗'~hpt|B?N()_9"ꗺl2Eq1q>{zw?}ё&SS=J^HicRso e@g69k߆} 1H[FɌǂgD9FHGơ>(mv֊(lmptQk6iv& +u{Osk67Sew{cJ:!JO II [O1?s,jNُerzzl5N[ٜ{*;>ul_d! TnGcݣ\%VrTcHP*y`f*)3|#^=5C [Rh#5eAܢ4G'll03=q{?!ZO4}qX^2[[ۜ:z}QDoEQL$qLRh5 eSl2Efw)SkYY.V},I|_Inbx׿X<8'ROhu/q.JHU ^P}e3@ݻ\(~DяbpF`Tl .%2!4<鎝/%)\sY_yLeKXoўY_]~U*%(MElnl#o:''|耯h4fH0@:JCx)⤏B2"FH#&Ho e €%h,*Fz6E,(aJ!̑' ^'3/_tR?xgÛ;SLLr}r|(U:2S#h`ŭcD+X~L399h{|xməiRό?mi  ÐvyҏCĉnF@i_cPHCDN]' $X\tХm@YZ()Pi=/ O7Pdc}2(Sp$OW(g rr`MkH* 2N ũ[hߛ԰M$I9IoM4^xW:|*%J*Rz:F;ݿΓxxg1| H@cssC`<4@ ~ U*ߜfIV ZQrD;C=a.#q[  ?ad9H:̾T",hL'xK|NmxJ+XyiD}7ci0t8y]޻(J"[0˘g3`{ҳHO=Yq! 8КF=ź7=g[>H!Yӵ53sR  ![<}_>9{{<| ހ?)p `=2Nm$v~Icbql B Aƴ8,1ڢ;aR8zLN D||B>9,ńG;'M&?ݺJFz>zR pe^^ V}]=9em !jqmIu˽N/,33fQyDqQE BsîL+Bsc0 XNʅ;" :F6X v J! qKU-798Ӝ] ^N~J7CiKS6=c#zc{<ْ|yjg[UesB#PJI\T8qǙ.7Yn@)COgܐ̓AJCC(,hNЉUbGcbu@k12'yݏsvRK޿[ar zÆ J%xߨR)]tf/1D%` Q:v bg [ck g,>XAY;Pq{ WTW1q,߈axi܌vL!ϘN%ֳ5v޷nȗ?@xo.9B `!vwyS{&+f8NYIHb뫫8q% 0cZ K{y>oq?yg4]硢qΛ?[Q7X\&c@t3LT TkuffUNNwIA TB$1XgF!+Wh!\; ȼz^{ws϶A`.K+=lpzOPmQd<ǽtc/OљY@J-?櫯MM~cf ~׾}̕h{ ?c Is8_`~?I?YWL`nYJ>tO2&)ES b %n'9N1K9FHҠmP| o!=f-J8^)/yo޻ll>p}yyh7fU룈x>=~.0?fee]N\$=A &`G+PX`g9 8 VT󥤔GKf=I۸.0˿Djkr{>GjQn`jenM+;3ݷ1{s4=#@5䆉 C Lj. ؈㄃VWWXY]~YO Q5v]l \@X_J,IZiHyGV*+O 'z<֯^3ܯ <\cWY',Hӽ5Sz]{}JFҕk4=QlE2~W<(8qb? ;q}u; IDATL4*zBJWb @B Hci~!2O o $gafg%/ B$B׿0>IVjT:||fN#33?;}0u 4Z5k/s36@ o:+ GpϏ@t~jǹ c/Ë@ Q),<`KZ }E HM$ԚudGpb|ʛ/^@7h3|vo}caz~!xFH1e BB#< s|e_2.Ts9:( :C 0FCm2 URW :qJc@NL©ќCMr Tқ>G=~gk_ִEEX87D¤?s\c1@=6~rrǧ}k " D]8I .$Q%,(! 9m,`V ו#A;=hIi}A oCˁ/}A(Juc?[414mre}̑a sf>h ɓ'lnp|r( 6#~B_j jVH- 5 Z/R|FL{X{y`PF`o?Wzs|>7?^{KT-rCLi?Q(es)YG$;fƸ\7%@[zdt-sR~^l5 NsDSO?[al_*#\<}QWao/0Vk7nқ4pMq׃A2*HϝE:eEډu $ms@RWa߷͜y.CKf$am+TBr=@PP\o}_?X"x"f,=R_ c6)jU8D~Sw!Gs[brTpCY^ s j 5:)QmkFwcgghrmDH?X|KJi HcMH m+~, y "F83챈5w TBº(IsYF0(Q!Bgg+mF#F"POcg=F5w~O0kz{g 痉q%#v88v 1TZAfX4IKX_>0fe>U@XhĪ ( $E~Gxg/qN7w>|oޘl3]3ڽI >@{o1;;<|gP[ ڷ !8Ilf-V(1`>=˥K)Ȭ-L\gk,5xyw9:f,|믎ڗ_ajv՞ĜT d?C̣iK?~\o_787/\/"Wa {M`/VzZ:<{[ӟʴ?Ӯ<ns;=b``y84f tFJVqN=ąqIq~*e;1EJ-ÓƩ'ľL$ ]ũs|v^TSͷ=j|,n*첵ce~c4Dž<Ƶz;U2\gb2(.$ OHvA giUvUv`lZJQP2?+Apj!=->=|=~v4r6*P$Q)܁$ CZ2T6ԏl(V}3v MB~Mbsn^v8) EMpә'Tߠ`TzjCߘJJf7'_$50 -н,A@JL-@$| $} lYaKt"Np3P9o1" PdPW@*:W :OGI^<ڑ Dl=NNR)H a1 ~7q6RVVf߿ܦ=`h+Hh@H\`3=g=$+Յ,Z !;{¶ӹ4AD3Gk4脓5ꃳkDoD= c֟0@V?MA_ F\fx^ `Vq;Bm@b2ë 䙫X.G0f|*9emɊC2RCEoAi뗀tLtf+>{L7x4܌c:s/8zy!{nr)3{0"vylq>& m ۔o(a$(+Zb]jqpVLm_H{O can~%|?$lTv[~TR3JxR ޻k.,PPQ  3f]=*mblOWi|Ad=`f10qޯَ8,=pYvVOX #:W8fy|OQgvvRZYa0#)n̎]8I[+]RZk4_Qi5U5ԗ~ӧ3yFM*]8ZֆfI֭[M41;wHV B! >aff979>{ϕRJaHӥR1wTp(FҰiD OA+)IDeF_IIVsOmA& t IlhP);As*a:k#fsK&ڔeIWxޣ]]JktmVkz#X\0aafEa#+o5N[b!h qmcDDY܀rFcZ)LOkH ptyL$CeXur:U*9&fSoOaT̉Z4v;tܢٛ!,JA{f-L#r^4|OOo0=3Mb{ $!}荣ӓS]yxV:TS$2>\h1L{TP(Ϊwy뗕b(m MtIb06N M\@ M(_?}DwHk#HЙ]:<]^a [<"Q_H n7[\~No2+ On4c2i'1I]/7p& IIP-4H*H,HTBgՉ>G[+(WfivR: 3Oc[Obrxȓw5&{ 3_€vMVcQ7K1y#QA5y[8cFҮνE `h)T)ӼD{RkF~iJo~ZI6T^R35Mg>D8ܺړW_V+#Ex#- ۨ)l\*Kj2H$O9BB'<){ iH]t|-l,q+KE@(R_PҜZS7WQFvO{nݤٛT*el;/c&:],%%'q5z6j`أ@kMcN$ΙVL71V2lPvd[O;!},(b 9ʵ'9bo`e(-W/RkL#3\QVkO𽋄B6V>-gW?1en;<~''gE E ".ۧvk:|@4d~F RB!, po+>(Ug^;nv 'l<ŗ%W$u?fsU&"t5J@kM+k apEE9*(6&]A>#GN4?qxӯh=+hC_Ik7&l_Q_)$FYL<30c^b~nj9<#_ϣa̕Coܸ4JrS˿,#"@$JYy.=Bw+$VM3w:ԀOJ$!)]gQ+AP,?X%:\ \ mtAOբV._2&*Yt }%c2GbGKH+6pi_~ɗ1:bKJ4J!O~`u$ʣ< MR4.̳ܾoE ೏ufgzV ™?w)L`AvŭXYe}mIAb+GǠ5YQY 1ٺRtJCYo@/0n pb R ۷vFX2ћ9@$>9`ch}OtzVӗRAR;=GchOp͉穂qDž6R#999ɖl=l:аgDF2m ݒ5J%ĺu:q~Cm)/&?0T]ͿHx°C&2:v!OgiZ-ͱ>HapȽOrUTJR ObrG㓾z4DĶeL I2,^ -4CHNΡ ǙNiS3).`t88K/%gO?{?Lf~?lDTff~# .+˯p߽/ 0th07?mrpӏX}F<88`ggcw>lTLwu90W *@e^II-NmC_9# VK,(v6x3?{z u(`#J!S=޼%5NV n-iՑ.0c,/{qpI84J.'IQ9@}ߑP:bw.QIͶO8\{F88ҵ+t'')C$d9x<*H$D,n?W27ӥVznCV^qD 8tس.,-KĬ6j %ºEX^[K*{ :)OzK|zW?e !ULt&>~Uoo=8M^\.P܋{;W*<L: M dP\4$PPA c($\ߵvѮ0AXbդ;D[<[~w4nrcqNK\DFaMwL V,.rLwo͛sz -(}>UpIH[[[If)/q<`4  ,V ;$Q%j((p(ƁH3(r_,\! <''l='R ŸiRW f_60ԨטPx TsK]K8E}Gg') 0j3; (+ % z MS)1Ig+<.~6Ky']`r3'FAPWiLt/4 yoss]KK˥RRJ2n)%!bǙzPiHܚnV[ tP4[@N t[(wIM.Toz gRaHmE=v6ָG;mﰵ,E6#@4D ڝ6Az5l9SNxλ|2˻Οx-տm_eztnZR/ I?JHOӲiTQ)T,M kOyisH!RנR!:=b>z}?dg@lP /!]>yk{Ohi\y[GL|Jbyp1[{v(88?5Zׯ// LAEр]KiEqUGcMO'|,\^4jr۴U-GG}ZV6sp\VWW9::"\(B©ahE Q/:ڦC3NFI11Έ>F'x˂7#8# x(wDyć1Bf+Wn3Up% W2'D]h. ̣ d,4t=RUn'/ ǵnn5 C/g$@ɗtyQAfɯmA+/jMY8.enK^^5NV0@X:y(40&KOR)>nL8{/ȁx"c >vi* 'g,*o|58`px1@Ǩ!T LOO(hbl`> :7|m tY.V;r9<Ϙ@gL6mV )&'{qeF#*E|Q`gEtc3ȤF _JGƀ'OVVt-wagv+. ʡH@ %LCCw Q]E{ $J$ L9˅DDر{ٙbcq<$.ɉ|ez_;3k!! #_ !}8}(q?N#F/)tXYY! QyҰu-VX,r*yB8|7@wF38DpcAX0ڲhIK6TQg6j(&P>ٌ4 aG'x8xˉe 0:D%9cB46vUTˏ3 *k&84^ۥdWQ˹w !NF˟/(0 xqϾf!A ;{wRBC I ̔UR6<+?uK36L:G7ň`( ;l?#oqܞ6|B͡p.Zha{v,Hz}O|f|QkEWi?՚>nߛВ{W+Vazjt*? zID/Pj:& \&ȷ76m얪oʛ&v JmVt3x3:V??_Os)~' 7; goHy^ӂ\fchc\.{k=H-qLTE!E'bn$9kLW-'0 K}z!>߭{LRxS3쨿ځ:,vf$|$}u]9*J`QK X>LDV2t'4æ>2Lv gq S@XQ7~MۨL<]! "|'2-o IVZ0+?pI!ͤ>k\Lt bIENDB`x2goclient-4.1.2.3/res/img/icons/128x128/x2go.png0000644000000000000000000001370514447111614015636 0ustar PNG  IHDR>asBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitlex2go Logo}hptEXtAuthorHeinz-M. GraesingQBtEXtCreation Time12.06.20071¢"tEXtSourcehttp://www.x2go.org/artworkrIDATx]{L.YQT/TV?&ڦICG4i|նVkj*XւH@}`P@Qyyɲ;;wfgwOrsνg瞹{=Wa ZJ`erB hP EQ;3 @V8 ^:aWT(& Ze2VR=eʔ ~!!!P]]v̙Λ7ozƿF _CgoرcGCwBTvoܸ{ I z ,?==j޽c +;;{TLLL IGmYJJ:ȑ#v >222'#m2oǎǚ;|hr<2֠T*]ƙvA@@J{r|DGG;+'I&;BA/!!!q,9aO>*h+@(/"""etɇSr8)^~Fh4jGxx8d2ٔ 녛KtCj g52u:9vqa ]755a)BlذݻwUt~/_P%ŃPXXh:׮]+H._F.rJJRtƄʜDHHhlƗ\.?X<"22r겚'9>>>fRRRE=^Gkk+jkkq!TTTRs=$̙3 xNSmmm8{,?6Ν4;lwuueff*'|!ɠRRBٳ͂\x16l "bXbe<|lH_Ǐ]$@^FntttMMMo駟[Px뭷=HJJ2GR!++KPV&nћ?i85!00o6>c/mҤIDDD₭[WpDC^JkN7Zv(3I%3+rPR(i?gjP륍9W~k`Nx74$i.\t f{LڵkYf!99%d2w$pssCzz:;gD^ʢr뢔/I%Pl$&&b0r۷oņ=B[[-ZƍIaĉ1qġ2^`jcƌ_~/ @II 0+xM, %%%)J/ף 3f/CֲcV\]]m k~5CPe38pkb+###1||||hllĘ1cD壪 6zh$$$ZXPyz=I$8pEȰdz:;K +V`cƌ(++#⧠ucܼy Zpp0bccE)V9O{ ./2VY\JիmfO4ݍC===xP3 Fa$V N'z@^^3gbرe?~\+իqsZ])H L[~ƿ!!ndHII_MWKK 1|~?$pB߿D)J._Jm={2IL@Tboݺj@RzNW^TH,>#CPP.]ʨ+99G%ߏ;w}o*..Ɲ;wɓ'c }\/Ғ'm0CP(7oc= NTFqq1ZZZRYt{|! Ȑuߔ!N'Is=:yyy,zjj*2?ΫϣA6m&O̫G`ik} 22'N$v%ǪUޙNsHPP(P(/Cjj*tuu={weТ0aA| ܹsH?77⤕V4Lfׯ`0SS\kIVgO.#99= (--ŬYLgmLFXX"n/k/<>IZ1l1%lF?A[x1-ҡAQIh48t&ɰzja [A\析t[7!\&7Z~YY̺rC?h|`q-~~~$H9 Ky]*᯿J,Eȑ# \.GFFu/H $8B7FPPfϞK.?w֬Y7( <`䋋ݫN+'L i4kԩ EMM ǏGzz: =Eu1`I/^ļy4ZDϷӧOGnn.㞫+xzC 66{!DBQn߾2!,YkGBw 1WWW$%%!;;着*rRĊ+D}?B )qȤ$>|xH2^LNN!VpZ'U I!sHad޼y,!Zg_V[ f/̨ =oKShhh@BB!544SN׉BZZ-XjkөW>s=8wQ455Ʋb9f2E%gFPP~Õ+WD ,i $<ƐdPo777D,8+@cl ?H,RTBVVc/f-Bee%***q^ِae#''ΟcǎbU֭[m/X`Ͼ(/(((`y[RRb׀ O޲2,\[\\.\@;k5Cr:h {:ӧ)DB}}=B8uꔍ8"dzP5mr{{{c?ʼB:0--[h嬣܂`奦"??w ;D!b|}}*{0:K >f̚5EP %%w&ԄK.aΜ9 PTTAAhhMMHH ,ǐzSْj>|8kϵ6 6<==@)))%}EaVKdpi~6ݛeL'z=Nb Ygy5?00y=s TXXHi=FI&4~ ڜ9sӈ'>JaV JN{gV}Agg'Q"#<<\pO ᘽ.. ػwuuZa2 qqq,Nի6m, Y7S/-+I[ҐgΜ9T}||ȹq#;;,5]L&~/i@M!LBVˈi1ûGPp12zL>xʺ 'NioOOO"Z__]vגy޼ 5^XIg}f2XUU{=j|L>w)I*Z J z|G< qYh/_۷ogI twwc׮]شiEϚNdeeZ}'m6Om6N݆ ==EQq<C3z߿555Ԙ?&L'Pܹ3gΠUd2ƍ &`ƍ{]]]}J@v"y\8WKB>PZ[[QPP %PZZ Qyyy^:ձ Q؋95g }c+`ܸqĭyDEE ]$&$asBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitlex2go mascot "phoca".TtEXtAuthorHeinz-M. GraesingQBtEXtCreation Time02.06.20099e"tEXtSourcehttp://www.x2go.org/artworkr IDATx}{|Tսw?fϞd&  RL(Qz+~ zrlOիޣc9~^m-|EB*ZLh&d}LyAl|gk~[Z(y0iLqL`cS&48 01M)iLqL`> 8|$M ìEo)Ce˖\^^޸tR+MP0e @# \|WN6۽(aZh{1$I1TB$EE$!LJcXw<?A^mmm=rUH(\.j*bժUZIw^{p:pݰZ`YV3q)+q0L$Ir0 b3 noocgMMMY֯۷D+Vxqݕ$ɫV6neX bɓ'Y)|kdd"W^H}}}CCC]#LJY555[֭[G[ vvOt=qBD"Peeep8Ӡ( ((b<X V+(/zJ wuu}wf]\s6lݺ 80yd2$[Y1::P(4νrB N|8F0,3 udYQ0 k;cƌ BƇa+RvgPSN*L&L&;~}bpOO?544nٲeĦM4( "f3<ϸ8E(d ATNwor`2^@gg^xNh8K<ϋ P$I Ki&M  10bQGLpKK2[nךݻw(NsEKK|jo---7444,5`VYYlݺE(B p8THm7&]:%IvK42IjoogLXqN4ΝzXE)w}7!2x>U:Ƨr7ZRc `ǎjuVVV~POsXv*++_R1 h4 1::i@QfΜ I044sAH_^^ݎ}r x{׮]>Qt Դr- (JeY z5Hemj7Q%[ Ɵ.rᡇ"n뮻b$E'@eev]+gh4Mcxx&V}hh(!dtQwH۽t/[.*J˗Թq 4'j=^to2_ PYY{\|O29ss%l6xccc60Z[d/6PKFӥ~˘?>-[FqA1* h7T\hFӠgP6mDuu>Cvj.K 0n61zn5nFh$I+~$˲%+B{mFz ˬ)\IhB _AEP3gfϧ( Nɲ,͛7ǁ ήMg[Ss!Aɏ u^n,˰E[j^pn&8;թ~R \- S+=Fґ)X &.2( FJ())yTE<σ(MPi =!18E!JJJ~P(Y%`pݻ}>SYY+VPf薍FE@~tSF9O͜9j Fdzr=g2͛7k9?d"ڒ^,3sSMEQ^{-Ngw@TP466֔Pk, xhT§"]Us2H\٤1[v#I,ty.2JL20 s}0W^ FH*Q}*Tȴ&1]DtkL5Ae$ eKKKopLd@A4˲jkkqj|oTd[ӑKtˋ|E7VTT4rDP8%=EȦT3՞_6$ӹ'm,K,{[vJK.A$$Ih7"d';XrۚeB7~jҗ_~9xG0Y +]|ޛmT$aŊp I'3&0Ѩd26Q Axҥ-3)ݼy36mXl(ț,ˮdYVQ 誱b ZFq ^x|^fِ2 an$)jKD +[tH;yVFFF`2<0I5lQUU2wdҹe=geOzIVSY#oL&ˬY4"h#a% ҅{6t!]A0o`y(/^ȜH${`⋵m=g$0F ZE.pߓHtϩ$I!IrNƌd@SE@e"nCطo6oތřI5>]LCTCtq&")E2Y 4]nOx饗 8O<եQ՜YHt7=dMO(E{'K4]eHSfQX S 7|{C;EQZ~\RIOji*;Zo E=̙Sp8H H&ʼn'n  {1sBػw/׿&l6۸tj׋%t0NJQ޷ ȹ xbT;`!Nf_ʧO~"_*=8;y'AEQQ%}s&d2{^mlvЪGUUnعsnv25Όa=AK/nْX$$I|ɹ $b(++ F~Iغu+x eY֢v܎FIļyݝ݊>H\bD30n)g$-EQ$#9(D`{riMMM2`xm9uwjR¦G.~H"HtYpus bX$lܸj1g۱e˖p\JV#d0\@̙34=7]Lȇx<*4RF̞=?u5%KtL={6Ѽ&Iki(N$6Iȹ e9e$I*; ݮţg,7bҥسgAjjjpM7iP'qr1ӽ'RP#G$Ia$iKy^I{: ~Ap+… Ijl۶MsO=}$(ƣ( K.$Ix000p4@PE-ljx0& Ey082mA]w<ORMPHtUMub$I#w5kq,[!^HνL&Z}2) r7oޖ[o0͈Etav;F:᧋?d6 znL$ $~VJ4ϟ 6Z\՘cO$@MM̈́z܌\FJ#Ջ'I$V?],O<+k׮~68faԵ.d A6e|"t/6Ns&DQvP:66RCM,ZhrBTЋ'-?Yp%$IatwwP@Ιj,_+dͷlYݍcǎĉ>;ٙ Hz2IUFz&˲0t4~ǏaN> ݞwWAG%Ka8rFGG&؈P5Nx%c$">SOg, y>|:mB @###+ сŋ_G?JKK1cƌ gf+|լOx1P__0L8Fkk+p7j3bH."b[o%2fRnݺWqduu5z-<$Q^^˥Gڔ&2=h4 ÁqK9s v ǃ/~Kf)ݍb2l6b۶m Dgg/CmD Ҟf͚_UWWꫯ&V^_]۾d2\QBdAܹV7oNIBٜUJ#~ٸv MA=fIyNŽ;ǏW_ݑM::vٲe׻***Wj<@ NqTTTO_bD^E970\'˲n Ì| ߈ o6ϥp}vY4 ˥"KAe+\?!f+h$DȲ / cE=>~Ϟ=ׄB޻Kz'x@9svX&>WaنMgD"e`YйBE%^~&z)ԠO;L:WS7|7=f0rT 6ńcǎޮpK/`4(|YӃ bddH F*A\(*r970Z[[mjj_o}[u?)uK ՏJfW˿2=?<<1]?$a20fe/UB( IUMsBhmm= ~eOqG}сǏ̙3p8p:?pW0uإYq8Ha0c p-j{GQjdY`2Y;f HF[[pWWל`0]\F3:;;1008@@t W8}}}Y퇘$IbEQ6˔@ ^ #\UUx0$I'2SFHz袋m6BQoCWW׸6p:p84{)mlb.d(ʪyIlFCCw^5k;hB$IR((jGɦBcc#?b?x妚i.p.ะ4MC[A``` eMQ, X Y]ksΟlFuu5gOH$($)ׯׯ_>}}})^ݎ&Po]gS^^Ǫ].|wR^l6b1Ȳ ͖]CLs͆Z̝;/J$IPvEQdٳgJz8`ZsŴ$If,b֬Y1c`rGGrرM.9seYy۶m\ttt`ܹ1cyql6fiONA,@^;-jjjzObAJww.[BIDATP|>f}R q(j%8(RV2{lrΜ9?>AQ:::pItww?FOO@9qU2jxR@ESSEn { EQ-B]|x*?d @__rqYfHO?4|MIQp8/FV|>Fa1 9ǻ(bxXZ, xW8q\3`hlPXS^^Deee((,"EQ7HZ BF& Neee8s V+\.<s)'Of35:::r̙_F">X ȶhqMj3~YUUG,G(Jƍa|zZ<G @8Ou();Zr ݎ B!ܹSǎ;Q8vz{{x<@ pjxxX,S |&>|z]۽n[9JJJȊ /n#KI IdY~>mmmx7DL 4M(3 Cx$b=Q~."@*455-dY ,l,Vl6+˲$IEQe,+,+@)EA8X,ZE9 = Z q('d?RAQF 'Av$ ]_8|pN?4[4& 01M)iLqL`cS&48 01M)w)DIENDB`x2goclient-4.1.2.3/res/img/icons/128x128/x2gouser.png0000644000000000000000000000335314447111614016533 0ustar PNG  IHDR00WbKGD pHYs  tIME "erxIDAThՙ{Tu?3c5-LF=Ј )(#zAD/h@%I#PI" c|@Kjki\wW΅mfQde7w=7Rd%xۮ߀c܀x #"UuHDZ`y8do#0:|q8 *w KH#hY^>ѽoV}@3Mz o{8pBDv_4VN, 쇱joÔy ^ = n <wTu0z8`zEeZ[kNi) LEIRT Z4 jk4gPTDJtɇթ#`* 1V\&d*\K7[tYDjν; / H铹"r&;xK]UgF2@'i2fE#gY"BVyX iR_Ed$5eLDbTum?Wb#RGsq)`)w)_ok?jes\"?INBFKUuK"CQS :D3VR\|*EEd03a;񼪞JSLy`vZgd̔HzEgDd[ O}ULb٘"qB ]DmL"y $}6v3p:Z7zm:덵IkVb[)aJMb_f6pg gNdQED9iyVחi[- L] j,Dv®J< #0ѭ)lNFD$=@j./3A2UGDh":8=7~Z,gisIENDB`x2goclient-4.1.2.3/res/img/icons/128x128/X.png0000644000000000000000000001415714447111614015170 0ustar PNG  IHDR>asBIT|d pHYsnnУhtEXtSoftwarewww.inkscape.org<IDATxwǿKs"`oX(}Q"`P "4QCSXXHhRE JYe;s;g?g̙3y)yCXMNj9uP˩ZNrS': @-Nj9uP˩ZNnHͼSW2s1d[ΟF\\eY1Ygc+_)?Q INnYj9XhH2Kd9p1Q |b"H2Ld1D< 0,n28tk I7}\hI$="x'KNW-M#Dgec1:y @I-<-19ʻZ O@gcO.DdYʸZI_-x:qWFl&: _N >i +4bWJXM+n2|7݁hu2pH:$Y g:S-Ƙة rq#W~pauU>Tr`O;;2$ Hr1fvup;L29OCjzp6}&501@e$= uIyG>I5|_}ԄEmX @kWi+;p~MT>Ԁ]rapq~7G@ҕIn1Ƽ AT{P`*7@ 6|D>1##~6DCFFOI_!-F{O9G4IR65&tk l{g+yDZHh6$ -&byWΫh%5*{Zo)D.5-{cU1kٍk[tOoDL:b1mE.11>mK#8)Fwż끩X[d]s5 M ӱS 9z-%D(i~nL*zmL "}CzU1ѡǷ[6,5BY!:pm?6m$(C=xgݍ1epCGj,ܞ6r"kwbbP7/|ϰÕY ۀ}HU ]_֕PcXŸC=#yDg_J<|r1,jKŃw,< "`kA_Sz'K((W<)5|*1oW*kEoVst8-E}1;:&c̣NJlcO4޾OD2jVSvag;5YM!Z(XRg Hiw u3wUS-s G U1*c7Icm ]31sa~-Rl=Bt׺sڴQ wowgT]*xZR'<ޗ-X=T>@na-6xNBdd_]=J1÷-/^U< mII>˨r mܵWKپv]Aor:IJZWA>0N|Z[c/ }ò{!FW>Rvn 4FU-_&d 5|=c} 6~cXGF\NB ^C_Q>]ҶKFxM8ӧojPW$)qjlȁD;5b~],i7+P9jXx8dcy?4U@Pc\u?0~x 07x(p#[NX><&ވ}>>am>=|}j}V9N4 :źL. 'L O˘1Ɣb#qG X\W<2 WA='Y-',&ՃfV"c7XcԠ8eX]7r({W28_B'h#aymc^t0(Ef^$]nSF(gaR%Wa[;%ÙZQg%I>~ v?dva|=g|^dD)n,hYX1pL}>mIdZ29.Hҳc.h4~m16 Ռ+jzj.·. U{M .9+sDT)*c7a2 o] tEkW ɗ4^_K#X3opG2OȊw4% L[P8xVWaeS KƘOW`uQG:[zwC7T"!"Vx!eH23 I2/U Ʃa}꣤|2kR @YlyI줱xݎGQko}pZG쌬[rQD~_&r1hL41.ur9Irqcl]**?'pb_1ImkvVj#mvt *XɁ;gö5^X}QPx$Ƙ3?!X+!4'N!cvջOI.B0qG Ic[:‹2C^QqV60©ťXsDG=\6w`14K;n5M wuT/.r0erxEޥBPS\v`syCEW>"a̳pQlzSGp6nWHO`_*;ʷU_nyr: 2o<:pQN>$9z˱KWT|򃎇PcdRlp2=%Tay!6tSffR4|5lEd@ ;z'ظc6p_/ I2JIg݃W__2%kֱWHO"yQ)lQeׇ瑅ّXmk(M#>:zk}zHOKO`Xש"/`UV'"&!1lZbRYHj}x3t1K#'̰g+Seh$[NX>prPL//,=ܱT>1+*܌5_v`';ו)QT>Dj %48OEKBYnL+{z_7 Lh"iwbAsgDߜӧ;fMVl}a\DB4 nb 0ؽZ6ps ݚ rRC:鑮87p]EB}4BjIA1odIpߦ xrN)SŞG5g j9t͐->-!Mw͉,U["4Wʚx&s~iԋѧ\tJ!ݎlB,';2⥥_,*O |ϸc=E!!y?<ؖt@c:ИN6}um[+|V9wp-1oѐ})^IDy%q #HLFHM[v\=wFI5YW.0bR^zw%qaf Cu&{NhYE^fԱ=6IJzDb3R>)RS&HMU7Ej] Vx'7;<Ʒlۃڹ҆:ϸ#Ȯo1>ibRAa՗$9QYK[QW1U|<7ӌ1޲08>ޞ=Jb1 @'TEE30'>-h-OK\c|*D|Oݷ 6gn̕g'4zZ pxDZz@r;N-{Φ]d ӅLptO([vD$-P>r|HԙljhW +*kk`iilJpꚪ=jkk+{.ESJe4eߡ+60ML@A=𶕬<X|W :݈MEG/*A$w&nx8+J=^dl.Hp.o&̧i;SDo(6`0vJcIENDB`x2goclient-4.1.2.3/res/img/icons/16x16/cinnamon.png0000644000000000000000000000077114447111614016410 0ustar PNG  IHDRabKGD pHYs B(xtIME  #S$=AIDAT8˵Sa3{s-D6.$`a!l#b!* j[ n"be-$ $N7ρ,w_ue3_3w&0jL҅ňxԀO~s#n{JvthԀv]ϲ!p)"aeefj(7Z* ̈H> pOJɲl~+++hzDwIweY̮ ~a8{6f w$M&_%&efEQ,ܒt/IENDB`x2goclient-4.1.2.3/res/img/icons/16x16/create_file.png0000644000000000000000000000112214447111614017037 0ustar PNG  IHDRasBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<IDAT8;hTQs}-Pb,Iˀ ZB[ "Zll jDB z7󴈻uL10wPąm %^!ʽƝS WmݎRW}=\m[ Ky̠ןma#!&K0Av}!Wjt7N<晋w7%"IxSԣW[Ǔx/8]0;@L?HNb_zd$`,qV fBh0h# /`n !*u'( ,˺B"t$lIY s'FPPJym,)vT VȲx@PR{?X:#6)W.k c8 d\`AzmI;[ IENDB`x2goclient-4.1.2.3/res/img/icons/16x16/delete.png0000644000000000000000000000125014447111614016041 0ustar PNG  IHDRasBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<%IDAT8?hqǿwj(XϠqr蠸8:`:Jq"ѢK`)!$Mƚ|"B؃<_K'ADCuXwn-UJu]z\P89ҹf7 ˲sNk֯W xI4 \GkVonȵ9G>GdL 8@BTh©`T*!wg**iz2{ǚ0CHfQvhd*;'OnE\AbdD|WjP0G`%XygoOP@شB{\!Su XrL@ve@ǧc k >,chҚ|~f<$ºK ^ex!IENDB`x2goclient-4.1.2.3/res/img/icons/16x16/edit_file.png0000644000000000000000000000121114447111614016520 0ustar PNG  IHDRasBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<IDAT8OAǿݛ |`qHlL,Fr&Zة6_56vvFCb,L(5<|!w]vw†_2do2CMqvǽ6 J[j%CԞiɾA۝25Ë\|݌n^8j'M.*ѡal=y܃Ze莀85p8A/4K;iD2#v{!PQ`͓[jC kENWrQoY7H Ng M (zWpZƷU9[E 7sfcvy6O񾹄]|.ɀPJ J)c %;zt} 9P8#9@g\rp@)ab_[wT &g-.FkE7R| B .WK xق'%&(^OpX&dlie@e2 Ijh-$іj~n?unƾwIENDB`x2goclient-4.1.2.3/res/img/icons/16x16/edit.png0000644000000000000000000000122614447111614015527 0ustar PNG  IHDRasBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<IDAT8S]HSQ?h&"ZA"(EK""z!!YP(zE@BfJcK!gL2w}y׼ug&n8~\L;k*,{8QjnY$.wxSx*kQe%vGi$K59"cxj-Rcn:3pGzjD2 WOk$p@syϟnϖ{$r=!L6;ݗ]z@ZEJŷ5sMѰ, #7;_ǯ;qЕ[H&'SJW*]6 1erl]%³! E0gCۀJ,8+-М:]D٤` T{l ܡ 7 zL^F?@Qg0mZXНSpIENDB`x2goclient-4.1.2.3/res/img/icons/16x16/fav1.png0000644000000000000000000000177414447111614015447 0ustar PNG  IHDRĴl; pHYsrntEXtSoftwarewww.inkscape.org<IDAT8L[Uǿ0`u6 l˂ qSTd N 2p ?bfd[B t1XJ6a׾^UV-ɹsґqOރRYt-Z7Tw'-((o>*V$Nۇ(gkrj_1X䕶JM&HU:!|ۊ ~gqO"yW\_6u@i-yFXJY 4;{cm{ R3k[xblڣ1s%Fܵj7|y_\ʵ;fqGfy& ka 14xH~=s I2!P}"jR 0Y1c<\5Q)>ldnwI7rř%A{YcؒӪG^0@p [Ϸ}h/Դj^WFft׳tWD[F`Y`{y]oqxñ~39_mu@XV] Dpī]q!>OYbk u;Pʒ։JIENDB`x2goclient-4.1.2.3/res/img/icons/16x16/fav.png0000644000000000000000000000160114447111614015353 0ustar PNG  IHDRĴl; pHYsrntEXtSoftwarewww.inkscape.org<IDAT8OhTWƿ;3?5G`ic23%BZp[R  B[ZI)ڕjԈ#VmE"3/&)$4D3{1'oij=ߏ9(lQIϹ(`!]{YT9ܤo'3Αr<&C|GG LLXի!h'5=; Й]\sHv~6/KZUևy~;D9+4Rg +=RE C@ `),6g=InD:?I`BQ ӿ3 C8M@J\O͛RI\dI+*bj i`i[疽umJ#Q$Tk@}w6~$d{OZn5cݕDbp5⠥i b66 b܄M|Yk\jzSoBouo=hA(!]EbuZm!0WxJ#L @qHe*HuWC݅X/K2tjt>%g\+Dy o'@CŔצU kާwJ,NT]gp\2ߋ,lŽOܒǫ-6OIev޴lqj~V ur=H՚!j++ x_$2(< 3C IENDB`x2goclient-4.1.2.3/res/img/icons/16x16/file-open.png0000644000000000000000000000112314447111614016454 0ustar PNG  IHDRasBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<IDAT8kQoIpkR?(hr6xo=x󦧘ɃG!衠5TX,Rk$ow<1f~3<%"hCޫŔ CQA(֟?tgvsOoGN/j9U2u|axNۓLV{9wq5Wxxv ΈUyڃ+ חZrlA=jpvHEO|vUyKg3#^IòDdjF&OtLQ)FBa72NNn!@@P9 L4)0I{ C p"P_V4o4rb..{r@#`Rb Wp1H6ȸ#;|g[mE&5W}{r<_LM;?GnfR{qf^rQ*>*Ϙ]| xZaKuzX8x-flZC<࠾4`-ij6w</Jƅ\h ~&G ENnt"youPm,b=8M9"V^,̈"N2? aU%ׂIENDB`x2goclient-4.1.2.3/res/img/icons/16x16/icewm.png0000644000000000000000000000103214447111614015701 0ustar PNG  IHDRagAMA a pHYs(JtIME TtEXtSoftwarepaint.net 4.0.3PIDAT8OJQ'j-Z hA=@2ZV+GtQ gQS40 mZ&9;pdosν\n`^OL0&fyKm{:hVN)zӁrQx57犢P,AUUj<lѵ߱,j H$`=CTꚮüHR Lvǁ@@f΢Zznw$yj;$sߗ$9Nym -fp,|ZE;Y>fmb\FLtAmF1O&W$mr9e29. sXLpVw_^?k7JGKhIENDB`x2goclient-4.1.2.3/res/img/icons/16x16/kde.png0000644000000000000000000000160314447111614015344 0ustar PNG  IHDRasBIT|d pHYs0|qoG*nXkuZ[;W5(F >'v:!_\ ᐈ_ 7‡ zz qUƒ\7Ih Dt~vCYNt<9G!cx*|}ؓO?$ye+2wd a iC(O7dM*j(}~>DWsWnYh8@Oj،މ177Fǎr"e izrV~.$xAT> G<:7B& qVCȧ=f#>V_cJF҅}lׂ*)΁wotaj2GxC#K,Owx1dinmmu?\D4o$DEU7F@ܮW+me_F1EOdwkIENDB`x2goclient-4.1.2.3/res/img/icons/16x16/lxde.png0000644000000000000000000000131414447111614015534 0ustar PNG  IHDRasBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<IIDAT8c?1bř]Vy'Șm? YpitloÑ*%$ÿoL 97sC%{7ox1#eAA,ޚ#_EY2UV{000ta8b9{6%1}Y~Offb`PevC6fg[5֝b|L|k;p~a`vהo]W~{(Yćrp|?߾Vs/;.ڼү*hY,'ģ+5=_ٝ叏n2SʜϦbM*b}^d̪xrOe=v>Fe@,ZRL=\"=#=86gя'23Z'fO~opex9D*~<'S%.+gab8*7`}c6_ YK3 xw&J/߱43000\xg÷Dpجgr~IENDB`x2goclient-4.1.2.3/res/img/icons/16x16/lxqt.png0000644000000000000000000000140314447111614015567 0ustar PNG  IHDRasBIT|d pHYs+tEXtSoftwarewww.inkscape.org< tEXtTitleLXQttEXtAuthorGiacomo Barazzetti6RtEXtCopyrightCC Attribution-ShareAlike http://creativecommons.org/licenses/by-sa/4.0/TbIDAT8?hSQW:(nyCQH nP"Ԧ8,]mE($.uuQt(KNbֈIB{84y?p|sWx<smgr{ۀC0 ?>8[DkڷX,v^D.k@,*`x2:s?SJ{2`cP|~UV~a~iSU୪(d R@BIZ_d3}M(*pkv]ψZ3Tr1rй~ p2y#+P>),`L @[T8I&yۊ$Jl2 KED7.-Lаl N&1 zWUHE\/·y2Vq"~khpv?6HkT)B+@kPövoLFi_ٯvIENDB`x2goclient-4.1.2.3/res/img/icons/16x16/mate.png0000644000000000000000000000140614447111614015530 0ustar PNG  IHDRasBIT|d pHYs|4ktEXtSoftwarewww.inkscape.org<IDAT8S]Ha=6לqfre:V$L,* ."!BJ pΙ6ٟI"zp8sFDd JJL+sC;΄g98! 0Ƥ元暊j!10?e[ep(@DT2=0q=T\X7W OVvqf^qEg)hcʪu:ʐLBy&cT}!%PKY7--Gqn Wu2y.\( Zm[zftJ1~G >B Ff;nR$f|UbiԨk '%/md%3Oxn+D mi3ӟVBW9N3y?&.=%DEY1.Fl_㹫Fcl5YX*9XpTX$%NGE ÅJLjyn!- L s#EEt;[eѫu3ѹ!΍@,Qnk7SˁkQ>^kR7kr۔rQN87I;B_e~â ~IENDB`x2goclient-4.1.2.3/res/img/icons/16x16/new_file.png0000644000000000000000000000112114447111614016364 0ustar PNG  IHDRasBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<IDAT8AkQ3KX"-(x(͏I<^Qz/KPki4%) Mc{o̜wa2ƣ0>/f "0n3T .[^ e@ T8cU\f#L| E2VזJ@Ȑ͝Imː?zh#=t _^jM-#x_HOc7;㷾yW|MN200_y6$+YIENDB`x2goclient-4.1.2.3/res/img/icons/16x16/rdp.png0000644000000000000000000000136214447111614015370 0ustar PNG  IHDRasBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<oIDAT8_HSqϽ^j[h5ACR)EEW B^*1 ,ks9nKP }8s~GvFմ3ޑ0ƅh}C\HƃWkMOsN <BrIRS CVac{u`;5!@$I'8[ZXmޢbf ZܽdسmbU I!hRU4 4MQKa| X?8>se9cmB|droȅ*$i$\meT*̠G8@&(Pǒ5ݽWZ <V}\X<|≄,l *$hB\~㴂!qm]۩hLVk*a#F&B7VK;QQ1B Eɥ2\fdY:|C;"~Q{ydbN a9K9*RBiρS&eqRG;?<}+O]=U\!~7:Q1gr8Pc[k0err%#|wsS͊8 6p >IENDB`x2goclient-4.1.2.3/res/img/icons/16x16/resolution.png0000644000000000000000000000067614447111614017015 0ustar PNG  IHDRasBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<;IDAT8ՓJawMMb1'EE:g-j< =A+1 DXj!|)r)-zJhU6fÙ][\̲[e lPIr]@@\;s 3}e7bIENDB`x2goclient-4.1.2.3/res/img/icons/16x16/session.png0000644000000000000000000000151614447111614016267 0ustar PNG  IHDRasBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<IDAT8u[Ha̎Y[Zijj-1 )).t 襇z**@=$$RI劋Kuo3;p\ -Α"Ū‚*T_b,p63-M&(A''ѹV-W۾?@m-`U$5+ EK%4uQ^=Â14NGu(H&BNHAD\~CK_tx@)6ې g0(¹9 K@)%ɌU2(el@!S^>U(%8+ӡ 1ZԤ1>b|VR6'(2ppTvnhtyBx6JDž*MWT&*wLO~@OLAHK-17<֨K[M#S-[Ǚw, tݕfU7حWoKNm2Ω{!<25MÚ+]ygR(gXJ|34 I4L'9Wb@6]K^%IENDB`x2goclient-4.1.2.3/res/img/icons/16x16/tbshow.png0000644000000000000000000000045614447111614016114 0ustar PNG  IHDRasRGBbKGD pHYsu85tIME  tIDAT8c`FIY<ٙ~_\vd````ph'7ٹO' vpAg\ƭDIDATHǭkPU7ؕE(^Qe5بHyKy+/d]LfS:΄Y#N2*dNHhM1\`aOJ)ц}9s<3RJ)L.ȔzѥpeP10?4[R GiVB͘30ג7:Ra ']6 ℰ1V }oGo9gAt|w \1[usݠB9z 8µ;Pҵc D#f\ճ..Ӂ gߥ ,"F܀|`.Zz?#:|l4٫5w-fmUx3Au­T j>`>:ևVu@[j =ЎcS{z7j:͆@avY yЪr,S@5r<(%jy?Cb&̏y T?kN-^К&Ss) uK1C%L&2ؠrvZZN٦cm+&^8i9Q QgC.,3-BLNp0[5: "yRڒ+k߾y`YzF("&M;xic!ȹi{ű{䍇₌Xh% 2qLyy]FǨ{N4 Q>S7=66HCѣhSQ[ʫzOj-[P nOA0 (+4Ѯ?t^}zO %tEXtdate:create2012-06-06T22:37:01+02:00l;%tEXtdate:modify2010-11-05T14:17:07+01:00[tEXtsvg:base-urifile:///home/mike/MyDocuments/4projects/x2go-upstream/x2goclient/svg/unity.svgɷK|IENDB`x2goclient-4.1.2.3/res/img/icons/16x16/x2goclient.png0000644000000000000000000000166514447111614016667 0ustar PNG  IHDRasBIT|d pHYs:tEXtSoftwarewww.inkscape.org<tEXtTitlex2go Logo}hptEXtAuthorHeinz-M. GraesingQBtEXtCreation Time12.06.20071¢"tEXtSourcehttp://www.x2go.org/artworkrPtEXtCopyrightCC Attribution-NoDerivs http://creativecommons.org/licenses/by-nd/3.0/e,EIDAT81K#QH VXE6v$,-2 J5l5Xv/\x!~GÐ0 ΎP(M Rtl6K.0fffX\\0 ƴ@ ~m#m* iUUQU!B8)$ 666}ix<$I 4M>iRD<uq~O*²,m)%DG PQqW^%,j?qia53y") IENDB`x2goclient-4.1.2.3/res/img/icons/16x16/x2go.png0000644000000000000000000000152614447111614015464 0ustar PNG  IHDRasBIT|d pHYs:tEXtSoftwarewww.inkscape.org<tEXtTitlex2go Logo}hptEXtAuthorHeinz-M. GraesingQBtEXtCreation Time12.06.20071¢"tEXtSourcehttp://www.x2go.org/artworkrBIDAT81K`|ZB *-Ah\\.wt7Ed(ȅAiب?s۫txyy<4M:}ߗy[[[4k;C$۶,8Iti Q!Nv-loopqqB4, q(Jeaee)%sssJ%שA)qyzz鰼LVAZk֤iR$IÐE&SSSKPb ZRPJFh4}C~Exyy___T*LOO#Ķo+BedY66GQDVn;.0D(LLLP.T*#IqV5.f0z<>>!RJNOOؠhp||`0GB @J\.eYTUfgg󬮮)'''\۶) 8,,,pvvF^u]h6GH8^GX$ |Z4 #:::#}?8Aq3>!IENDB`x2goclient-4.1.2.3/res/img/icons/16x16/xfce.png0000644000000000000000000000117714447111614015534 0ustar PNG  IHDRjbKGD1 pHYsHHFk> vpAg\ƭFIDAT8˭Kq?_t GOZM"\]NMρ@Ԕ3 0Ah(u7 q \3 Kh<H le3=dY^WUs87W;<=ǝNH/%GC^ۊJhG/[%v|bfv(Hsc[uҪ5%ƶ]{ӳ9"{ȟ-fIENDB`x2goclient-4.1.2.3/res/img/icons/22x22/applications-development.png0000644000000000000000000000172114447111614021602 0ustar PNG  IHDRĴl;sBIT|d pHYsaa0UtEXtSoftwarewww.inkscape.org<NIDATxڥkLSgoK*6J)-C4(NLBD> ,/ Ua>-N"ʼ xMDTZ#Njk{OOm{^_i!|yA"jzesG\nߐ0MPZZVt:j;;;v> ƽJ^޵fyY_&$0iA<OiS]Rrl'?[iJ` w1rx񷛉\yrFSe\`-9?!78͵dJEڛ؜v'L4 TL1q.#wu]{@䜔N\Z'ir3CA8O1"aRORASJ@8ۏW:Gqf?>q^PbYQк87VuVu#c#D!dLr1DmLBqUW?x7oW1P)[L(*ċ1?qM0.8I&Qqx ފl WsIENDB`x2goclient-4.1.2.3/res/img/icons/22x22/applications-education.png0000644000000000000000000000120414447111614021227 0ustar PNG  IHDRj sBITO pHYs B(xtEXtSoftwarewww.inkscape.org<PLTE qqqʧ>J=ZpW\rY]R?^t[`u^bw`dybf|di~fkirnseNvr~z|ueĬȱɱȲɳ·̶y޼|7<2tRNS3:?HJKSZjsIDATxڭalE[9.7g[?1fQG^6ܾٓߜY6~=Ljd%~TrZ. ؙ8ΓtT6v9`;F!;]3=_^{Yt1ʬlǪ9aFƠUP9&ӛt+B83@J-IENDB`x2goclient-4.1.2.3/res/img/icons/22x22/applications-games.png0000644000000000000000000000126014447111614020352 0ustar PNG  IHDRĴl;sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<-IDATxڝK[AϘhDIU ] m*.̢ nWH`PVp!m.J X$ஔҺb43;޹/|9w'&.XB'u^%C2ƧO /j e:h a@3)ھDCpFƣbR)nx26ؓEߏKÙ.ĹNķCql=JAs Gk+ .VKh-#.*ND=nseN,\BB D 2pb-+qR;gάx1AH&Nӣ[H ag!vߏ; ZI $&k؋ƸZlDfŧdjEX$16O d2)1N'T,{'mbIENDB`x2goclient-4.1.2.3/res/img/icons/22x22/applications-graphics.png0000644000000000000000000000276314447111614021067 0ustar PNG  IHDRĴl;sBIT|d pHYsaa0UtEXtSoftwarewww.inkscape.org<pIDATxڍ Lg?ކz1S<$*;`,"N@E.ac)GE:U(TRJM }06D[6M43%O|>|? Ddү=Ԝ;eyuE674~Ԥ #IѤHB *CѬL@uNW[z\xQר.7@]69uI*]Ʌ2 s9s L2t+^Apz{$ڈzS2>FZ$+BD \v).@?V# Y^po)Qvlp,Yl:VU%,$aiNG"dG/_TJ0z 㲉1`q4BӐt,xPCK9rkc)Sk6d1譌pc:I)!z24wmI'mIãZi$(J Z׬<;rT0<< ġCpD4$bI$<2IhgXx7=C:| e"ad C^ns1°:8O*QCfE[j".xb,ihYP(:lp4Gm~'iKx ʶm? /㰳/Gis|{ ndʜN{綛6N`PSR",(ɮdqgCc#=[Vvxu`LX[j,ZYR3DlVu&}(v[lvUۮo'~!{G_4o.ea@Q@mwM]t a?! |}츙 ^IENDB`x2goclient-4.1.2.3/res/img/icons/22x22/applications-internet.png0000644000000000000000000000251314447111614021110 0ustar PNG  IHDRĴl;sBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDATxڍ]lSeƟQvk;֎C )"7*@41&rÍ{/vc"7xgBC B eu@vv]{N뿋[‡'yO/'S0V㟵Yq?$NeD$>X'2q|,7\~-'t0֦ <)\RDt>ꎃ42? g ݝLvD!)2,^@(רh"unv >-Ѕ>|=+,@V(HtWvvQ7޺>w7?^kxā $y%BPdf Œy9ʚQ7iao6*K ?CoO*1Î$Llpakw`>܅֡=Keΰa{|FZ\~SQ/U8>ffpz4c6)uYQ*̹Aו%/wѿ 6P:栂be^O؆JrYz8[\WTW K*8PQ<\7Pl IYnff{c[B8w=l[骃.BxܫRB8"fW1wctsc}5]±kvts_ġ퉥y*R#y ]o* A}WfOI٩J VX A.1xĝ;&p?a \28kҒF`8OkZ8[pmDJIENDB`x2goclient-4.1.2.3/res/img/icons/22x22/applications-multimedia.png0000644000000000000000000000251114447111614021410 0ustar PNG  IHDRĴl;sBIT|d pHYsaa0UtEXtSoftwarewww.inkscape.org<IDATxڕ[LTGˮ,EXA(ZSFW$1MIKz{/MjЇ64iMII6x15Zl),xApwYtH6/ofd(UU4s[R\mUo1hgsx=\y"VOأ~Q@j38G޺:xXSjһ9Frp~&xéZkɎF?tDcF>:p˒m)}{ϻU}b$*f}sDwӤj `َXƈ,8(~uok»^ ˊ/?tݺ<twkO ^qe&&!rP&cM8:zkwcuxׯ͖^mmŴnah $/nW!5NMp vHII)Ird&YzhQuMLQ:(dY BcBU&h4av 77  #r vi 9055EH_r ෥_ꞥhU6&z1mH&ܬۉOaGL47R B*)GTk$^jl&#x~rE+-)Ѽ&j@#(,h`.ǏڌZk@چL+?WTVXzGv\$wCXmX充X[}!k6mF<5Oޞ(Ī Nlqlu֡<ݙEGQRRv2 I<_\7A)YF(ë%<˴ ͚%750E5+\˹ҕ  #Y"œrD"O41 Xu)oL7RaM`D` kWlڎ4FRZBآ5x]0c8uЧ~ KȆfrKU.؉K+L@at>8ƌ"1>oIh`"|śĐ q1H=B+?aԽQ5τL 菉hpD۬I팦MZݖĨSbp4{d\CTIENDB`x2goclient-4.1.2.3/res/img/icons/22x22/applications-office.png0000644000000000000000000000144414447111614020515 0ustar PNG  IHDRj sBITO pHYs B(xtEXtSoftwarewww.inkscape.org<}PLTE\\\\\\\(n&jauIENDB`x2goclient-4.1.2.3/res/img/icons/22x22/applications-other.png0000644000000000000000000000140714447111614020402 0ustar PNG  IHDRĴl;sRGBbKGD^* pHYs B(xtIME ,IDAT8˵TMHTQ=wx<5G75N -2臂Ċ"!"ƢU!Q .B(tD?hikL33>%/|}9~̌XRB:0=\p䆙 >& Ix.m5ǼreL4Κq9q(dl*zʀiF1f=_WXԜ9+jj=@m ٜ6 .)#61T=:06:έ2oa~6"tٚlVt{WZݰM V3Hϋ.F}M 3S<9v8"0:y>4㋅mN7* /?F}͖c@ fqťX}C3>|vPitX.U,NPiqNHDbZo 7D*)G{;N^5.CB#x|Ql+"L[z $bx_jp:dG]mČ`T<.ߞge(:`"z> zkGUfs*,@L|zL d򃑋*]Fu;->s1ZP񦀅2rv ,]b7f *biIENDB`x2goclient-4.1.2.3/res/img/icons/22x22/applications-system.png0000644000000000000000000000257314447111614020612 0ustar PNG  IHDRĴl;sBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDATxڍ{LSwǧ!mjpqXAô,&PL(RJiV<AGE^@PJi/\Iܞw~wl(܂JJ1.o(g-ԞȘ ~hIIdmQwdW{Id`|\F!ǧ_L>;Q\\^lY7^oEy Q2 FNL.]>t&e8p`07. 'Kfgg98RLLěs 3 Ŭ7WӬoRf@ll"E{Jݹs/\] ZbҠ0%;vw%-v<++Affx{^klV77x  ,[)C y9!/1FQA_ٯŐNyy}l~\pp 000f';'ܥ'{Z[Ccc $&\ YofJ ..Le6x"}vv)Bchhxzਨcc-/1`.ddMټvv173"4+Kȓ3tzѿpFZyyu :Y )!!֫,:p3@lv*+qՑ~hG..! F9Ҷ!JtA$Ʋ"5@OO/x1adPߢΠv76e296~ݣ= ¤T*qBBBW&XCj3֭?e~~ +ÓdZ 8#G?Qϛk:Z|D"h5+⒚lo(bT j.k+|IENDB`x2goclient-4.1.2.3/res/img/icons/22x22/applications-utilities.png0000644000000000000000000000157014447111614021275 0ustar PNG  IHDRĴl;sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATxڵUMhA'ImpB~x4$1-|g ӝ9kIb ~8[t _wm˂f#Ig 3C4c=I,'TPnQwa`$QL# 1 $*Y[:Gw2p7om G%ijm]D|1aa>tP@RE*z7NKזvuAz ZSXcVNa#S8n\_T&( [b}XlE_p1k;I/ex*Ր^l4]*@dJ c<\nx*5 (%Nq : ΋F_YNhmDU2/"@?=ţJPfTab:E5"MT8PZ%g955;88 0}d{/N9<2|n ,0ƃSג~f7,2dgdnVߦiZ wwIII?K=p,=[ިBXYW*nUڊ=CCCQQQCCNm-px{{iJ\_zsڸ7a|ۡaaazZ[[lfd L4:> xx gc髣lvlbREt *++h˨üq# c :y%:::|x!zF: m0 R_"դo6pVVCOOy~X,TRR )v:ᕻXH~e6iD$}" _@(UWWi4Gt: UUUEc. D>` Q Xlhh8ƄY9<H2Z^YYvuuՉ6 jF_[} QhXq &H)GGGg|~YQQ/^(=hܶ( XuNC^z90fӈ,uM 89QIENDB`x2goclient-4.1.2.3/res/img/icons/32x32/apps.png0000644000000000000000000000320014447111614015533 0ustar PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATXWiPSW=/{YH `EE.hVE―*:uujRFEo,.v;jC@P(XBN{yR inm򃺂)5hof 6C30\]12>O8!i@`7C3 q6.5PU]6YάT"{ITQ=F$Ԟ!މ͞ ^Aaj$yv{5)%N ֹlDP曚]uOq$'jwHhC΁mņDLԬqYYtyrp^ Wjߨ =xbvm.pϦ@@BvD/[ٽ.Iߚ0̳#-Fy KO8xJHq>y5!轛l#å=e. 672"Ue^rqdQjxcvcRk1]B۝!yϳ/ݬrjEo0Kz;YR8ٰ6M(b}G%e^):Ť!reiE*ZPkɁ `#VٛQWڮcPr:R'P.:L7-vCk|%􄥓3{iO1ڡ o5N7q~0ڻD G$Ǭ:+4ZS%"Mwt7]ؐg8tuG^G7SŇ;E?m=~ЮfgbE ,zp\MIu!&#Ur7IfRz=3>} 1+J·8cķ<; IA._@f%Aq|&QXb:\ ټǮuMN ǏW4hnඣdv=[۶ZhPb(Z!cBj-Vv'd-^vuEP^ò__jnΤ8]>xt?; bzw՜ Q޿ cU ?ïxiu3LAW۽dls'N8c7u7ɹTKUGQ ^ RMjUV"5吚_{M}RZ:N HlF_e^K&5r(T7gt_9%u Iѳ~y- w 2ON ߄ ZLǻ`aݝCkc))98&mx/hG7'V)μЮ命}CD[nNe~@?]4tc`p#%ܼu'RB4JNrqsiWJ'*ccƂ&NԺāN.&mqxyH xH5T)t&"aC^[:7mIENDB`x2goclient-4.1.2.3/res/img/icons/32x32/attach.png0000644000000000000000000000147714447111614016052 0ustar PNG  IHDR szzsRGBbKGD pHYs B(xtIME 3pIDATXOHTQ14Q̊("#tL4ZenjB([ F. iDѦED? $+LҴFu;-ʘp&li\΁}s.&Ҫ5: S5;m0W>.@ܺ KD"֛da x"R f9. &fQS1ބ νgp؉܂e (\e{if$»CjJ G/~Ԃj.yqaGSt)2N kM#±V(1p?p( LƎ1vOR 2@KnFoE˝6HbӪOm] 21=4cm~6S v=[籧[R83MI<޼R|3g~@:ލ4L* C>~ +DO I7Y(OToiڬ{5+]0zy( @ec*E1U1 E16?Q\HENŌidF) aE">Tˁ }"7MדO_MR)ʀXeRhvDfki+~q| [ >_huQ%HlxA|{7th~?: OIENDB`x2goclient-4.1.2.3/res/img/icons/32x32/audio.png0000644000000000000000000000267114447111614015704 0ustar PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<6IDATX͗klUggcB[nXBh  bBHP jL$jhbT01FM/ AK)b@(vh93mZ#d2sϝ?D)4]ܪ4a S^FJ12!rsM#@0~HJCՏjV'49ܮ iIX%7oW0T4MkB`qY2<78zv8|]xx]M h 7h{Ev>0SIq5a~z:&+d[is1GuOh3?% rC/c4vo*({H[>@q5YUbXy+|lU^47=5lpD*+E\ˣiֱ[dt&HNX$9Uu|鴔vK>R/E@˲pm[[:=%' XuIlLM!14Z>+\-`:D=lva"cUNz~v=@]&95kڧlT* O4T>Wz_q+gq'kދVVSC݉wPmbCi+v|e[%GL#e]umRp ?={۫i;OC?8^0=ɆM]莪U'>7Vwb2jJ` p?O $@}IENDB`x2goclient-4.1.2.3/res/img/icons/32x32/auth.png0000644000000000000000000000322614447111614015541 0ustar PNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDATxWkHgK% CR;m]X0hԷU` rcmIj FP͐eY:LCYz?!3)ϟ/ oZ,Wv{`́fyzΝxL m $5۷@}.\DMLLǰZx*!cƍw^͛BˆY]^66mTJBۨ">> @]]ڨBuII~1gQ*p-Y".塑[aٷo<ˌ =%qz" 1e%`"J8vxa-+$^%YKܨٞ&5 hłB }"cccIMM"l :k#]V (J)I.` .f0 t Yޠ555,!1#m Hi܉;aԔP!"9"( 9[AD;mqϞ=kYsw**ƆQ3D *6fR(Aa"z}XmNI*B(?R5>u/fLB)\:#a jd h^^ h lBBBinnG\5g n SbJ 4qqq !!pEJ{oڴ)(Z|@Xwu%!11^F"--MIP߸c bQ.Jxly tpb 4gD'Wa85jP< k &%jV3䚦{B#eE$ oU3T2TQ up{Ƈ%ÇX,K#L% 1JwdX%܊(w#>y).^\˒4R"#XTAkO0˓'Os̑zeG#9#mb$L׍k8sS /,f#(yt7N$gR <ܽ{Wj_S^W[ Ct4ö 4f2eJ+Wvm[-8K8ݕ5(_Y8I50p1c `4Q8e==u4(buIENDB`x2goclient-4.1.2.3/res/img/icons/32x32/contest.png0000644000000000000000000000236314447111614016260 0ustar PNG  IHDR DsBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<UPLTE[[['''$$$"""777}}}qqq:::444vvv[[[~~~???<<0k;K6oݾm)ś6GEnۼS Cãbb£7oZ` q)Y)7,T`즒J2k@b(Zj,sXz ^b.<Ƈ6/_|,_ނpGM=f"L8feCXi[1b_;k-ZO=u@lJՉݓ 8 j\QDƆIX4\˒:'qc En8=3m]Lpzf:ɩ+kºNRx򢀸 ,(&?;3PD9+IENDB`x2goclient-4.1.2.3/res/img/icons/32x32/create_file.png0000644000000000000000000000217414447111614017043 0ustar PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX]h\Eܻqc&mPA4DAKh V-j(>&BXjO$$M|;s|dt́qoϽ3$"H}aiIf_|3<~bƞѻ;15ǖXZC/L[1PB[!mEz3IMh_]z؂T_-&Z;Va Ժܕ?Ư/& l ]YLO!c Im<ܑ9i[7oR\ramcgv!>59[_O;ݯly?ah@"twTL 4hV8dS͡k!lFf{ohl>z?ET_>O皩/|zK]+{*3 >[Yv0+%f3)>BF.'G-=3uD$4[[M1(f@Jd[z|v7kYېÛY "rLܞ'>MvC7M3Usj+Yжϗ ]0h@)(rD,xw K4F $gn03D$k̲v#ꑑғ9]/V3RR, pZe;*6z"2_RP+8NE֐BaqXس6k֔,rԼaP9x ذ.|^HBJ_ s's$Rho(ce-ܨBli p5']-Q1ӊ$@/oꝑ>wIo>"Ex2P<0V_8 oDy(cDTTYR֦ڍ2Vxn.;ѷ\)6T@0IENDB`x2goclient-4.1.2.3/res/img/icons/32x32/delete.png0000644000000000000000000000266014447111614016043 0ustar PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<-IDATXŖ]Ug}tmwwܥ$KvD4Z^f+-xj ~+.mLP a4hR iگh5=Tݷs?5c|n a"r}""NueG v_ ?XV.4MJԷj| \~U'VԩS277'yf#Ko_nbEDֲ qyO gC3eǗ?~E~'xqi rLXhpEDTq2Gϯ۬p]rnur={ `l4@:?/筅q`qq$Ih099y|K}mO O7_oяݴ;;)2u* ~5Z{J+OZ9xϮD=|z)zByftC7xw <9T km͏_>Brp_>+cD8W9\4ک`>F/{Zeȟ׺/8/M;0?lSw絅 V]72_۳-3WjQ g玜sۘVV#9y?a@π:cn][ d :6@왜z_Y 1caj+ikF;Ur_t(/[h: ~l~ŀF}ilg\/@wgSv}+NEM^ͩbb#*&l鯁(+KOw{'20恖qó2a)76aB h~Ֆ#^dO^$9x%c~v vFJuζ_*#&g»}PPήW3$52'u+*dD"Q&L>O?N^l^TRi8N .h]"̯\KwS5ڪ;~uUh?7]?34^Or}Ky'ZO-ggاcBж.tlt+wzǷKie.s*gAIqqmu?=B*^a<pygqfدbRZ*UScDQѿD8ĸIENDB`x2goclient-4.1.2.3/res/img/icons/32x32/edit_file.png0000644000000000000000000000246614447111614016531 0ustar PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX[lU眹ۥZxLH4bTc!%JHP)(hEJHo[.۽9LJNn[ɞ̜~R^ (EÁ:O*] ' P$@"d$N~4M͝ d6!3!Igt ҏ櫩7쨞 X= c_sW` @eϬ :g^?:X3Sk_j' )ԱB!f0K/ǖU>ek]r4ő1%6 Tn_ܳm:6:8~HaOC%bI _i@UHYFC1+JcxyS4Gm%A F!Ĉ#@dL%$7W ')!%PdfN^J6P?K 슄Q`86.$JP=OEl}ʢ&Sf˵4ʼ 5 =86 )>?6ģ}N6F! lG sYR %xkĘ`EHs|G//GkOg$TjY?'yefK|vv"aDM)%1_i +ELa?)/:n$~< %7aXU>Ra^`h( ef-B!N e<a?ÛG01pOզPL ᚦ9:ôDu B󖉣RoŋʱB{_ĶZ\k0Xn /WYl]ch:9 6hFkwMEWxpb rX20*8a1 sk6J=YW?`@*g]F As+#]5R82عZ;Rn2:Pj*);1ؕ1lDoăU na)#@aU)iy/SQxhL)+)TU4WL9#Pr8@m;Vrk#'gN(F)5.:s`.4jh6cGnHRYmn[uJQjMsO.)KjLK2.@-.\2KfJ0?\2.Ɵ0!/$NF-qL_7vVIENDB`x2goclient-4.1.2.3/res/img/icons/32x32/edit.png0000644000000000000000000000232014447111614015517 0ustar PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<MIDATXyLUǿ3{ ,Pj.GkI+D[*4ZBޱUb&5T$54&bx)Gr²μĆܦ&Ky}?y% GD_VA@iD'm =wt߬hiGz#ou/@›B7%dh㓩=QWoj'  '.(7YTp 2D`TM΅ D 7Z塨Ã9$"#+.cX6<~OdNlZ=d!qFŁ1,*xM0u_˲{7dj[]pC#" :$zbo[5I+N!ƿ\(U9H}EW(ˀمQ7_sC|58xm ]UU&0Y+x'Ϻ3,B24P)9}gmW'˛@ޕ2:MK =d:-׻SH ĺP) p1c$H,^~}t2-[7ݖ68&l DFQ cy~ts%ca !$F)PڼYd0%[:“_?*A&`w,"$FRqXCq`g}ӎ§ΆbiPy(3q D Xw<+pgCxWggR |yϾWFщOO"H651j4Zӎ==)B,$cNPJܗCu!9$*ii6pς{ok-]zG6t̝̓Zt;^u SS{:1N_S sldr]`Æcwd<脦2f ۦCKstuu2ƶstrkώ"R2pLay[r2C ci2 ;6 3]ןǕ +")M`##Rj+6=1!p6& 3:=S\Jm$BAI&3]=e2 ^ a}I&, 6S54!+ ݽ姆-(qXV!p&l^e`pMFҪ _Zw΄[2kU53Kx|'9A1dLf3tXz–~Fi{*GJs|?z #,+"y7n,Z"# O0p"p8ozV28>F,) .J;KhjjJ8G{n<M&oXN Uűcߛ_&Q .p0$!]@KDc(\.׉+0l_ h׼5IENDB`x2goclient-4.1.2.3/res/img/icons/32x32/exit.png0000644000000000000000000000357314447111614015556 0ustar PNG  IHDR szzsBIT|dtEXtSoftwarewww.inkscape.org< IDATXŗIlenq11m K4DfĢDB9p R a D+Bd2ec&[J<΂Yv]ݵ̡[sJ_-_u9(Ɓ0wT)`랐ޮXzCCDt-7orzfaӁnƍ\g>jYk,"h"(C)&+PM+E"ѡ!\'t`||p4aRJDP=%Ϥ*3g2>8/@8i3Rnp"M(@²mL)VVpVVu?˗Yuu6mcZ##$wBVǸX$  f\ `5<]3/ZG$29IRupqP.' @|x 5űm37ݹ9"CCt=07=͛WW*qPJ#J=_~ק)b}-DL`N]*ѿo_^5Mǜ;r?@{;kkD,d\KG"`sϑf4DDL\~cdu۷_~O^c==,5M"Dq sϑI|ڳtw7dH(Ze+7O`$K% }Na.\4T:sLї_@ꪖ֑JN&;ؗJΝMO>;wTH?ǵmb]]daLYu۶^Bxfh 84Tp,FPiiSM Tivc jyW]C5ZZ䭁4ׅJe\if,k j!P^Xw {y=bmJR*A>b]iV2*J t۶єBjU"B\׃LĶlR.#Qߐ!+-C?7@S cz:8>NAu(P5fe0J)@6 hW)AOYVv0T oUFڡL@k/ou*٬Px);X#Fw.]"i!PfQ4R eu" ލo_J}ƭ?v&޽たs1{ʉ`!k Z_'BiObO8y2 a"CZeO(D[4y|o)=XooЦ Akdbx]‡SY)Qtk^6l&*Gdo!B br}=z&&hn;)^FU"6:JmQl4Cm AS4 /D䭷|O2]#w1y(:oJV{̞=%f9w&5ܷk&8zהBD8sۋ%66F֭W2Tfg.,01mP*eIsMZҵ)ŃO?~qY Mcs8d^Z*:0uPx\넓(Eֹ&Yms"u*E_Ŀ'[lf~q .t`f>ʶ͂_װ]R?y =kIENDB`x2goclient-4.1.2.3/res/img/icons/32x32/file-open.png0000644000000000000000000000205414447111614016454 0ustar PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATXŖMh\Us8%-RkvQSK+(PE"jR\..ԍE(b7Rڦ4mlidwq2ɼM31l;{=3N1;4Oﶁ?%9U uUU-ݨ GZ.%xlh'8٫}o!<W{_oƩZ#]ޢۃC{o P d[כyRѳ9哗\btXH1_އxbO-s@$v-ҋz?GA^юv^U0"Sǯm+<=r8`*UK7<|<\,dVGP -7El \!{__;dkHmDTb⹪]t ΃P =9k_|㕚P\fGk ʇ%Pm,;bVW"T,M%b벝ˈ{T9Ie B2~`G{궦YOOrcW֔yR@wqy]G9`)^I큅Pyh{Rvfz1R_R3w#oڎ>׮kDҨ@ʧS3P*lIk}na S. {[ H:iLw1"OmRz`rΩϩ^]!o}]kfߤq Zkk꧒5oTA܀gRJR*p\ZHZ.\s HJBC*21m9(\t\f"tx<Ҹ^o*)G =a$X0p6@8U4۴IENDB`x2goclient-4.1.2.3/res/img/icons/32x32/gnome.png0000644000000000000000000000151614447111614015705 0ustar PNG  IHDR szzsBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<IDATX_dQ?%C[JzKd5jfD&˒D$QT\MEL..bS(3)#X{۟suvxs{爪HDVLoUuqfb >`PGUo>[_Zo@gtw<P%IxV9B:JsӃaG> V^4@Z~ȇT]WؙTu߈0]?Jp=Uu/ pZ5yw}8f-+k>vH0b÷<(f ipČz&O> yT ۞O <~j.֦JXg׍}`)cgiƼbiEX!ق82>jD^[Z͘F8fe`zTaQuJ3s>ߥ1PՉ4W(ډ2pJނ6p a ׈Qv>o~D80]O֋z&GQT THyFtF3׀M̛T+`AguW$oKjo]uGS>} m]`s<gvc ht*&Yl<\Z;qcx@IENDB`x2goclient-4.1.2.3/res/img/icons/32x32/kde.png0000644000000000000000000000430514447111614015342 0ustar PNG  IHDR szzsBIT|d pHYshttEXtSoftwarewww.inkscape.org<BIDATXk]Ukw;3)3픖Rk *#ᑨ&<Q#1"A4@H)L[ZKi}_眽p}@gsZkEU;7FnijWA@L*P}^[7d2AD-AzlǏn6R|~L׳W֮7Yr;^{ɹ2& 6ԊX}aE*`T.S٩nX޲p[޼+ϭn0Ζ:ybB,YcB3ڴ^&pC\h>㺆)`t:J}8n X¿ޛdt\X80UfvN8UH Qsa:Ex>a(+l:;e|&~~|6{ȹ {s0Yܽc3BC+b(uӨ"N*1R?lbN̔6bAΥYD =aQ%)1Pe F*$ V+:YiVǨ*h'Nrឝ' LHŘ4uݔ!0UuuxI i&4T!~,\G0/dxS͔$@VrJcyRZ}iSy):<f sqL-M "T9Rǀ15ڭ([l6-kex:b $/f*+E}) bA4EC1*E|y. X/XLkkmy|EHDH"q!bR iV2rd pNxup֢ıefH`LZ[d1 l euyD*>~(mϱљ9r9)RDk2 E<O65s$F I q˃饣 .;.;YDK Z5˜3BZ_3$~U0k2a c4c@0& S)9ϐs/+-aJbe"&5{:BnĩUSǀ*1黆n\ )4T p M~ "CEx}p/ f \!pm~blWvCalh>.# l0?hBQi.Wĉ;J QumlY p}<6my8hF<$,0崆y`+*D IpEJ+W '4Y6)Q֯`3i&iZH{"[rcPetx+V|">wK0!pRD;!7mUלůts(Oh2^{*ΐ/_LOQ#`S F~@|r!J+9W7|k6l[]-<0[rޒ6B-,U3@* ފ BϰrY|ᮇ I{ksgp+Ev><{|)'ZeO:"S˂38F39G^'[FbV86Vnx 1ͨ8< OQNZ';T %Bl7 5_OL{:eQ dV>KA[ICAl!6NA$]L):$c{$];ȗm JSj}Lvƺ&ήU˻)Yʱ2]L)YfJRBdɗ-R, Cx|X uNҳFsK˞ﺂr7GnXJ{Փ>|'Npjՠ.>z̽K 9ɡ*][ZV`*W5vNY>g^3MAǰ*ߎ1(]yYuMrK.%?orIjpzwPu˗vf#@ɌE0Q "1ap).^fVYj()))g*8Ni1@n_g[朽h̀egѦ9 qY0le ۥYaDZeֈQ\H+ #o)8YTwݠ0{R|8QllAwN{%\\H;kqgv@˧6e2x&n3mDy#n>R! [L:ҩfgKE'~sJ45!& ^=9SM{RuETdןy_-x Zw =%''?XPI;{~t[fsLjr041fp/('ٱor1(/>ۼjn ߃3Ifڈݘ;/===@ GGNyn7ys$>ʀ:R$9M kekJ>*(((8<,b;O RKͬNRC@UE5}#b/|6_$rCͷ}.">IӀX,9 ]A'S!9q r39w.\T6*#{9s"Eh{9ӧZ+Sަ K6t9])*NAmqT?k(3C#7e.a/ "]~Ex\`3{/:wk 3 Dn[jHx+ӪgWF1شr -e б%];.c.eYy#@LRX8>ßgz~4/2[;a'ɪC29~.AUxtftwŝjNzZTweiXnO?FeItxC/%0:,zNp*!O9>H]McL>9Oo]'‹dCTv dMies} )I;(/9-yYUo zk 1bX*t.opX{rX}p6,ynb鬋lN!H%,pEgT5A 4Gec:ChMqqV\Fc:U3gM. (MHa*m#iv]a^@DC(ٛ(IENDB`x2goclient-4.1.2.3/res/img/icons/32x32/new_file.png0000644000000000000000000000212514447111614016365 0ustar PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATXk\Eǿ&ٴM$-(F jې/ߊ4-@J<J_D|CBb( mݽwuC03g眹sID( ?|ݘM9D9-;vNTa]pbn,Ė>PT޸8351i fV!=>>vnPSZ;p㩱 V οڃf \1[W s1۽sg  6w }/|Q&ߘM3l;;4>/h&8l&Y'/ ܘؽXh܁u x)W)j/`thFWQ4ZL/ ?Ϯ4mr:iGa=vF׋Мta|-C3|s7N>ۋ^]+WRbE\_OoKl8>t wp;sjJ@v̅vq#\agW*v!I;U@\++yZ ƆpǑ~0Ɔ}c@@3u* :SPPexWW|_%{,v? )XQ,)WU@#B]f\Ǯ.[/"- $8SE:2c[Yl#Az!(^!^c-OF!+mA)sy\udԮngH x膻o4UYV\.(ak<91/Ly 4RFQ ft@UP- 1u[* Ra~ZֿdͳVp68?t#ےN8 BQցC+ZQ@67f(rcrn߉r^KqLth.IENDB`x2goclient-4.1.2.3/res/img/icons/32x32/open_dir.png0000644000000000000000000000073414447111614016400 0ustar PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<YIDATX1K@wmF CSo"87Dqp,ZkCk=i`zB_LzEiH&ν؞+':]Sqtg&fosM_ aޠ7춾_-:2Yx^6g_b0nW叶\"b@gbt"${C~pVIl?5+x 00+ MWԀHs Qlz,i]D񻊗@|!#juq#`[&f,0 k}߃ĈIENDB`x2goclient-4.1.2.3/res/img/icons/32x32/preferences.png0000644000000000000000000000476114447111614017106 0ustar PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< nIDATXW{XU300Br1/x)QCRK]wZ/miv[3]ӵ,0/]z 1U.\ >yy'8-FD@@ @o]s~@ @`ڜ7e`xVn6nHkew@t%50q1niLO2_ucb)@sEA]]a'w2MjtϘÇ 1!1XyZ4a/ceC" @A#*A1%Ae3cTvǦQE "*m>6&V`Z%Ƿ:X́+xE<5B [S3s&5 _˕BOT^yrG**\FB X7Y;"1pRjܨ*>qȽBSbh7M_~f@dp".=Jٍn?8u3:""}y^S o*vKR#9~! Kk<8NU1#Eٛ*)r~F2ȹ8,Kd-+-Xhqɫ$ %8y{.5 ]!,=~/@6{/ɠrԴ)a2haN=ؽ?8%ZdF!~ia1)pҫI1_K0~ȫmVƮ@u:*8a%{O;)驮FF ԫK` dzݝT`[Qb*r9u]zhWm%?f޳m[A`Y7{G9'o}]Q):p\~p"BУCGTzs(^u࣡Svup#'$T"'@Bƒv5tJ3]y(U)\|S\-U-[嬻4B<—"x!qwO9o-갼cgʭ!iff)@& Ԩ9>ƨ$"7p*0Jo}K^"\"a+ƫ!DZ 6X|dP\T*a'o_@_4wOf)Az8^}&{ T624<e9~䶖ƍ*o{͕ை!+wcF./Gi_62y;#ہ|Òe18p_w/̯"LO6䔸lٲ6.atgs2_\0uҸIQDM@|*m]PX1P^mƷ:F[u|vv =EN]ǼQJ4%lP;;"9'ʜ sͦ9gVG٨ŇiCqp=G 0涹&. 3QQ+X|c_~֭%E!&5B}]₂om(la]gN~~pShQމ(9%zbǽX1Bկ* $O:|mz'߈Hߍ:2{Phd"xeyVo=ݺsxڥG/?9Z2\VFű!zqۼ7Z=aݖ9|a>i{Ϛ][ǦIENDB`x2goclient-4.1.2.3/res/img/icons/32x32/rdp.png0000644000000000000000000000335014447111614015363 0ustar PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<eIDATXŗkL}^ c[ȅn4mݤVTMju6MۗM>5TSffFB꬐0;6< ,G:yr 4;A6@s,fR#NKk} щ\ 5saTDDUUoM}w_Gc> PέWRɫ[>"{8%rι$I7w7ԩbppdXmWB5zv.^>2l:pʰg*anYA%ND㳯V=REqRVX~뉁T_X >WnS6/ Is՜+B 9JI"j{:dzfw[lڮvFnK 8nfm%K {VQ}g~;t>&"^ӿu; ` 5 뵸_C`s {PQ~UU[I.[rK)ROv-DOQFgk,=-c+Kѭ cOo߯قD"y#|k9\b tݻ~^1iXHTVhuݮjC_HQ0rlyid-_6'lyөs^uSk*+w"V5WW}H/wP̉SJt  T>we`S@$jo2V)`ǂlu*T9-p{S, @x@.JW p5nz̛mF*ɌvnF~hW~w5R -,Ԃ!ҚZ\|ZSᢴ_Wo߶6;-ʔwuFb \DCe#p`JPiDʝ^kǷ+3O|9 &ݛrr\X #U^Ê]B^t SBB(/tǗx4Wd}Yy: ~dח争GN>d2RZg͒lvGI& ~9SEPMYE5.8qs{]L K/y]T# .&9ΛPP 3-v+]}o Z@ds67J.ɧF'悷n`/WCKqc!,/""?6 W/n;nvGTXu^y\2TD@ Z#fXpu}rDl-~?+op)-xɝW&ceXH>|>oj uOAUݫotXb`7qY`K .gIENDB`x2goclient-4.1.2.3/res/img/icons/32x32/resolution.png0000644000000000000000000000152714447111614017005 0ustar PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATXKHTQ+ !"J"+˄6--(*h׮"z($Z$-AEٓ0"" HI15D6wνDTJK88`ă[5CFvLHn12K!t x8vl=EIA﯉,6,fNrsh데 eݘ͈e> d kVP37TM;R_)bf0;lzIENDB`x2goclient-4.1.2.3/res/img/icons/32x32/session.png0000644000000000000000000000223114447111614016256 0ustar PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX}luǿklXGg^0C /o^&j,4$'DDP$nn鶲k-[۵w114?&<{0ư˚= H`E!%XA|PdG\r}v>$⺁Y戚D]qeu)ï[&ZFWѶ{F:ƨ/ I4phΣJ.[eBJꝭ+ |o?PBRPV»_B}B֛w  |' >f h !`Oc]Xd.@q`T-X+hznygļټ7F ;c7j7;de͏sEՙmLrUa8hW˖2`-˧RھJmfaYUnt (L%0vzOInYʷ0Z([ǾJhE!gL<# mpD[c/qe9_Sĩ\ ρ_G+"Mªt=aJ ?U(f)΍y*)i϶BIy}Dkd*1="\cc# _ze+wzȷ jLTHE0uf\#/It:$IBlajȀG}&Uw?&j%IBǸ_UOk]jpaZܬ:LV ]Պb1Oz#li#<'k<={4OI/nάXvju@I]@ڇc{Jk7 O[LnȡY]t|(߽yYaKG55c uMN38lӾ!yW[}1MCHȲ~h"BgA_KӪoK@LE88j%P{dEx%{ Z?$@ /:,JIENDB`x2goclient-4.1.2.3/res/img/icons/32x32/stop.png0000644000000000000000000000224614447111614015566 0ustar PNG  IHDR szzsRGBbKGD pHYs B(xtIME 4 )"K&IDATX_LU?זױѲֱA20?ٔ`(j?㋁6!a,q&[$'}![0 cF aEƠƯ-ҕH|>߽w~ P+ٿG49 ^?:;Z2G Y498 'dlڭ͠FVòE7$JϷ}*5M|"B}̖)Q=&zVoIAW q^""DE䪈-vXCAXq'+Jt{UR^Ϲ6 ztX%J|۶ 2P:RD6;tt,3lO1֡Lq=it$q dmÀgH/̵:ZhQ>\)1">73Yknugc3;+< h Ćբ @EQ[l ǩ j zm͋NuqzQ51 iݲD%9gHLӚXlSjnc_u=Tn޾'piuh&" T>ON.4=2|%2! ݂Fw8JfC/ H~ XjCD5c)q tiAO0)IɽB8=x;f2w,U_,wh(xѺ=picoֺ( T43pXVE_ANވZ6$nH7[֧pU'VęY?,tʬVgɩ`'8qsP?XKUJl~]7&K8YgQځ ά۰;`HQJD(u-C?@g"-nIENDB`x2goclient-4.1.2.3/res/img/icons/32x32/stop_session.png0000644000000000000000000000210514447111614017323 0ustar PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATXŖ]LSgs(UAZ th/B=΍%3_ f7[B[Rdɮfٕ,zc%QV.LֳX?)BOϳ ֑@i6''yy:ČSR;s-HĘyΕG|,gI0V1eP^_PP.}n+I|nQo!)8>dnIipPͿ}7Kًq?ߖҖ—_l tF],tP Ƈmх>b*C̜kr].<#]ƕ.k2Č/sp$s =h`V1{l``㗞iqS)5X!YŞ"L 8sY'nVf0^[qymd /-%,BK:@708LU`!Rqu pUbWiIw=:eX`KR.(F`d 2Qϫ5HO.%  "G-C ,ݿ03Tzabf5fG 03P[kR֚ (sVwWfpi2fmdf`]WI-xJ?O|^VIENDB`x2goclient-4.1.2.3/res/img/icons/32x32/suspend_session.png0000644000000000000000000000034514447111614020023 0ustar PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<bIDATXc?@} ,86H$)UK [B5 F0Q:`uF0ZĴnQ87 IENDB`x2goclient-4.1.2.3/res/img/icons/32x32/tbhide.png0000644000000000000000000000236214447111614016037 0ustar PNG  IHDR szzsRGBbKGD pHYsu85tIME  :mrIDATXoTUƟ}vڡL !%Fl#1LX[&Ѹ1bH\• ؒH$#JIa:R3ttޙs\U ]{\ISqMZQkI2Tޯ)/p_1'B- ~56j 4'ٵ 4hm[:Zf-`jL/}O^ S7'BpP=n t΋!U/ExnQgj?VW5ީ=u;Z}QgGDwZV3IXҸQ oU>zVlL^ |v@~_u&GU+2ufS)l]j{r *'-[gJ "qnl5hZZ莈8&[~7Y7k75~.qlkΜ*D2{h@J@.y*\h{K@8bD:'+\^1UN{J T&wnq AcNXZN7M!1mj̐i2pu>t{l%_ [(?40~bPT\WjuHHU* %*b;nCo*&cmmvmkߎmj޹ɰ7}`"`0xV`uu ˗Լ_yc:YH$Enj^D@4VUM '0ġ/&ml¨)1:Uʩ I*$$5`@&_aB]*:/tryRwޫ( 9Q? zбDB¢h[Faa"`-B'}\-!A X:ASUK|@k0pP:l,U!qa"f}ܜ+Br_zr2x'%}\M0ṭk*1ce=\-GNN"ZnK«HLg~zo[)[8(|Y霏3_>kOo&qM!h MZھZ`%WW01=/ ?YM "50t%/RIENDB`x2goclient-4.1.2.3/res/img/icons/32x32/tbshow.png0000644000000000000000000000160614447111614016106 0ustar PNG  IHDR YDsRGBbKGD pHYsu85tIME  CIDATHkGƟ,KQBbu)Bi cnCO)=zi4%.qC8l˻V_I;;o ܚ40ϼa7.}]:ihT2ƏGx,$R"  oXC,`ꌷ{*qC&BZ٭%}H8N,N09fpv` .ۭ9#i "+{Ў3LE;1uL? IE0(D@նEr/Nn̦IG̱Fу1Zf}^ [[_mSSoxw#<鸡1#F>)A[ Vޑ J#mַB;Kcy6hvdbиDbsj{tiwY|3QLf>hB,r8>8Z' YL?o}Y]KeSYy`&'LK 5-r3XZsO՞QHTZ2%Wr笆Lg׽եoޭ?˯aHPp|w!߬yWI~: )ŝ|ſYl}K4 yGtqctǼ3eC=$ĴH&4Ku)/yG߼Y9g4fSH~fj"۩HR񣨡}b,ahh{^Ұ9k"q]1T o4 M'uIENDB`x2goclient-4.1.2.3/res/img/icons/32x32/tbshow.xcf0000644000000000000000000000411414447111614016077 0ustar gimp xcf file B4 B4 $gimp-image-grid(style intersections) (fgcolor (color-rgba 0.000000 0.000000 0.000000 1.000000)) (bgcolor (color-rgba 1.000000 1.000000 1.000000 1.000000)) (xspacing 32.000000) (yspacing 32.000000) (spacing-unit inches) (xoffset 0.000000) (yoffset 0.000000) (offset-unit inches) p Eingefügte Ebenep     Q e u?Z?V[jurlji ihisyj\V.UZit{m\V.JVaq˴z^R.9UmשaFJg ֹb99Um М_B9.U ʪf; 9Umʑx\99.Uţx\0_9UmćoS 9.UnO \ 9UmfF9.UfBS9gmsys:9NV\aYF:;=@@9 :'??𢦛tשׁt ͺtƱB Ѻ} ཪv ƫ{ܶsv¥nذc v־Y 󀏞֫& vuvz '??     ۸  ش ܫ '!FZdb\\^kl:;k R ѧSn_'2r֠a) n N-n ːSn ܎= -nĆH n׃. -n|= nx!-nr4qr4kxi4  K  Hintergrund      , <x2goclient-4.1.2.3/res/img/icons/32x32/unity.png0000644000000000000000000000565014447111614015753 0ustar PNG  IHDR #ꦷbKGD X pHYsHHFk> vpAg jIDAThՙ{\Uǿ;30aQAYE3/ڶZ]6u[4L-Lu"5-jE`(A?jgy\$!}7섢l0,9WSTCk!؎XG CLc4A~}:ht*e>9Tԉ#@YDLvɕPYP׬efl^c!9v,7ЁAI/'sZqݡAiį7`nܘ6m\}B|vØ쓽yM۞oo m]5?WR}P(AIQgLpUۯ߈ He&/ QrFF8|tmnK?~! ,)~h؍fu袢mqrtP Nƣna] "cZQ+LH;Œy_iG{W]G_5>v9 JL#C/;k_0dz;Qj[oSiVO7niL]r D-J""D<}3- ?\T\cEkXG: Ǩf@ò$kO`oϠwYȓvg=es ,.yZV\[fMwVgRv ?u 3:pk(3/w&U_EߌԼOC㡟Ӗ3lM 8h|D&YT{+Ⱥa] }uS}uA~U1X~_r充c Xit U)&JK[:Fe!<>$vgǮk:rd8#~ѳ#Ne]?bgEuo:IeIrw6Jѕ*,e?a, 1vQVs%mpu #9JK|\phdXS0]rd_,rϛan:0|K/2 OnjG.x>c><`s&WNS~%)2yZH3,eP>s@l1(ڼc!;c4h?sAj4D+.c% 5`2˴+ճU>w_z*džvpUw+w@zipQ_yy2R*IqE&#yE}j`>1L l}u8ʂ!.6E0!wlޱ`I^6\.-\887'\>X)χ[nQs7&~yhMIy%Bdz}5JA.y}4!aAvX.ʷi :4>Z4 U_Cy%+iw3گayi0b|jpIJP;nZrڗ})B7. `˲̖sKi7H)UeOrb#uT={U0pTOA9U}\!#96,Dٯ~ǽ Nc^2Z¥V i~bS煬 R@W>u](ܻjxCml?Ɣ)gǽqhQ@R鍨x!O\L\Vg8a7qp ̚16KP,A:a9qjL=VLV'NRHeĶ,v,rM0y.ZjSI!5YNcX'`AH #>0FhQ9gL:k o<0sos.̝e<\=̘3/R=Ej!j/RbDRV\}i#jV봺UBhٺ^ '}8vH'P!R!RfǶ 'GeVfϚ;b.cϲj$vJbpVGDCm? >#k$Aez)\LpF[iv"KOo9wdL((͸$NO60‹;yE/X ,)y5j> BjQDA=EWJMry3ϝƗ9~8Xڏ c-ȸwOSSLN#F%qµxۺ*Qynr:om`u٦'FD1c4,K3҆4`25FcdN ZfeאRR:fkDAe߂P{;Gv]Vq :M:A)4Rh4 ,eH5؋D|(me\z-R 5PdW!@ss(H\'2Nb8JHDkN&E1n.j(!e33hM5kQpٳgrzj!ZGQ>}>! I4! 0xםƆ;ߦmB,5#<睝}#z.QV 8NHH 4 !A*B1;Ք*̀hJ3,Y[1dBKK &54k(k0+߂ʵ B OcޚocviL>g |e݄QƷ:?˴L}xw_DR/$5ijЩFk6<e43}+q:SMŵ!oCށ+o\æg~Rik#8(@Gc1i :F$SR0 ~bw{il|}49M.49piۥhջ\/~IEI%Y %/T!j=]EzzT …wB-˴pgrfw2i ;۳<یDzwk=mbab6\˜Չuޭ+Bm`Ay#;vszjY?q" "n𐤘E٩wXbpqYjSjvī.c\Nb[}#kaza '5bL)I Bu/g|aO˞2U.*yvAU9I PY?>.61ZJjLfUu7O/GLQ%IENDB`x2goclient-4.1.2.3/res/img/icons/48x48/lxqt.png0000644000000000000000000000356614447111614015615 0ustar PNG  IHDR00WsBIT|d pHYs+tEXtSoftwarewww.inkscape.org< tEXtTitleLXQttEXtAuthorGiacomo Barazzetti6RtEXtCopyrightCC Attribution-ShareAlike http://creativecommons.org/licenses/by-sa/4.0/TbZIDAThŘklS7( (VP¼v׆(RC@BFH,Tp썁[t0A:EcVHL61A}Nl!w;wS!bv]!+WDcndtEN4N|\u}FgQUN<' gT|µ}J."s("_&b5oDUDM[w'wSl,tᒰ6t"lʅު{c99_r|Q~V^fMzdہ%SIlmPz`2L*z@DUM/eu"7ПQ~j6ދJ3yvN0UP\RL 3._Jx8 k é(N#r}P3͒g5Tb(--vDL3䩰J^eA9Z|] X[8׽`NG"ԌXp7sB.Ue\ܝyQg)4VN>hamqy(xP3 WV3U9׽Sxj*|1\ihADnDxi.RTQH)2O *z~>5N|1pCRצ=h45P6=sFNiGٻ7WXk7:=fneB( ^;O|&| 8)'373mD;Jv=C}Rasi|uŒ0mK%@ ABH7Dl*3=jziP,m~uעgѺ9_e7/9aTmN +Qߎ Xki#>Zܾw@|9g[1 Z'^mԌ 05+Yp$(y _n{y\?t )wR;R83d3Laz֭[[̬%%+ N $#J2Ҵ I3,gsp&X1o6(pqx>pH4%x.,y79x-ϟD߲]2<|4.*R[ǂضm6g(%ɋrf ]0:0iG0%s$'3(˜0I4IR9obȬ䪏~'%U:R-hrƂ(8 r=}`&{^; !S0&IrJcAH-MPFmfwyy@jcs(hx1g+J'?$Ǎ!],gd,Xx+D(&/4EZ`MRUT0W\v[lAy f SA'?֚Zw!o{;~t` !h6̚5 CO_?}ۇ5 ٍA(u\00T]vrbϝ&JKa\2KQJs[>}\{JAdhx@&$IF^u AiyG Hiq(\Gຊ;d5pҳ:ՓDn5=nr߽P互'iF|%+Xt2 ATre9Q'90$ "8%Kb4Ag:+H4 xQN^|4_Ys\=Ǹ`UWżGd1= 166NdYAY(UN8(.sq]9\99~q3*ŽJGH5;t;w`E+]M'bTk׭8$E$$%-I(Έ4Os4&ObtHOnow\r/~.@{8U%Tuޥhm뭼kB4, >y:aߣ7h4}z}fӧǛyTu?yGhw@__7'w6?i9_[*W;5i+Vd*(3$9$rHsHJQIdBBIp9iiDEؤy;l3ٸk-{6̧Ԡqn=@Yyz3/#C!Ae1,B9z^tOm{~J_rQ1S^ ^~\yA8u©k;9B2v=+/_GYVv[T 3¸ 38#+ot,Nˆ"K[1:O1yW8;нz~5W!} ڰWӂLS@ʾծr$( kAJTR P(PnJ _v+BN m`K3ZAF+:\" ""$!LR9gÐ r1Rl߾#CÌ 8c4"B.n=n}[فcgo̥"dV*FJ_={W36ePt8sٕU2d03Ĺ!J2K I24'MS8$I#81y˯a~Wα7p|ݭS#wb iMTHx 2::FQDĔNJQ'wUGv ֐%4BCjЛHw8}Uwnw3G-ߎ#$ڐ6$7U3InIKHj)INVD$iFdiJiL8–,x>rs aš{;S+[ ݊#Δ>1n{8rtq8!M2,,K,-e~S!)tIK2R28@)$ WBwKk;o ;{N۶qpN LR7z`݌%egIQVH8Ӭ SN!Wx'/]nFsX3'#1?4u ?!zWy=TÎ{ط12c(%2R5+0Ƣh5hcրՀ&d)]Eo˭3zBy\ 78}b\%pN3u9606" "8!MR,5eѥFᲫoWMO`<ˊI\UU[p>O:[P<6w*g{#k-IihF1E)SdcV#u'(4+7~ YE!;.4he˖;a9$`ȑ!?i-aTBSjT.ǘJ1)Yt9?i6 V^?i)Ԓp5Fw}~ .]DG[f<9t *e9'>G[;flfǎ=:LnDQHEDHYG""N:{{mO˗j-q瞮@d˖-|O?36m7%_Y_&N7N+Hבxd~3a sχ D[Zc:{&Ӆf- 6;NsD?tlA '')6Ɍ$OQ,n3sR5%8a%3=;7ѳhݜų=g~j`'f07SHSg>_w~sps| /KAWO;Q?y^$ڱ o?Yڧn$K{kþd>T?W [=%BIENDB`x2goclient-4.1.2.3/res/img/icons/64x64/audio.png0000644000000000000000000000551714447111614015720 0ustar PNG  IHDR@@iqsBIT|d pHYs^tEXtSoftwarewww.inkscape.org< IDATx{p?$(#6XUkmcZ8N ZQ;>F[LTZy HtG!BI6vf:#gfg{=~﹯sOf2rm@6 ̵:24'*.҉G vxRߤI0P>k2s(~Wmhu~#X԰;?Q"+6Fwrf4"PM?"KW`N'@]:͌Pꯁ{̙T5TlJMw thCD6pU/Ԏp^nwaĽT>/DE;)(*ß;JWoT'ڏGbKNh~]W6`O0bB:MGSB y4-_PSƗ:yzYYLp%rYT*?Ğy Ύ&Px'z<ؖ/:+fJv 6qT5zb3["}] eŮQIl lLL';P\k~pO2K=&y4~0}kPC)[VvZhQ޼!b9:Y G"lCY_,eRʖÑhR"R]hKKV4Uhy B#b| *š:mX:׭⦚t*"KɫSK:-Acr"m=DGVmsEޜ} :kXyR(n! bi\̘|*dm%7.?/?cb Rg[.}/-yC|Tb@CTAӶLE\q(Z6PڦcYt8]ý6A{09;q<D9Z82v3:d{P6XZ Z2x A5G2O)`9Kw]'sC)(&h m~*AԂJ.zw|xx:jM#L)8觖$R19g #|`hT(Lٶ/ZT=.XV >7Wc. 9^m{t _:WL(P "H`H0VzHy:3l.c͇C4byDz%[B&'b Sqs2[d:{KF ;Xm衊̈V~nri LL;[)Ȱ+ت3}&FAՖ9o,dMW~hR6⫭ Ń`N?8.\nyw[_z;RQnrnd"뫂+?>ÊYeώo$Fnh#8\ѽ'̜roc7G>3jڢ$s~I|Ǯ?;hdޙ[?Y:'2Rr*]@RU6o+tKsFmC"M~>zg(M dt-cWq89v6 nKaYWkY -}s.5}nAEP}0y?&OӲC͚ڏ7Qbɍ WW]a>#P^'ֶ|Q5Mhx%RDil|7WHUoOo#JU=/حyNڏjv1;N.xRjNسtzs@yqI&usΞwζPAv4^+穧K{@]eCur*#`b JDž6W8õ(^ep4o$ҷT:(/ogsSڀ\o+зIENDB`x2goclient-4.1.2.3/res/img/icons/64x64/create_file.png0000644000000000000000000000504314447111614017053 0ustar PNG  IHDR@@iqsBIT|d pHYs^tEXtSoftwarewww.inkscape.org< IDATx[{sy}He+QJAMڨ`CkllZS+ƪkKF`VR4,EM\ Xm@+H}= ;;3PIf{}=wϽ]23ml` ÝRCy\N^l"{Z 4btj82@Xjl{ys~4 ;'mOM6L83=pk/]ڐGVaUjZeqf&HX^Jhm`>bjMYҲVբNvnؔ.m=nMզXÖhZk˽/w I?JW{ZP1*WU*U(ʲ0GB\rIȣ`@!f*]z=Zte~s "!#A vD-/ .,|gd=#Lk+?_eaݖէl 04Zz c<_ k7w#=|AK1] ej'tw)o>_'tS; s+Vτ˗ͯ󘁭;{d ""%[T`ͻpf-X.|pa=;֍s'`\<5s//5!LAukf/hw&{G~㶩vs@@\5“8 c㪱U}m55"`u|RjXSUma}fvқ2ېN -*\`==> ̪nb,<+ M-ǘ$$=weza )gdў%+0 U:ش Ěb l'^:m)|0. E ևxih0~}/\D87ƣT? Xov ×'lvuhG/[㪯ݷ ! NNpx#<z~ 'Xݮ[zN `dםSJ| +GܞhcM$IzmWV66ׁczx浃6m\nmHHȩ+Heڄ]QV@_TC^m]Ƕ8+3^ډ7|vSvyu]zō-u.^kfVloޮ؟S53K}] S2E(#'ŌvbjnT-[Z{ݳr]w}w,a-W6k'ma5\)FM]Όz@:Ӷ'WWyuϜZU rlyjR?^S`BMOt:t8K <;WGLJЧjcͫ+>w;N@P/^w5l@ @eDP9sp_߹^klď__JU\ ;0sD'ljq,l myCђ́Ş! w34Z@I dS2:u۩ x%cq@6#Cv}_J(˖?TDv.=퀌ѡ:2 6P2ِS, 2 q|=ܳ (9#6xvF`{@ͅsWX2%t XZcn't8_Fl`iԙ1P@=Tڀ NPC[4흟\5#c3eDs-8/T"fxIp4VF u ` PJP`!ihVfy]vÛ4͕nL߾sN#ZP6w/MF&vt.{W Rc[OZGڐ^Fۮ- 6RyxRлsX*"U__WnnoB }MYxzGn^j_KdG>) `G7^Ph+d{Sg}% ?;?޽|'Is=oƾ.߽3{m)s`GwNU_#safbb_[ ix#F=S}"_|,JJƚ5kfW*NT~濾v>sǢ{(o mm,hbbxغu+MMMoNhT*ʨOŜEƏ\)yZ[[) x}[: /G>ڲX.Z{׵}81Z=99ucDG.] 4EY@Wݺ!mjrӃ1gZǗe:g|b8-g-TBsUY7EB72::h^ B/7#\`wn:{,z G}Cg.[[[)J߿+f^|Eذa_|1ü ƅjmWZ2W~vh811+\vex0W;rӇxu0x}ұ`޵ iR_aoZq!:DZ/Gwq=Oh˶5 XzC xxI \!-)EZk9#9O( [y~|R-a`X0ʮ#P#g_[Ò;>&w\/DGE094Jhl΋V9ճ&cV^~7 q"f:H@X,+\E>h)ַ{\gE>3:Sat:1rAl3ᄜW 2Cm5TCCfޠgg'+6|*R߾>1gD Y T#K5Q2/]k*I2 N-5:5Zד$]T18=wM`KvJ 0d&]R.L\XO2*s^>Nb.#ɑ8H|"0-s<`' NJbgXFG*"vc<cD)EX,x,ϣg1>HȉH(`MaQq- 6s5{ގIh(߁&r|Z7EΉkmADZYkW/PVJU )iMo@E8&Cd0Yd $0=W(;sbϞ=ȒOŢt&I5:@*kJ`9<ƀQ`d!k퐵\. 7PZ ԎxZ XA}ˀVi[FZֺR2ZDBkm۝NȄcN(r-4xz68}e&''1mZk*iaZk]֊X ZHSQJ 3 vڕApxŢl618JD)8rꫯNHI xO}{mٰʝEVIENDB`x2goclient-4.1.2.3/res/img/icons/64x64/edit_file.png0000644000000000000000000000576114447111614016544 0ustar PNG  IHDR@@iqsBIT|d pHYs^tEXtSoftwarewww.inkscape.org< nIDATx[}pT{Mv&_/pt(:8ZeP~L:jKqTVk2XRāRIX l{Oxoa߲6,7}s羷"=bW{#SGTɘ̀$H2 H"~v M.Șf)$*df@i̤I3 (fbf!Sq>߿}ݤBzd0{Rycx!mOzp+"*t3Ky܇\"RxH0ʢKq74'ÙO6Mu^f])ZChk=LgZq0O6%XV0cj7J/l>b)fw=4iONz.g@(͘U:+ )jߔz-g=lSLHRrۼs`hMՎZ(CiƌK8CkO'#FD!mT(nSKqGXR KJGyҝcŬ5n˦'h] P*\,7V!qŨk샶W( h7چQ+,~5+LJ.ǜ~>$Uq/ýqSiɼ F5*;"\n7ܩkCKuU(+M+/Cdz\k;QXک;ghYQᗨgƂﭝ@.\MT᭏vYs ̸(}IU;;!֡J>W"Gx6XUgf(,Ns"ޣrs3Vސb|K1d \<^ӞqyJRR[>zr X \b|غdR*q<$X*M &q˒ i^k*nSl&:Ƌ C R sP3hiiց. +oHl!pe@pN*u=n;bq]׏~L>jCxso76>a`3Pd^Tb2$jp8/H2cKkmDuڒgJ¢$@j8/ᱥ(=Ak <ݖWª*LdSdT `OK1o,p&' [UxF{*MMu9u|@DiM1"֏{5Nt'bT[\28oJ뷧Njs'AZg1.5v^aQN}xv[;bwy+Mte;ƽ2 5#fbfj ;nm584Ed?+X`Pd^lqkĉ:e~wJ )f.֕:dgzm!:E;Dn[cv~L b%\'4 ?~)SLD=T`NjQ,f= tq@0))m؁u=qy#f1Ú--,,X獲0ojYS5 #%"J J`0@=" ǥrV_/m8Ř5ՏsROy pN8 ȲV"IL9a9ƋN];ͽIu=kU7@ZS~d(Cf\K"BKJ\L`24U4⩭ǰvĸϤ@/ doX !{kϞ-hZB{Ha nĄJ#gRJ= `%p@Alaxw'. x_fޞ&%5P0+CP@>laXIZgD㙷ݫ1:tPˮ)M0!!5tÓοYJm]j*7_^o&f2V oF+y@D4<AEh7^!:#Oݎu!,ǚxbi2N9۔@DE@͐2$`ao܆1nj4v _V(iVn . )Cܭd .X:0'cZM>U  E53e3`H™W<ۃi؛("hU0`vv>̙+$D@T;Bv>"(  KIT`Y A"@e$"T &anL36"&Q(;cYW!3nD!H.@ĩL `yzuY@ !ϵ ں -ݪI(jz+,K#>hm??Ҥ5/64iNPN}c%֬^@9W^mP&$[CQWhhBB%4I% ILHH  -XIK D{I=tOH&%t,a|9rPW{Ŗfc!?RYIENDB`x2goclient-4.1.2.3/res/img/icons/64x64/edit.png0000644000000000000000000000534114447111614015537 0ustar PNG  IHDR@@iqsBIT|d pHYs^tEXtSoftwarewww.inkscape.org< ^IDATxZ{pTι潐dIQ4@HWHmi_h d|Պjk8TQ DB 4DlvC?v)n6lfv6=|9g dTH5 jyRM pa(ƜAC rH ߞfok?Uwΰm&~~~aEq @ $!xi+ hYvmke)<ķ\9'Tơ1qq- ?#UNLu7/en";jRzds8TqhlX>B8isX _j.oE'U-<u(!_SfԴks$j8ѯ_cƢoiD8 0ui-f.Z50} =p磡Xd#A"Jȷa#2ܕ ǡP0 h2RĨX{[}^O)i(0KKoɓK 1 :q}a2zQں7ᐲad;*rOL߮W$0h$dtFz|6PS`HYb:F7q̥F\ yJ 4$*XN**폗GJi[^hb 1%lt<g$D{է%onXVҒs.T[m&yp=r94{#=\|4c?ȱpmۧ ˊsN=`F#}yռB%= uMnTBPrƁBSotxԷ? sKG do% sϧE_zKkAw{[z:9`CN3IMEz~c`$CFKǙ[:uO^28XnC.! Ve몴]jOe%2kq`q+drQ%+mMn- 8 zTk\Q/YTֻrdg)0K8'iu, ljuc29(>|Q"kWhNwQԁ9`(-4",nwي&PeY߫o.Ώ:8].tF+P"*J&Z1jW!\Ⱦ #ofNƔRYwo'}h:,mO3tem>_Qy'oI쌷_6Ωzo<Ŗ}<ϣk|Q ,&CqWldERMpfM4Vߌ4_5" ^5u@0QҢ[:owy<j\A͙M3'V{f/^>>c\;Y1S[Ã:9J3i۪\C٢+P5s}̟aT ̓KBHptJd>4>/‡3@0< wLֽ{%oMVAbEy"[`, jc6Om8(%Ⴇ|+߰WsӦjdt&$$ `ıf*Gc9r3, U ~Q0RًWvUo+UۑD 2FULO{D-$R% |]Ewյ/ȯOCUsFĊ ƙ䝣0"]h{Pc?"n~1OX1=ںc Xjߧi)z5~Gh#ճ3/IǶnt;{x*m'Ok<#K߻1"Sd~v6;J-)_a1&kXNOἲVoC`|BuUa (HLq fjNwՏWv_ nK6|%cy=u:`X"׻TpsM' ueMIgd%U=e-{Jb)jkkڝj+(vqE3;@jX8 ^U1E?Vt|Hxz5Xf?0JT \ :tCui:U!f&>Y!u0,,}.1,~(J R@q^TH5m暍u/IENDB`x2goclient-4.1.2.3/res/img/icons/64x64/edit_settings.png0000644000000000000000000000561314447111614017461 0ustar PNG  IHDR@@iqsBIT|d pHYs^tEXtSoftwarewww.inkscape.org< IDATx{pT?޻wyMm@|VK:QNvq G:Z NV4u(@!aw}sdžFl,Nܙݳ}wJ)@qLtH7 n1-Z"BEZ@6+=l='|=v 1۠>\'%(@C145 Jf|Vnwwxý9 2Nf|`@6f.~M#oھ߁`uŜ>Sf> b u{\=Dxl~퓟t/2fD|ٳ?5 Z(Pͮ{=;d %_X=3QZ`c=Ƅ5) lH )Oެ!Z|Ƙsa^=Rũ7W |xQd蠄]fbN=RBRΰuih,O`_MK%DT4 [gG;u)c @䕈 P__Hu͡~/r ''3!~h;.UUUМi 5<\ r_5VW>gwBw3֑\|)vا=eNJDyJNpɴ' P_ LγGs|&E:B|ɞ\g dZnLEmѫ8lu@eK}6}M|჻>hӅs l,Jz5uJS: zmIөuc,O8ۮڽY*!P4 >ڗab~Y9{ٺu`kr?*@UUvG:cZ:ba[˂,ɠޫ P+ubdʂ{wŁ!y4H~Y'9vsoP`] j SŒۚbOB!>556dpƘ!rf(r3,J`P 6H؋_>~K X*A躞ӯmBY[/mJ.uЄf6v{J.ôƦzC5s;TUUYJ'M -+?֑L/md6q6]tѠЎߖ_JHm)ƤpUn0X5 ,a&&B87 kNI{555W+^l m83]rũ-r@Nv/npΣ\lA&9̟9s:wI\.}B{]*kRʫ*++=;':Uq@)SJN[iwRQ   ҍc@qLtH7nRIENDB`x2goclient-4.1.2.3/res/img/icons/64x64/file-open.png0000644000000000000000000000376714447111614016502 0ustar PNG  IHDR@@iqsBIT|d pHYs^tEXtSoftwarewww.inkscape.org<tIDATx]]Wk5$MLB>ش4ZD }Ň(%Z6L_TF%5j*&&;f2Wr~9Ν;~f {^{^\QUb݁nv-}PԀ8 vv+@T5sr٨ UXUjU`Q *UOmک8A=cmhg'pe JJё+~|x]#UTՀ5"j/d̲?H?j]#JFEvqd7G_dډqAbMWp}K ~ڡ?"t<+UGog VG`U .PnG634r顑[[i5YuV#m`0<;?جؠELw]8Z] .zu'Wx#rwjwA7]-YMx]y$PPسίθ&ۘaU"|OP *]ٿsuղ3u{z7Y(Z7D ѧ̍H |/hBm-p+M)lZuʦG.} #¯_M=x.9snCwI]H ״xkl5YABKyXӫ#06]`CC.# ԧRd<p gowAّ]` | ejϵv/[p @Mpl׸zUbpF*:#/O2}|_^m"83䁑߱lw+a@|ƐHg{έv./%IY}iƼk:兲+0wm2l s.ppo맹r(yTPߢ{[z H"n$ϿnǶԏH v#HBVƿߒ+!fm"a:#X6L[) DC)ܷ#/OJXPK센 %@EQB97p)pvܖcIF+gۨr"tlju06UA y9l yGg7Pl_kȚ%Z2&!V|ѺRV(uX3?QĞ>/qjPymHRN/ܸrIENDB`x2goclient-4.1.2.3/res/img/icons/64x64/gnome.png0000644000000000000000000000323114447111614015713 0ustar PNG  IHDR@@iqsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATxkUEsޫq VZ!%i}* MJDQdJ$(#&F^#-)>q}>\=fϞ=g+aq8{Y=V"ۀ"PJ 7@3ZD V`3 : ͓1R@jzKFUg";Oo)p v=oq?uMs-Ni&y&6xt$PJ uh<(lRC"uv?LJV6/e>a3/ٰJDN89EIΏ_ Ҍב./4RwM6AFZ%\ g+E#߄=,d pei󜣍~||(g\d~%>s@D[_a1`t0 +9m k2_lv_q?"r=dhːq m `ޟk/7)]`dvy!-IX|,jz2d64?G4j:̊N xJYX7b==fkm5f2;3έlyQUG̕d`w8z7`XT }08\…g[6v mskA'sS켺#\=F[|0R}IU4شnC&1]-)r\뢧ƮBgY"χvɘ^ gyأU\YL--ƙ9M£{2礤Y86xq2;EG%9^I^LP)ՄSED@) |.ZDmR ZޢbUr~J'}^4hW賽z;3 mRxP|=)&߄~Znx(E]] \؉c( ~{=`\-tnOQ"NC5oNS-e;ˀI6 DzϠVI^ST*kv# < uzщ$F9\`}zZ56Y%AcX3?:&_\_fDtv9dYZ^=[/)TX;!* 5 RyKꡁ2? ER" XlڼOBu} GG('<nRH^n||aiDu@Ը>"B$b Bh$; [}lz[B?b\knFƸڔRJՈ [ ǧI); uF$IENDB`x2goclient-4.1.2.3/res/img/icons/64x64/kde.png0000644000000000000000000001313514447111614015355 0ustar PNG  IHDR@@iqsBIT|d pHYsJtEXtSoftwarewww.inkscape.org<IDATx՛i]UޫWTJ2DH:4]4.(ѥ,YB q J"@BB $!U{9{U/~u߹L}}O1DI\ (Eh B:Iϩ|qjrbiq$zvS71@\w-QBk< bO4hs<"0ae$M.*O:HOTlHƍ _]C|o sl\B&|a NkSW.n+81/LA^6ۄ.7rr6}dLWrjQ;s[gՖ^ h8:بUXb1=+/]ͻ0/|U夀tu5T.Ӗ궒k}#a>vۧ{s-P]777lA+=CEKsOKԽ~H-}ol'CGQBwg3{_aF{eKڙ(:C1JD* ǬBR=%"} (IKmݟ }esc!P,&2*[oǒ1'=PxZš#E*PTg@)E: LXe_X)КO =hcɌe_iCF s .]Ұ턧ԣ=%(V%(HnKsชo(UjMZ u_^c ѬjzZS50i :@:]+tbEc}R8 K *PWWReeO7@kJ!Lve+1XirD@6*Ey`G?Z] &e*ABe7 *dkJTl*Y74PRL,Hxq̵o_BUADPb,hor4=zMV#@7J Nn$ W~UO0P:bE p碵3Y9'O\ G9є*&VƕC HV-S C6ǤL R5e?!wq:%8Jm5R^c„C vݴUP"8C Oj9øJI F"gGKUmTJ[{ʻTҢ-;ʚkV@lr^)UoT M&c#%NM Jq 2T~|#[1 Vğ<ۄxϺx,lܷ}z@D$Taq9uʶJ :CYX>W b V7Dq:9 \rFgͤDj|/}<ș+ژْo,\P w~`% 0Q$0fƸ nv p}+9LCh~[wS8:2FW:h0? *1X}PJ F a.F$R3?2Q icx^:{Lp A@xm^GWESgx~T0(1L" 0&ɵmmM7N^ KZV3RhM A~?Z|ls:cb,b,ʹ6CP"5cV30buu3YBD~uqamL|߈<_3~сF{Hw =ZB&\uc'SDߪGj7q% 8aAP$(}CW<_myJ-#Z04' 7dMC%PJeB2&40PLRLFD@O4(1C\T=`ܳm-Xd!6Fp#G83֠ⶏƄk Vڅ2!gBD*\J0Vmu [X|.$?<~=-Fʆ iʹp ŧҲ_4Q]y%ܾYpJ$@&#+qhkKܶQSi+d(Y!ߘIɲ{Lg/zٽ? D$8`=yXNE_8q2d8iAkC^(Ő3c,nHG*b4pW6GWGEffU!"&H*E{+ Rp"؈&W #H"146ɷ۷54 iˀ'qb f5@rJ0'x<><:X{F\9s](/H)-?ݰ|x-+% vzŁ#dEQ',y兄K'̈́c%("d2~XϾ4_|JV@Hb`UJȹB=w`Wp_;_S&lxUgPP2:aB,lJ} Ze(b@x @ j\s-a-_B7 |}QX<+ϝpn?0ʵ?|/O;My|,#2J4]2Sx@9[XNv(WXد3)j$2^PqGWxvj7jgùtt5}$&B$D "+FIt|gs[sp@ 1:T*mrYynb3[o¾ܵd:RV-$bB&aqUTJ)<=2o^H!?.QD⭫yөl90ʰ+4U*¼6۹ FmMxBn^'V#NLD@:[X B8a!(|i'NKpw"#%r.v2VsUpD[VyzKo5ԹIJ%Wb s酫ֆ޳a|&[‚ΖiU͖hivyYSFD3%6Ѫ`6M$PbO,d=[fw;sfj&so-8.vsVr^^⾧^*iyl\5'*wo~-qw#5B"#i+EdTms3pEʭO70Ofx6=5Z.V.by>ݹkZKwsiABb޾|ZJ?;gA$!,~7Bf"vuICp]M!zǸ\}_i^%K՘9%dXPMuQ rlzx`7)V}l="4&(f©c#BGjDFtzq~fkZGكsf }\~a]l?kkZx/FM{QP)B%T q#~Hvwu=vIw Á5rzq`J xxx"-ԕ;4^PWJ"5H$ h~hs4X\`11$*\N%55N{E+J튒|X}%~!4!hDG 4^)L╱̳`뇵vinY4a`&.bD=AAX:"UHtG޺TaY:a?mV?\|jTÉqY.uPҡWJbLP_3b(g-mF$528$@=W[nUka'~]'zk]P ]# I™Y^+#3aa*sɶ;3%ZKVRJLTŐT%]xb̑idfԨAXpʊ6 `G`Ք-=n{_l5^Nٓ]M]#Gں~Tͤ,:?z鹀r@i F&8}x.Yhf\N>^}&П0}/x~pV18n8<L[rtd((%~8EdcXt AD\̜rYNYʒx#!Շ2|rӶڶu"˭ -Waiy?sw][p·pɵ JizI}ocQT]" (HBL">pL G+w]y:JKλaKKѦÛ4OO@""6u}i|q87IENDB`x2goclient-4.1.2.3/res/img/icons/64x64/lxde.png0000644000000000000000000001067114447111614015550 0ustar PNG  IHDR@@iqsBIT|d pHYs^tEXtSoftwarewww.inkscape.org<6IDATxyTg]KD@PDDEe211f3ct2d79fY!11&hF5n!qAAPzQ%ih;9u]y߯I?-1IVVPwAZ4(-MG.p(ŋ'}ckֿo)U\? 411qS[.H'-~$I:=6@ gN{Q p#G< \BX[|%Z h?_D߁.?P^C+ʨ1͇ !pnذaf_*:F>-͊]xoi6խ ~BhP-7/7̫)2ۭ>ȡvCrZM^R j-]';rngE-n/<@DSuQK @sT=W}v%[xmܨJ-k,b3+ѣ@`oow[4@ڵk8,-.]*q`s4n6؞5@bV1co?m'ыvj-oI!&7z)y|GSܕhUwv)OӖ+in ;5ZsFF} wL0 DTD΀~gX)kE {;N ڛ~wP'F}\^?M[Uu*sf:>lo+ RYu޼y3]7-h VׁQ0G^ 10wQwjBSՃ>xTֶu[3QVB^=?62ubU_bӜf]x>LF ʒBgz׳}}bhwNHpbdĉI3K-Af{~d{`)TFONJ[#|ŹyϷXt^S/6Ǵwc`51ɑc jݷ =<2Q!"@|I@!@ 0`Ƿtw6* g@e3a?SU2zKŕ<``@'V Xê*ۆmW)"ѩQELPRi]H{ѣ" d݀y!vȸgA|'=+8.kϞ*P7j%2(11WrpϨzD czEjy%Fv8Tmo})@ٳg}'[~=Q%&?[Z+رS7nܸ(o(& !$Ix㍩#̺#&X[Y͹};_{˚u~}7 muΨjzkU݈WefFN 虾^g>vKBW.)q= !̍"&MO%V{{9Yqu-f-po@h5Kr+ E62Bٹsi㌭bC@Lnʘ'=j\\B$3p>zm*t(ZmQ!D:˒$I]Ǒc5S~~cƌw TTeGts=D{? kb4"m_^wџ̷i`?U|܁򏳧[M[tE 7n*pz3Ç/1c:KLPnB4K@| T[|eκU x 8t 7 ٸ/55#m}\NY0_R] zZD>}FҥQ!i :ZTQ3kAS IIIw0BzXz]W!b{]u+HcIIIX)OKK[q@u[fҥK65Pl.8 44g| Fy@E+WwN/d-P#ҔIh2wV'~/WCK y^m:1@_f=?ЇjCm1٧f}r}U0!Oox-XN~~!\hO.T~gW@]v;Y p~prro'ϓWlrUqO_o۱ M<:DCRSS?@ZN(!|:W^u$$$ !l.to=㇌~d_ `kIo?qڳYWU~H嬪|Z͚5ouBh* !t9Nr]< ^b`d-|g޽{fXBuKw 5+T 7dZf?ڐ%h $.];ф624s?tP0`O\r;`)2duRe ]t ?2P^MA/aW &&ƋP-&$$dtʲbϱVClU@xkbbtL U4%WՒ=oFM\*20oM"itYʻ7RT[(ptҤU!)a%v6PU/Dflټ]V;N@HHHx +W^yejxןz쯀c}~k:xis` PhѢ55Ux0B\\PFcƎ܀]{[g%[žb=fTQEgܓ <(Ҩ60ؽb1onoSn%bsF8q:W1L @;lZjK@BBbht=rg="""=s^?P.֤b1mڴAaf EQl/|O<1` J[4\XD/)))9w?}CQp8֭[4.'@[LUԠ}O>}Uޕ&T9W)|{FhhѢfI!l|eYy+R>^)^PoG$rM&o,PE `U@Prr|B$-,ZՙQ~ u=}'N8$IBe _pue?[R+#NʲE;VX1؄@Ѯ]fv;P[cvSQK,*,b}|VUl6_:Q "VN ġ?u̴ !Ν;k ZD/X`WeUظis9k@wyB:u^'p)ܴ }ZmO udzfk׮ vќܜܢ6MݯFrG@]@,EsZx=6;p===hNNn5Mnl޼sh歱e>޽{{eddTRU [^^ hw/IENDB`x2goclient-4.1.2.3/res/img/icons/64x64/lxqt.png0000644000000000000000000000473114447111614015604 0ustar PNG  IHDR@@iqsBIT|d pHYsctEXtSoftwarewww.inkscape.org< tEXtTitleLXQttEXtAuthorGiacomo Barazzetti6RtEXtCopyrightCC Attribution-ShareAlike http://creativecommons.org/licenses/by-sa/4.0/TbIDATx՛}pTP JEȀU@ř"3L7@IKJ& tEJAiPbIv7@>+А  ɾ?^B6nv{&f^6{s-/ہ6p-0gy-kh4`DS%{SЎw=S@+w[Ju 4%[Z6_ĥv|@=tI<7n PSW$PnMʋkcKn?B;c;L_;L{۳^.~*AX:Y&x{*_G2 >\YwSńZ|4(ԔVEΩN9vYg7YFi`vf:xr(p/#]GdEvm2D/+,I:=ҩ(}N%PTbnpek-EQa&?t:jSwl0zY1#֙"]*Ks,&_9ls ʍy%>cs(iі K>DR,*9$*/.٦g_Se.O'*WQ[륝Wq1|uHM4yXDJڣ9wa/pբD({mȺx;Hgݑ.C`w<9կ_dv4Ua.*I# <,\A8 2XkaI>7^`$ >Sww$&15Ahq+ 3ekgm"9)-ecO[bh^PYʒ@J1 _\؆ȮOY<+ JPNTy3 Ec@)|!WH0I1D/:2x*?Ra9m4]b/={x.-=FgDqޒ{;#vJ)Խ װ *vTbt!όWtH"7_t"f"}fij%l{ [r+3Tz9u1C._<&VE+NB.,#Nhv;]oRޱU+FHDbM2p.$~HʂPS7h@X&E7Rd9o+)bTXW[EyKÕHDՊ<* ciQG}USJY }C`(5{BQ"jo23 -N^/Ob<D˵lvWe 255 R%]i ގ=L)]Eƀ UiDk/7ثgvsu<Ւ(+=2OLx@]ų8@WYOKvO · Nshr* N?&iIENDB`x2goclient-4.1.2.3/res/img/icons/64x64/new_file.png0000644000000000000000000000461014447111614016400 0ustar PNG  IHDR@@iqsBIT|d pHYs^tEXtSoftwarewww.inkscape.org< IDATxU?ٷnKb) M DHQAMҠ1MK5.M -ۖwy}yvv_QN2ys|9{g*b=rˇ{ vME jA &z?=scXtijRYjR+2Ԥ2̨EonE}i`Ѭj.8/MpIjM[ .YesZ;mnW/lf{48̦WZ8rm,]M+R$RU8>!Ȱg_j/ ̧ܸ'kX>w?'ͮ)lc֫ioutwWR۹ h ~ءS0`; `iۅNoRZӼvdhCKiS*fZ[8[Z᫗ym\ꅖϵ+6YlBc%bXduÏ"ֿWm, QgMӃBequ~ܮpӒgd&+x/]@ _l8k'9eF5r,=;3Fk#G( " H6)v0Fd#ۜ7)'US$D lWg̃ҙ :vq5I]jh*İ&(I@eW39s{Jf$6~/™B]pgq벭\9ilaDċ$@@(̈xZ/,Hw-,Hq)!;{?s:ʭ˶XOx*rVQ&.0Kb#}?'e[r*Y;\<'UqMU*=˔3 0⼘d0Ƹz,?6[-S WkWV|~ N aj^AKFpij.'"͓ 'WΞfKl?0"qAPOqP`4ꂼ X,P Ag+[V4c zIn2IW8>׌OfUl '`:"$b3 "ND Ak\`<MY1b0 E$8 VOɪzGK!b<$; JDAnԧ="HBb6<ה#Ab@ݱ鵮"sQ$ѡL V"- ^;.?("9qFա# nЊ;vطx1 g)٬_}x?mSp΋ >:/>;yN?c Փ9ĩ5և.7ק6E:[>tg/cE (cQo1XśEXD,[Ah>b`EVÿAlj-ɿ)vFGr_Ws_̄IENDB`x2goclient-4.1.2.3/res/img/icons/64x64/personal.png0000644000000000000000000001166614447111614016444 0ustar PNG  IHDR@@iqgAMA7mIDATxś{]G}?3sڻ׻^{q!4ODJ@h ĕ(h>$hE_TR+Th5 (CHBe;~k{^u_眙1{vqIFsl7ދQZ6 5)@IcZ_h6gKxC~u^U|Z?gGVh ѯ 2Xv1Fi`^!%RJ&fC|c9sv g>y-5mj~(Ϸ>k_[F Ў/#{6[G;6'g|!wȃk΄5wFm?\318_Gvl%mEjpg &:GG|r-9mw߻|m;GgE_ք1;Ʀ#ݽnG FIFz94kACZ>e)OOmOZXl"1XK?\KFhD#yL7.>O~)T~= H[!0 JnC&-P;% ># ~>A_ܶ{ =Vd58 kˌHCl\1$f)8 lD׳GOg_4ww.  xŶFحNLl& }mmӉE 'h.޲7:ȳ@k6*@V(4)@Ο%m0A0 !2|ޣZ0S _VJW-:Fdh!l@#D `23oNGPQR9O?:=丅M@zNz+aePR I@"NFG|* )Vzr^udw8+>/l H5+|ٖۚKk8,0H):=d%32,5#P* rQ5})00и<`(AH%'uw qB(r9z[+c@ ǑxDHBx%@%[A x+t}@Rg@Pobm\6xB #wƯ0ƠTzWهkk'K-ɷD#"q|t bcg/"$+l+@ uv:G.eYv 2`ڠM'~@H0l@eho Ӎz5c=\eJPR:| ^{y-iRAP!l4Ћ1q8X7ZAoOIH -)v4Fdž86K7uscgYe$5|Cq:3>9%ƻJ%s$vle_'u]t0̕͘Sa Xxṃg&QDwpp]&X DvC.SBONR/jwj|uv|ȹ,IS:F'ǔB 5䩟G·O>҉7kl홉zoY_+aH Os%ԁ%e";®$q _ <) /MyU?9Vw<*m0Xb?OIHg$i$a0Po^:0c VkpR (O \ ~hi׸d2G Ԇ0<>x߉0񏀗Xemk E;aDssɈc $j|N%{Ɍ{{<6alJҫ x /9E;JI`c}y[{2^w7l|Ǎonۓg۪G u~ƭ \nܔ=#krrbK#=$HhiXS+ y^xfC&L371v` P>rz-7nstM;rdc@ y+^ɱ[w Jõsl^X5$eřY{#?VwX柸^/o}J ;9klF;|gwith^'"yd,%JN@*+ $ovY[Thc /%NQdj2Az(LOi~J$[O(:uxP;v>W;,1έ"޴BK{Gu5imkN{p92kӍھʚ ~h]SI &/(;k҇X' a %!o=jJC@_ ܁Z5@ Kq,9 TGhNiN qDV(;% q a,P J@vu\lpY0ڴØBNA:Vm yl8Ō_P˖@wVqF|nρ+Q[M" :@~!dԄs=$ &墋+yWP }$^YewLe=qstL %_)Dkh.3gquCMCscZ54GBޕcxp%ÕKc(#Uv^70|Mi˦*׏Vؾ1`_ l' ҤiL*&SCl0\\,,¢S/}g'_3y8ly@ l8w\_*}A5؛c}oZZ٥Vr(6-QBrbm ZЊ Ma &BX0.NOze?:rp!0&YA N9X{4mٔ:\X }e/W̹W.nP=H)OoERfazp~an/O|5gƀVQ/R"vTdý^Vj#m,%R t؈b#j/N.̌fy"v]gk-$dy=ǫnc'mFe1]uXIENDB`x2goclient-4.1.2.3/res/img/icons/64x64/preferences.png0000644000000000000000000001553014447111614017114 0ustar PNG  IHDR@@iqsBIT|d pHYs^tEXtSoftwarewww.inkscape.org<IDATx{y|ES=L}!$@)(+**k_uUQ<H !$\9?z&L±OTOWԷWu ! cOs/o8 Tܞ{N,wgZ\HЌ,2&1\Z1~YPhs3럜OT~f+[KN%xXZ@x%q]j)).`63S`~.%zۺ5A6rpQ`mn6lӇ'Ĺ="NBJtÕJ` /ȺcӳjSӡst׋}u0SjCA Gy)zlf퇧EFVg;_xiPy΃I+ۧ& .tҭcc5jL+K89tځnG fC 20e!t[Y^W -&Z#1ag覆y:lƇu<5Bj!:ߘ7%'sA@ !vp0BϧΡÉfA@ DfF`IZ{ jD$0:P}Q5!x~EܽeJ !A) &"zM7d][T6ƲO(ȜeBt"PAY,61 7dGp\돓Am;p^?E0HXZc|%'λQ^'ɏ00B`@1$a%@x^15FSWdM]T[ޑyϾmVopW[s(HbR_Y~##8R@Q||PWǁ;Q!3b!괶ժf}'nΙ3Wkj)K!A%@Dέo/)=<@HI޽T7P($@2Nh)wiݾw~T$|x,j?W.@d nG>'êw3G8r{5 !c*:j+,|h{ ͝KyMf|s5qxnh6 3Ta76<؁GY#A0Ja =m/>XF]Xݥ34ohoK (>^9N52{߇J__645jq^hLkkei|EƘ۟w5cg-K !Db՝D%%Bց^B* _CUH><0Cx!$כDb6R$I Q;Rx31JD:..`՚05 ;{ 4BFEpD n#G(-F0h8BuAT*A@M+֜/^$4v|jh`A7,Pᔢ?aJr=/51LJU`Հ3*^Iu{ N9~eTLy9aا樂ȝrʌщ:  _++O)JeE[lxmEH3׾nMǶ{n_^0 {r#s5#qvq[P3/ >$r@z!}e˃]DJmN (}y.kw3=J @H5+㳧n$ *Upb5]TƠ.+%d(wY [#58P' :g-AN ) 0#f姆ȉtB@Դf8ݦDaCCe8{pңyLLBF Je|vp$}]VE ZC(mVxS`slRzd` tRٮ?+ 8B%r ! .wy]d#:ұ]d<[GwI\J %PÔDQJm/պ#s4|@cݯ?|Ĩq8N:.A !xHBg}ٱy@ @[V0F>oJnmr$FNps%bN|h3%(l(w;O ٹbi|ٯ$:;0'zs8_ ޴Q8}_8p鶶l-CޘW|s5FΨhIjI"Bpvx|w~%v g7.[} X}ڬ%Npth``cIc2Ӣ2:b^7z\F $ țS% <yn DyR(cK 2Y@6=R sW\''Tia.D UXZB?p(7U 3#"5h0W"}nH,|`D{ !N125.me9F_ZMqi=T4z#goܷe %΍kIP{%\ȊUcD)9P 5jӖYr)g8'lm?2=W+7m~&.{RA<8M"k)zO;L.w[洩S+j`:oo}2i6$g_<kΦJKUɖ,n *"1}LBNǠWIh!2Ny02C|vU;.&I FU<08WZKBt%y!.t3Yr ߼Iowic&n:[{A.G* w!]m]n9y^@|(`݀\T΁1"m5% $!6v `S8nuv :J-/ A̺sԁEl s z#o2_-ZՀK uai^vP` B)ϫ) 7/v2WGe)P!o>3'IЂl+e2 i  j@@ Atz-"Gޡ u”^`tpF9nwS8V쭡CZeJpAb` w^02yi~%!iqEF(mA -Ls/H98J{Oiy(#oOqO,0oIEb́/o41OZܫaGPVbG:UdMNR-ہ8^PꀡKçGX_W&`͖42i5я#1Hgr8 gOO /: ;a$p7.PΨ^9W*n`gvLJqXmmvٜ6q'H%Xg>Bg"_=trGv`;pyr]L!bMM@} cb43Aײwh7,ʶBϹr+w^މ6 =O m#iʸ%SFț HHlxcͼp6;/69%\ƹ. j-tS~%ʰvz7h` ?w Ab7sxay41)?qdמ0$Io./w4hK/|邶 uID6#3R7Btow3|}BBY71g}#^fc~c, Os]sb{EkUw_W/d1'X0qFofv?PZ¤$n칿pjF,)Pl>Ͻ[be_|߃'FNM1Uuup{{vj&@Au ""kmV>( C7muQTXFQ1$DaX52Դ1WL,f*tv~Pܬtʢ,.$Us8D3>A!D6 v Jr%Ъ$tہ0y|sX_U}~ lMv7߰/O_ɻ$~]?JUR]]]cw}q^/R2QGJȈr1!q0Fj$z5@M-]Ϸӄ0N-f7hbu=.Aϐ@TR gf-|uHrѲ#Z+^!lua9y0wA"n-6bƴf"c xlE;Ր@$+uԔ|9P[R)䷰LKc Ww2XaHn.|i$!2[Cpt{˾ta cvk>6,#%! y? ȧԉy*pg5͖o}Wwmc% VfZ5Hn\N‡z.@Dr0Q#1IƲF]'?yd5 MߛS.&89"Vxv4(a]shR냵jȈgfnG*Y/tN\5f5cpǿ\ @Pq*(*|0}mO8bR]ա)m-|ˣ`K_xDKBBO㡽} yVBHy:<Yߟj= 0-]FI4Xf.4~t|fՖҷdCCqOHw~vIӃLܽ)&glp?+Ғ7-wV}~3@p*FQ(x`ՄyA<TNN|MnzvtgWShNiڦcӴ{g5+N?R".})S RtܜM l.2(SyJtq˗[/lNbJYvIXB ,d`P[B\`("=C-|2\ )q:zxhK{6z_^86Hf !d51D5(WvP_)ZVuˮ /Qn]`bRőjȦg> a'sH~F֬hK&Mr3fiwCcqtUR^_9vh\8ǵODUkQD Q@pj;>Js`yWrnh[ِ\mG)ŠK/sf_=PBzr/?;ƽ_`VVIre`)_',a!$K0^;FN̜yϽ `y&X_nljٙ""Wғg~sO,)+6?6u=wn<]KC ;nƦ(T1Sx*!Ical1xڱ86$):ۿٟe޽қuc>-D7aU*\mm0_V`52XOpӱs;?Rp p*M,(Dc`*[jwTYP^P}'7؍OE/\k~Z׶ol1Ora{uKUBXp 4U1vܧמ*}d3$0D"EJx<# CHm1hGXCs}?F"z]4Bc~?EQ07y͑}OZgClqS&y6,Z5^àUA8l=1+t 2rbvn0vaD1*gzMɼ"QC`< gq މ(YȲ9&?eyPloj5߫g㉢RcQojeE'\0ˎ5Z*Xת)>IRN^v7o1oz=s!$',rrBLqڸa{}%qWTxI21Zn Z[i_QYmVh~7!5fuMG!d9AH?l\T{}eKzHsC>enyN~2Зl~ä%(1]ώzyѲuh^k**gGwiX~ݭU#*qQ :.4{1gĂpT/} .VJ`+ƩF-CL jb 4WWtB, ooVK ִV #8ΎA4aD| |bV"{u`@m54tփ)b,<']`d E!6߷Owᮥg6(Y{dJpϏ('"فa蹳sG9$L,4&`U~m:6 8/qiߓkU<+EoXƌqXEO%#{pa]IɋzĐq9|xa?Tikj:|T\1TQNmJu+V] G fA,VRX?~,%ӂK;KOA:r=Ks8R6elՃ Ql귭dٺol&7< @jӶ}WU?aX YZ)8vdyiEڤO;8|:IWaC%]T&m2K+Kz4ٯ(m h %HN {^7Bdg~u_;JE5aw+r K^mSFi+3tCn[oӛϲ>eOQ\*.~B?ܛPRnM6!9i`HϭPWѥS4(+Pz dO`V־21j|˚S7 ĻHqd5J"GWlPnOS:EjGD(ы)!,_p1EƉr-\.|oE8M8M8M8M8M8=;)IENDB`x2goclient-4.1.2.3/res/img/icons/64x64/session.png0000644000000000000000000000505614447111614016300 0ustar PNG  IHDR@@iqsBIT|d pHYs^tEXtSoftwarewww.inkscape.org< IDATxypU?5@1C@D)3u;TIݐ8(Z :DXہv H".Le '/y/[ ͌Μ7sswE)ŷƀvMn `71 ƀvMn `7aMR~ztpe^uǔ\CZx\RcեQw5#ގ:G`CC"1Q #4Ei :]@i ?}:d_W磟SGNuݕ߉L1H6q;o[M4P] EF䙢E#)E7_|v~97"ѩAWg¼M{(I1@k-Ec/)7޶ FӋsJn+@cAW9Q 3$+T7(>Lᛕ[-*ceZzvO.L3uixu0`{I4읣!21 3ׇJ1vVTii _X)q3GGXUNZ=CV&/.rH[xޔkY@LL~ UҬCM!EȬ@mT+CܒY됖dC|u%)ƐP.a.M)ޛrcr [h"zxMiEA+ oawajt~ms +{畂>ˆY)&ē9/c3m~!6~ε)MuZi-Upt+C k]H'?t ~ \#LCH}Qd7.E,Ѫw}R|÷$FIw2jҊ46?(@XP L꬝!QAH{غO[܆6a/A~%x*xGM㥴"HyCN4_]hDذۇ?_&hZ{!Jne]v۰^iWj۹$D"Du/<l`[ND @)҅+Wڭ𐒒N6@u~6>%#:0M41 00x~] wAE.Vlwhh&"ݶH)[һZPB]mǩV:&SQ~Vm k'bn'w]Em@g|''sa= WJ1*CIlk(ri.8`G|Pjj9Olzxsڲ.?Ȟ+70qt l>wT?KMRIO4&d g]adײa-=ZW0ꋣ-Mu#z4 R)\V]_~?׷>rZvuRRުtѺ'3Q*i )Rw_z&GȠxmD͹FKGRGy}TF=qJ,5 ޭgLu0bbBMcu!4sXv"fޱ8/;T~24`%U!}~Kqmh\!GGu(ء.g~/7~Mn `71 ƀvMn `71 Ʒ^)1IENDB`x2goclient-4.1.2.3/res/img/icons/64x64/unity.png0000644000000000000000000001611114447111614015757 0ustar PNG  IHDR@@bKGD X pHYsHHFk> vpAg@@` IDATxg|ڇٖM6=!!@@%D `@JP@Q" *XTQJPB $lve9 -o瞹Iyf$!n"P Qל'!{%PtN ~7 _͜R< C*U`0}+}3[.ʱ/oz 8MV"o;[52T]V|!LjΨTe66f'v9ԏIi~X3lY":DD b|a9Ad"yTHmW^\ɝ zK) EʟI y-ЩÕCG-~X#{AZ f5} e+F֧MS-B~ێi7;-7se'`er,Sj82cmx> R RD"O}Qi u[ekppOFkILM=@cc,l9T¨11 ?#vKZsr#dλS`~jAd6[u+U@-tcl:)?Z'p?6K_H>_Mg-g(<pZNMBUzAL20ѿl@ 1;@YlB7؍ohy~>Ou^G'{.geuGH{(˞[E_%>nev#WP]NgdG**@h$d|5Nd) ^`(uz>/;^y& P'}Q~|fʶ̼y`4.YC\kOܧO lߺn*uiґAr~b,]2e)2j?Iے":{hq֭sU@q+;s q?%X#{,5Gݘ}{B 4vX'gP(p0 ;L#MT(Z48'?TD Ik=򯼔c{z7@AK@jcS#nj6(Bm'΀qi떁Z6.o/.XWV75G ctd;b{OZ~u3@W C 'g&΀y5ݭGNq Q [~~&&U4gI'CweW^PYi YSMBٴy~@` Чk1A@ lpFw>?$(ϹN_UpOnϊNy>]=7 uh:ؖ}z/CFPzyU},ލz]GP8JPyPpI EuE:tA,ǃCz^ l2FV KCkԙZ|1@ m_rtk(B`2N q'2ZjePL wo4=t ?ӪMʋە }9yAɺ-F.Mm=.\oW,eʤ̝[!w>9An#9^vPDahE :?6/{ۖ>\xBam~>u *Wvv8Hj@j-gU04(\d{%I>=9CeAuM#E7ؼ" Z$rPvHmbuDHzu%y *Il|mBH*y8Q;(Tj6a=g'.խliVS]P$M*P,RW,t_@lFh$-,MYRSz_ ;Ef5 ̀M7u/'gֵ Ug ZX#!-2R #~q*z^!0.-?\3xF6?lmLТziIQ!RǃJɶʕ`,,m׀l~UX P|Wi{ie[zlJ OƁ]*G@6Y-@.V3LM-d(tKhyRz Q H]uxE%D-WlXMw}uʭP0 NRpihuLEO7פ aw7,]9u-NsG{RR,6΀l s9T#o\j>UWAߟ8G ޮp{b~w3[:`ڦnZyӇ/|m `G y.c㲅U{A,sû02t5 %( oMLTj+O+\PՋ.+B8Ri~p:Y4)g5? 7Z얡._ 'W8M."㕁1P|*9%g9ȝ H i\E8u솹ւ˛ ?U' ϕI>sj>t*Gۺ/@VԭQ_Hk:#'Y1ϑ~cpQg6d::lJw >Ri,6A]nY rMw7òy Tv)8Kt(Q0 jm4KzEz_ʗV*T[v=9E`t*"w ib"&yx4W,WJ9jxPtU5Bs56[IzQLU*fgs;^\$8}G#.ҁC9@q ,R9!w#Wt /S U]Vۖ0۹5HN.8. \ "f* eRUzKQP ]?+@@QVAyf˝;3[,Oe P+H@QrEKҰA]A5['78j {.J(wl=`RXVRӠJ869n;PzPw[y|ZLڋ!ݙpI ۶j{f_ӌZ0MҚQ14ݕnsoGwUfpXl-_m3A?goI@Rc9Puȥ\}c;ekE3GΓuzhSWb&]'G^'u:Z Zҿqڠ//.3Nuܪ_ 2]MNVUr88<ޮ hX_'2IB`X7P~o=ʶ=Jw@_sIMǥ`WXKGt?Lp}y hQ8ox>ˋt6Y.-C y U zMbKc9=UQ'{PIҼhkA;:׭ {t}P{[_ޟt i6o!hWoh7vwkfQէʆMs+ȯ*lp`x0Phq7ݣe蘆B QfַEnrP|FTko\.2g]>Bpn<%!4.m`#Z4*̶.IFfM?da_9`U=߼ ʔoZj>/M"'/5=|wÂzCAcOmj AOtoyKH!C!dЎPU^Y\bY`f9ht}='}(dM=0q*'w7diYBH(fBci#IZe pP5RiO0Vw\m ]XEcPSP>8MJCAf!oF+ mﱮoLy]S7o_`I?.&~=r:J|69vDiVƄ}B ="@΀z(oa+/L&VFUtT|Qw7 Mln 85x3>c}Ӻ\m2 L}KyiSjw}= 6Mv-5\'mQxJ^J{V$X$jSU_es=9zsT"ꅖ;=};>-*`my-!z_yC3*]疫K8B>)]ePwzCթMD8OS;C` KW)^Vs! TOL3`RS0)Q -He/@\YP}jA7G\ 09 _H;$Ϝwô'HyYm.d_nT]J.N/C&i>ۮ/ajPѾ o@i*pfLy,笕P=2 wK~/{{jr5TWvA཮êAmʓMj]m~ܲWS 1qWH9p˅c`[ܳTGT~hk}s8ݱ;G-HH PnVY%u ~nK*~x-ikmTi9@3U}GaA ^ eH ι(_ e3ykiE "LL@:Ǹ|WBҠ /Q+@Rvu_P5usC{{0WEXuhC'0c,N';3m|wS"x۔P0RN`p+T怵E 8#$ Ot@ԟV@W>y&J|T$չ<(mQ&Hvnߌ_E*V Q>,O(jZ lZZ=K UȹR(ZG(AnЪ\7ڧ{;`U;ߌ7%tEXtdate:create2012-06-06T22:37:01+02:00l;%tEXtdate:modify2010-11-05T14:17:07+01:00[tEXtsvg:base-urifile:///home/mike/MyDocuments/4projects/x2go-upstream/x2goclient/svg/unity.svgɷK|IENDB`x2goclient-4.1.2.3/res/img/icons/64x64/x2goclient.png0000644000000000000000000001566714447111614016704 0ustar PNG  IHDR@@iqsBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<tEXtAuthorHeinz-M. GraesingQBtEXtCreation Time12.06.20071¢"tEXtSourcehttp://www.x2go.org/artworkrPtEXtCopyrightCC Attribution-NoDerivs http://creativecommons.org/licenses/by-nd/3.0/e,bIDATxݛYdř'ϩn}iV^" 0'lǎüNCv~elc&bF1B͢ޠ5۷RUg<'yn]@ۋ'#fթ[9v|8  @߷Q&渫Lw4pqUF7rڿY=6vQBJH)@Zg.u]|Qׁ^3I.ԕi.#~ӧv<m>p֧sD;?s,7΁=CP{Z&'WlZ?*=/k VҪ?ʑ5<رZ٨W ~[֖kIY{!^RSwyQЎS|d>uTS_lJ \[^ueucC釬y;k%^t R 6ر15yӘUjHNGZEuz;[OtgvpARK႒@=B*7W\(4X7gIv1u:Bq@Gt= r@ W\{qΑ)YaZs<57r+V;( / /&whiònU27Z={(OV `"K`[M\QtBPF45z,xCqg$IIS1(p!$BHRBJEH @ "N2G䥋~1 T M zW $d:G+Q: fo7zKt'KW=Ifg|_7J}mi&2Lns1$NHRMf$&׆X8[RR0 4*Akf»!5yrGQ8֭g5T?iYł!$ CT*:Zb A]1S-)2C̠AH06`l&Ҝkq?aU%Y9~y|#PHyDsvGdlTe{$Iʣw[of`g@kѣ8zUh6[1YbLE hwX^JA@JlwM*lܼ[{~}ǖw޽~MnZ0\^Z 6PJj# QV7O˦MQJu](cvvO>ӆVN4Ii'IjCh$lnIJiLaZhu,ZtL^8þ<}b"@":Sd蜾uR'j|p={vq.K?)7[RU"DhQUGpdC4IMiΚfd!4Y:K0:cvpٟ2q~fUdYLUVꉷ^9FV%(O:v l5PC?$>:[R9VLd98g0T #H!QB  j (9KxC\sG~nط(R\>!}ڿ^ w~=w{,CCw-:dƒjKf)S>$f$HK׊$&Y6OpE9Y0!:fxY6 &ba",{W.MS DQ,׬pzX#u^R' !T*DȨQšABDD. 5=wsgNz E|jN|6:fP砋l%<u'<*V|%#Gqs-4MsC8W +0$T!*R*RBE#RF!ኅv~+xgZ쳖 !VLOQb\fl@E!/O {BPΰRp7s.̒?boq2mI2CT4ӴRT,NEr8kP!k5VU>;=}aF;#HQ1ܷ͟sǹ끇 wAX&Z x>ޯO3C#%id^$&$!K5Zg:0H*R 8s)V?>ѿ0Tr9TJ'rp2=9ͦՠT Y=4)KN,!}p&E"ˇx1.MN3ln,#/,7UJE*@(ϐ*@U2a(jTH._8u+6yyWo104=ڼ//A]%`!,]ڒfDK;2-YN6?jRmJ2ic0ZS"`R\ R Wgi+#.ann*l+l"IƷL}hܞ -"Zй'vE 7qb4E)ra"p@CHB t(%QIJB%}$;M4[n74w=͟<5/-=Go}$cZ6:%79@kutJP* P5RA)2Da@aRL<{4V_ǡ׎p6aJg[ݚaB^`|STX*#@nq i dږoѦcH, ̠ۆLg&b4.O! lF,jj3Ӵ;}>9ޓ[ky^$)Xӌ3ZZqF\BvYVz{F9`2P8" *>HŠ@Ha@$78z~7sM}ݵj~m~smjchIbMΉ'8~M.Oli}ClQH $Q(I$*H);b$R%QJ( ݧ^B<'nۿY)_ܿ}˧;A$Ὑhk/ um;X{u$ږb`I޸#3 @Z.k#FcOcK@]aH D w-VOa6k ":Ebrrfۋ\lM&n4I1&Ύ1\s(T!*`@J # R0 "%z?/> l= z^fcr.\['@+JH3ڐkЩI ԛN2RxWa(=0 J'ɋBTZ( ux Go{Yζ# J*OKqx_O;-HtN,j֩鰹 6vitWD1DL[ .C `YF7p|? Q.K/=vм$={E9fm%4[>5$Ix{MfqJQrsby P)Os"*t N7I$ 4j} vz^2Ŋ8u@q={[Jp=4\Y2)B dG|I!ijtM z,nޗAfZj+7x';{Y? :w‘inCdRD e kgy|h=` !.N.'NffZ1IH-(:vՂsk]Y8Ae !ǐ!g W8_|kR&} lIM~ӬZy zr 'wǗvkl%1VBR&Iu["Y- -pb}), DY]]p4FoӜbؾ@H~?VJǹϓ}/#ub1 A> J!0N*V݁˝}s)։79~M&fh6cv7` cfDz :]+J$ knG|׳먆_ߠ pCV#EWZ_¼`VP:Նe(pXwY YYi_'hn y&Xw-N:yN0jbx(HkpJ9ĵ Wt}ڲ^WxqfEd$ItsK,{RBݻCo̹(<-2_c6BՄ6KkC>)*_*5('HRA@Z DEjc2)jze0$EFcrL1YR,)EDMZ~-VU5AfFLj(0ÃħiN:8WH¯UȲ}Z+jI{nҜȮFy-v=Q* FJGFiNa}x/o1((Uq{ɟ?@wZgeúiT |$J[nm;vuD`\feV؟)K8h7c$%I|qd4hlnp:pg-* YnBYpoqNiFVRT,APV߅R1B8{.X"!gj%ZyMBdSpNi$@$4)E\5ؼLz!0 qlgu}cԫIޥƆUT0Rs?4!79yOQ|׍]p\VPC)=-kccTC9O@A4V\K~O*xG?nd`KrKGwE^FnI3S8'̐(4$,II=W 1L;C|h#ܽ^ged{0?Gi?<źè(\RE@lX!\$G,j (2lš6iL5 VLjB# M.?VQܷV I(HR !RP)g"WBv#Ae͢GIYyy|y96v4M&#;n('ڿcD@AbtK?@SA33w`Oy+F<~8u k}#ǯR]bEщ2a}l)Z,'M44iI32mH1q YU"v츞j<4"+mettj(l*Vٳz~Va(׿5֬>,5\5Y浿oi$I{ 4M}sI9RAv+/]>ӊ;マ:Z$}pqLZ<|)h[>}g^>SFhc^{SS>TUF^5mayNg]m"FFŝ⋸^ ؼu\L*ۿ>{`˖+y^"P,j-2Y[e]*9$ ՛'pB2=5śr3Pݨx1>/2rB, @ &K˜8~| __~8+V /@g8|Q֚$yfLlqJ;s4] 9EQh0c;ϝ(bI 3g7 q_}]. 7IxQN(ʛ~׾Y~ƿYy8ƕ+J'(I|Tk_|FHgʠ*#N#%h@)C-2Q ,nhRXaη[,{?ꁉȭ( wjEº2)`ꕬ__|&y&)#+FEأkUyK|G~p(%ܼGBjZm,5: ֔ B +-7{+}I  os`@H23z2 )g}9a (XT^ssÎm+G @鼠x'wNlOwt6gZ|㱹h)?gsKT2S2S:| o{ؼQjIӲT,v\z!lԲ8I9K8%|NjoXgAw'oώV˹Sw,]sY؏yЋ+suNa}x:Z]U-tU@!$Ebĩӗ?Sӧ%G{v(pZ,x|jIENDB`x2goclient-4.1.2.3/res/img/icons/64x64/X.png0000644000000000000000000000577214447111614015031 0ustar PNG  IHDR@@iqsBIT|d pHYs77DtEXtSoftwarewww.inkscape.org< wIDATxyTwaa x HLCPŅC@ԸE2I % )h*  \\@$AE6a7A*:5.O=gdf;uctctH{$ F sm/ޤ!+@WYsIfz'^ :͎e Q ?fG_"G /6to_.P1(3 _#v4}?(XFJ*?hyGN@R8 ?W:܊5Z Jx6 0hy0d</_eA6W;^BZ$~{5aLszIrj>s|G3u;?~.&<`)lz@ >rJC;}pZ~st2p5oWdۻҦO{C!>kիZ? FaOxA܁_ٝ;.=1gA4@<3{<}f զp8Rc~g琵zR8H ߫5}anT&X3[<flRcbi=mW>&k=6&FtCmIZZ{)fv=#Ӟ0h75VLIw%>귈D5ܲR"tוCj\>4  image/svg+xml image/svg+xml x2go Logo 12.06.2007 Heinz-M. Graesing obviously-nice obviously-nice http://www.x2go.org/artwork DE Logo x2goclient-4.1.2.3/res/img/icons/dmg/x2go-mac-dmg.icns0000644000000000000000000302747514447111614017137 0ustar icns /=TOC hic08`ic108ic13`ic09'wic12%ic07Xil32l8mkic11gis32s8mkic14'wic08`PNG  IHDR\rf AiCCPICC ProfileH wTSϽ7" %z ;HQIP&vDF)VdTG"cE b PQDE݌k 5ޚYg}׺PtX4X\XffGD=HƳ.d,P&s"7C$ E6<~&S2)212 "įl+ɘ&Y4Pޚ%ᣌ\%g|eTI(L0_&l2E9r9hxgIbטifSb1+MxL 0oE%YmhYh~S=zU&ϞAYl/$ZUm@O ޜl^ ' lsk.+7oʿ9V;?#I3eE妧KD d9i,UQ h A1vjpԁzN6p\W p G@ K0ށiABZyCAP8C@&*CP=#t] 4}a ٰ;GDxJ>,_“@FXDBX$!k"EHqaYbVabJ0՘cVL6f3bձX'?v 6-V``[a;p~\2n5׌ &x*sb|! ߏƿ' Zk! $l$T4QOt"y\b)AI&NI$R$)TIj"]&=&!:dGrY@^O$ _%?P(&OJEBN9J@y@yCR nXZOD}J}/G3ɭk{%Oחw_.'_!JQ@SVF=IEbbbb5Q%O@%!BӥyҸM:e0G7ӓ e%e[(R0`3R46i^)*n*|"fLUo՝mO0j&jajj.ϧwϝ_4갺zj=U45nɚ4ǴhZ ZZ^0Tf%9->ݫ=cXgN].[7A\SwBOK/X/_Q>QG[ `Aaac#*Z;8cq>[&IIMST`ϴ kh&45ǢYYF֠9<|y+ =X_,,S-,Y)YXmĚk]c}džjcΦ浭-v};]N"&1=xtv(}'{'IߝY) Σ -rqr.d._xpUەZM׍vm=+KGǔ ^WWbj>:>>>v}/avO8 FV> 2 u/_$\BCv< 5 ]s.,4&yUx~xw-bEDCĻHGKwFGEGME{EEKX,YFZ ={$vrK .3\rϮ_Yq*©L_wד+]eD]cIIIOAu_䩔)3ѩiB%a+]3='/40CiU@ёL(sYfLH$%Y jgGeQn~5f5wugv5k֮\۹Nw]m mHFˍenQQ`hBBQ-[lllfjۗ"^bO%ܒY}WwvwXbY^Ю]WVa[q`id2JjGէ{׿m>PkAma꺿g_DHGGu;776ƱqoC{P38!9 ҝˁ^r۽Ug9];}}_~imp㭎}]/}.{^=}^?z8hc' O*?f`ϳgC/Oϩ+FFGGόzˌㅿ)ѫ~wgbk?Jި9mdwi獵ޫ?cǑOO?w| x&mf2:Y~ pHYs  @IDATx}eEy_izz'1f!IREW]\*ʪ ?&Dt1bZӮ몫DAE@A `f:[^tx ۧ:uThfBAgT40i3LKi |߿t:}0"F>:{1;'MrÍ_azB|1dT9KqqGv0tӎ~~dd3Gu W jÔȜ\L>Ґ(iJ_z{nBTPI;Q8Dܤ!qD(#D(‡ }qN4Dq6ۉ=o|:@\X1ΘX 3`& >_Y[[и+M-TCABR͖̔@(=)ܨtx^V>W`7拎QƊx_2M.ʸ|@hu%ezvhN`ZGxԱ#L|k0᧩ `>ߊlbY-[+}GeTTx(xS3j3 ̌) )r(VUϦg&k`.UwA`@`PBAA;31h݆6^ Y-;%Ё6϶O@.dxi fB3%@JU@⎁Yr;%ޗ+ PgpqȌL@vɒ%~uiiUf-'JLFRSi1RBs`@󇽿:6 R]Yّ r-]>LQɳRj`C3< tR*A!JY5%JpgHn(-@SPvr5ȃЌp&2 v+yCYK,EhP[+~/LT I]vPj23"5#uKIPt剞hGZM[C5\q}tVJ &J8i̴`@]]p6tfv1!e"D'5ԕKE٠V@h !T੫(OS[Q&2fʤ:+Yf˥Jc)Ιn&5g4)~N|| ?<&s#@̶Ē(R` @Yp$LJ TI4M`c \2Qh/+_F9Y8(k{Lac"R,kNrB +r]#fxjxb4K`TIC=i =ic}4W;霆'ep+T!LO!5( ;*0|L2oܦC"YtIkOn!wrMmrև>#_sjwcN K;~ ~UEb魈h7 ΕfRKeƛWn&qp儶g;dMK=#MH=Q$ʲ;0¢ =I0y;6yQmmzIVi#zz2JZ1qDwRzQVnYq$Diz|wa7T *(9FHFo4pd*OxiC_p$P^U:!c_y(i2RD(^)lN֬Y3 yGEP@ӌUUU`1P1?.Ꞔ|՞k.)ӮJv:h64(E};>t{^Y'dB1b| &8 8!. x |yzhWD8v.Q,A^9q(#^`*?3„[zC\ n7*Cc/ 8ԏv PY U^aqLMP$ SBG2(yEС:Rj: o8Pt{:CiNc):S󾫌Z9* 9jeoL0;2k0dτsg8ODWlq偽i=׫.g^Lk 9&gZ=M@8mv~$vGC)9;NYp@fj:DžY/x-`Մ "PQ8*F/"R/CH7sou_lg4'5݀ 4 P~)>J as#А=($_ş3!=?՚(kMљLGt!~YaCBO\p gB`/ȒnN) D:⭗`:.5 ttZl& ( a8L}ЮJ3S f)jaKGm'e E >/԰oe̤#t+8{D,Ih"2F%A?mE|?@0xIoNѪpt^ţn<Z"i7d)_hy eJ*sisSbG,SJG@R18UcuQchY"B׌жT)S&|Tx'`PkpIx@(jk%"QarV5TpC3ě]ޡ{\;Jd&n2Zӻp*(;5^J_oN " a(WM'uΓ6<wrɎ vB|~~C8DxUW](=(Fq؁kGy, ֭gC@Y4q NCc2R)bq2&^{wWZ5J /eH}H1 :f77e`!*aBzͭmnxKTiC?KZnp?HuwG =]聱QGrH%[}x4tv/0), BWㅒ7I/(')'mǻ }Y}xdt`&l/7+@ڹxہ3{́hP:Zs4g fBS .ԗn܈c ;`4,*ñ ^HPԎix56)GK<Lރ<9zn@јTy8%6n_{}!-*> nNrv*n'g {>F^&'T@!'n<5t`Qg {$1 .M<7=&+CaASq0S{xE;m۶MB0#g> r{>}ZfBi ~+\w42}ΜNz{qCt`[OFUr)Dr\Ua$o$K%̚* 1kѪp3zn|d\\r^(&x&9)?&#n"@ eӄlBAWG3UsaxH Nb2}/P7n(O=l?aΜ9WN= Š9h 2 vqg([I<P9&1Y sqΠGrBpo.U{ӏxN8c0H!& kI-p2[jO sH?ā1ՀΫx n;O^|_,58eY4e&m|ܤ|J [ CWvit_b۸;?򗿔wrYgɩ%~kРK +3ۭv56Bޙt8ڣ# LdMu呂$(kɞd0F~iP搌=O7zhÇgnڭW&(o׼5pΛj$;nN0Og?!$J L"4Cncѫ#ʇ`6URg~c~n~!GሬӺ8ݎx Q6"_ ? y*kKT@[s8ļwz0W|AA[Syq$fYr(YLzY* Ҹޛy $s`ǎ~|sitShcWіШzm?.&f

"e<'?bc\hiz ;ex ȒLr?u((;>rJ΄mdXSF]J %{(6&9: ^F|0WqݿemEpE)·I^{y8Niȃ=2M>.CoX'6; dAGE욢 5^!6 (&e 8>,CJtwaՎ#}qȇVW)r@a~ЉA^Jx {G `gk)kefnƑ6`sHi&oIPQ3 @H?O@ÝcRg0]yP@U0gW.7i"_h}_vbz u'0W?e5He#Ӳqy?Vv0|JĚ]A2уMag ?ٗ])Dfh.M4t n@n@rP3ًgrҩ4HXکht0CDh 'G֫"dYZɨ1 ͆1!h F8FG5VNϐNy0 A04 ;?v~TַMϚoVi/P./&>Y~\+c7S _}T~uw=Jr?S0G`vD,)1=fNJąm:RLT la{sye'TBxv6о3\ e0֋nݫ?ПB#XĤ_iÓw`ehI쇯qXA"=ȟCh-+GM2Go],e89'HUM/X#=[I# cݲddԸÇ?ɶ9 c^_9pϣUO_ψ704pt}gOD sKQ1ו@H &(cd̂a +{~{ե3\%*y# N. *,(dt7WPPV4E\NEB]4AI iNH.(P۟+_o>LGBZHw?zP5Zf*h*h^ LM ~3 ̟>F vVyeY[~0KwJ/=hyO΀ƃhpG =9nia|y@h1r_ےTaB8s{;7:wb(8=*0)WoݺUy]`dxtKI?z=M]g͢Qu9-1[.ԖW'߆$BME&{l 6p`~f?M²}5V>rg 9W*ƫS^󖳥^ l|T(oñhXXh7),.s'ƛx42ڦTO^޶uzrIQ6.?,7q!W3FL~ ^eŇO>A 5yp]:_2O#JC1=H8ܬ.eݔDhcw@QLY`.c>,f(V(N|JPp;[qZ 6$ Š͏xT8 pӪt8Zk@yaФiY8цj3*4-^}nR-ϧ0ձCôUfh~4 ЏQD6|R#>x1 Z/ESyB|];>>X_ #%q^;!#3s>et_,a@*߄ K WI{_ޱe@\T,oEa{ҙL@Pcp<6q8KWw.DTh~TǦl9,t>}eX9Hcl9H`ϥgb}YCIshΙ >4K} {Tz# .}^~,xɛ%rfϝ|\sŷ?.y-~l2J='_%mޙQ, = ?Q@{~S3%7{"4!vukr9f|LhaU*մ{2/EӪ#fZŻ 27nG9_!ZQ˗/؀`>dUR('ܚ`hfD&\,ϓk!,f #jPo Q^82(+qTʮ0ɏfC!Lʝ va-} W̕V;3YGv0|^CagYPnS>k҃XWAc}l~댼OW9ϙ*g|O8c:(754&pIS׳x@sp ^!g&ɍ8KRV2smvC35mXUEJ iY9|ZyM* hrM h_#E, ))mτAHW&2)SV@aY4}NB;x7 xq.h$ C;!g!Lt!0f v8 I/\?n&K v@ԒV4܆9F4 5%`2w?Ӊ4エ*g~4ZHDH!O)FwCӃ֮HɐjڙFߗS7FkeN';9kk^.ǜp/ԙ% kC4C: G 9%b7`~ÛG=L2NR(00v,m-aȎv $(v:P3J׊%MDgqz:`C qp S^@0߄> oy~ 8tEoo5xGԡ ;v{ {$Õ+UMMyQ7ğKXcĿ򰍄)ayAsOA( ܁" S•ȄOI9 d B/&A^^cBQVy 7?^FM>3q<%j1G-x\5>?tA>$'xw74j$ĭǕؾ97kD58-iQSGX[ÏYZ8`TUj[l|cP*̰=j^S2\*-S6i$f&V;,ag.Jן|pNBC0Xn@0Z|kxGoU~I_wa%KJ!N3-(aUpHހ $AMt{ibe2y-S? k gxu%? *Sɷ>|tWn@ |IB^U)#_9tú.p+ h ӵz++() R+y0Nf CKjfOWlpxuyI:=#7'}T9MznU65`ٜo ?q_|I9,in[ 9 ub`3TP|z7-+Y]3rɗ/%>"^px@Q&L퀠>FIǔE( )#d"َ9ҹ};<3΀"ܓd ]L=ih3TJ,qiNQGA ;u%J⎵G}Tm߾Cx'>ZcXw-ބgnZ؀%`4tl'藄Oii:7|rJT/}_}TΑC!N&9bUV((ȡ?K Lh's a8R_~BL5yᦠ2>^ҵD! WWJ* UfL8yh P ,\WX̤3#4~K„ LԌHƟ{9,M&hx+^]¶El<3ጆ~Pȃ_!$^F4R`"ޞEGez!4+ wE-w/7x:X{<B5~4 /OZ&ip@E G'-7y`tGIAyu Rf%$0ӰMG,!F}ɣ{kž ؘ X|~65&~1?"Xq󡽶+T3Ef'^yxߙ!x}~>]⃕&$5 ?(o(c?/g2i(w]% YoU(-B^p Ef-s帓*W?40v7?(Mnc˼QИM6M;#_>QoFQLA e#b' Q"cb Kg|LKypYI09a'&ij45 NMӚ;~tmtpfi2otHGuQcXЏI %EbigJlё|FzA\c\~ {)ۇb_ORޖO_\;?ϔeBJ"`e t(Lo(Pҩhg5ſ|x+1Ѕ-}1Jܘ.Y:`YD_NCU]Ι]fy-@ !d^vz4LJK5:'t8 NM7Qª?tL/)K3M0zso+`Υ}z '`0)ۛ |}n mظY/(YN~̙ GiMǙL O|HqxZ{2BՑ':CrS7J=ȓxOd'|L͛ Z4][eJ$nxo҂DŽkó }=]Jå<^>0$Cȭ^G\k0ď*t\%,. e`V"h*qrQ3?+_z?^ԵҵJi,vfo*𒽗ɥ-m7ڟ]/7GCwPt (4]E 9j=8h.]E|Ma[90^u+^r'-@HNF(3¢Cgi >6q@Hmro.]>x{f&Y~lU`IYazvva_롃(, ~Kg. p<#=r 8fKI>N]4Z=B DnA".җBxW_1P<&sOEE#8klЛ8>sxER`( m:o!Q{t@:]I$YH`GBYZmؓjg9հ T&1*q9%UDڇdnȬjy%wj.?ϕ>\" h3tnW.U>T6wE^Z٩3.xpaPpBЏO:7 *ON<@$vRatS*0R&͞6 LIbgYynz`g&K$t;;h9@IDAT=|`9\AshO3ԏ;x޵i x Ehn9b^ђ6(^08SΔ>Χl|`+wi2%X*^'>` {[N>)A{,LYN:oLkwK}?!YOI=]~u>ݟq_|ǝimlѲ > U aܴwld@sW##Mz7>īKw|t&ue&|Jd\ D%V3\<Œd?&⒀G`Y-pg1ďGo¤=3 XMY8uD>LHc# wBoiv)vqh|fOǴ`>+=T8naM-kaydwayfp'> 2x :F>a-D AuP,n;d[E}PKv( d(KSU;K׮]k 9l%ۏ͛޺e<O0|q]~;whS5 ,r=?FruM-(5DG /Td ;4p vܣO"}|H#X' ߿m] 2 !N aFn~3ˀ<#3҆/ q2n>\bsM'oMv𩒩-/ryMɬ3}|GWh1]uo&X0U_9(뮻Dz͇uҹiaN{9zyrڙyǧ7=+?իA}E3* z D<Ǫ8dRp_ lJ* wt]ǠK}0~(&_GtFaKCz a~Ҹ (-R{qVcVX ;| ';n^QKK a`vW0<<.t@zg2;|;=om<S] \yh hZtwgp,1ᦂD|b E qp >9 h+kE яVH Ұ? 86 é;778J"ӨFF?{TInڱDŽ&}NqPTP.0+pr\'VޟGR`oVd O7/sG~9҅-ECs}JI{{KQbR(\̟7Jx yg{4FaVBh#M@ B<̬XdяOڶG@f8V>7BPp`X:ZWqtNy txo¨#$nO[ziTª+dxYx.=իdFW">i 0v+gLC2`2!<-lO=h *sV!xH[.yD]jl13(xdi‘9m*pPsj*jgهt}ڈ᧽,t[O~&\YnK|P_o$&M(||W@K\Y0pk0/s{+Xh'>E~&nr]]Xe^bp!H&c{]mZue|G,s$m?O)7?//++VBT&H3e+0u&?s̢>#2c!^`n W"Sa̔OGgWs@H= O b+ LW0!0Ef xsI0np-5;䡇~H{dE'NjqMiE 3Vc". DE2 a#VB%ϲ NaI0^[vKY02p[|z Z+Tָ-0Ch=:EH?>( 'NEϺ{iXq?(Wˁ{ D\YH բ860:K3a5A)/-г+_Ha˧n;W|F8nw0qL e_XBՎp*I> e|ea _Y𤣿i' xX~ 22CU;6 8/:݇X8^S~Czyg9N J&m\>eWa?w4+Ec>D^k/,=;eSM'˲rMJGYsĩ.}/ ?S/Jlnаf kGO+U/Ot0p{Db@m4ĵ`:U˗`+FM7̩(b =:؋۱ű(@29m>Š%NudU 0Vt`³)!i4#. 'cm*dFdLɘQ7i`# GqG` J& K5.SB`%u(y53P%í'߿GHWHʆT<һBzFs9\V{GoR88/P(ިXΤM-"4p LكvѨ? Q0ta"[^a[Hsps@{/nt^z rPJHY$2E6 M@ i5Q:BnDc==DQGL oxx ɰHq-- q"#Mt3O^ďwE%R4FW@ʏ|i&0%~g?U*jxl|IjoI-[*ǟ|\z858K Y9|hg>;ј#s1^Ӻvj=5 ]a A P;؏-\ htb+=J3F{\ji0]`2)2{Ew7|JjIsT](#K5J O=>GXah6TR sBc5_/GxX K#ۥ bagz&Zx`xM^3Jsss1)?m]";.8q[ctE dhey 'f_C?tQZ,ti2 P@d4̏_ 38p4qw˹tE'C:-WB|\*mtO`7Wͪf~;t+2͗+|[aa'S x@S=ea\u?(eu{D/L *eL1HĻ8 %yyx 5*470=Ƹh<Xʲ5H }IOD8\#~y-++/Mqcn21{v琣垛>#k:]pcj&Sy:;KBU:Bi7Qw`((M022A .Y<=ϟl^~JZ@!X"_JKП)4LG'; fESMg0p;\gg7n}gameՇkz#xûx.qx/qƞtGK$d> ea/6}(S:5xh4*ƣ,a#Vᩫϓy a4~pIThOwS2$h25 dI@o0lp/j`/bx5nNof n&k~|jcӤč .HG&*lԙ Zduh? 0;E cs8Fܭ/~|!xzN\A\׀ppUؿJ˖Go9$OዲlkK۶O2sr\9wX~*hill^pxV"9M2!|pv/.>soeEhX)P.p.Gr%LM BwvZfu!uw~\ < ݡ$n$`lUj|Tf %hvwK~[uc{4z:~,+:V6)VsҽFZz@$/]w'DǺA9Qatn5 VO"x nOzqW"-5L\˟*6~`vE6Yifq߹1rDC xs#}Q봊)\V>QКHRZN v+vC周Lg_F25_H1ߔ _{tdB<hldah6EݎgAlR JCb-K6B_'C-9[2g }XOi\V(MضYV=T}X8RE/3Ym8w03!Z10a`^[9C'ޏ _v)6NS3,4HnY,yld;D3i,l w/&py&Վ ڿTTRWD8!<}xx ~3=58iq48LCTXBU'M(vu)1Hg4saf7]@ +2T;Oa+f| gK9kn[[79o`H>ݹ-MRUŸ?m$1wf+ktb8:3(`ɴċf.Rd9Yh#{W1l*xsm10~}r]w{S*,x%.}yTw;?J(砣[73+OǷ[5 qdRaZ疷o|SnDAKA:ʤo79 dVZUeD^aeihj_`(8„О& smC8NT`>T,].G*,u"NVonUX=g3j!se (?B?֨n7n,M…z4g4a\4 ƙs?G0#G?}]>JepY&40 T 1W#u8뀗\smGq@+ro ~{qh^–ys۪jgd0Z<@G$UA +WlrYn&mJ0bdR绋n)!LrRhŠYZZ[eNK+}9ts@Ato^Ϋ:auI7.onasGYz < Fd0d`*8{W5sa٦ez9Tsd Z{P|O9@[fz1 bˀP65a5p6@A29+I֧TБ 3-Annn]-2?AOoU]t@C10 ZDSۻ4wî){Ź혶&9<ذ9(<KѾhF>R&7dZ⋗[nYl}>Z/a`0bzRz%o}R-\.>rV᫿A9׏C|>.qs:acYߨི5ׁE !R5LOʜ`wzpS8k3o`^ 0Ʒ |Xiu PŀWU5o]#XM0`xH*G{ @c/OKyk0/cCXCrOO;M $`S{0$jfTFh.S R=uKR(hqwA\)8_5P?J1aD5lT4.jN۫ƀFm DH~(M2عx[e{pPs2܇ 7Gzq6"QP nAثizc'JӚbh`R~-?fcLktaseǂ~sd!ݽ I/I"Ѱ-1ƥ5v^aCovAcSwNE8h[u>&Tw~Ƹ6Z%6vTvyGdZ$<:|Q4  cˌ67Č>HˑH%&lT|$e|̭ |E557ΰx C]Pp37s%ٙ7[MjK\r҄W0ph>#/>dlt|e_`t񫤹v.y_8jHP>eZ,}˾,GѨ, s{h}؀Y , .4R5˰1@?O[ SQn3]AG84S@ҐO>|rxnIkM}G[&\%+B"AU2*$UAɏ?4dn9$xKA|t&_' AAP3t׏eXx^2|SbQTcm!HoG Lb" l 7OVcG$bkf/8_h,q?.,_H~OU/-å_CY31M4¯=<ߜ/uc4ܻ/Ds+u\reƮ+d:7.܃-Pj9ج~-8ۆuٯSwr x7P bLlq͍1n<8CrW4:ihzP[P4Z/7wJro|Rࡿy%)-ޢ1gJ'V~z$ E~qX|0 xi}P8 0ϘQ4l+m[S`pذ|  `xlPy X, wRXPISHEжg|,~kd&Uݥ„BfϢ,ݝX`\ۇ]}<3 jBp-0/{7#kcn.* ѭ].-vC ,|Wńt^$^+A{*? /KΔUҲ?QOx {??G/7심~D8T.g{BI-8aBFC`nk?tC^P_@/ai/NdtڬЌ|R*ŞmR H/{S_Kܬm}d yYvx2(Z(s.{dB~P}lz6-~N!JX=+Q!',"lYLgMp!(C$w` {h,:ˢEfC[J ^O7 Y)6T% ;Lp' @T168uЗFWŰ+Om?v@57D .=08x X1:GiA&C:cp,OI)֟8sBnzb)Xʁ{U@8?=97tmR5 {jxgy=:KnXUx±-{oE9 *9?Ły}> _=;B:i\>tl-RqӜ^ ̷744@k^M&杨6 n[c+]|dA7cm' mط_np){FǮVpQW)P=q!{&Wv69UY2"5S8Pa,\!*%X K@ۊ X#nN(V \5, NW!b^|h>hëF >1_lf͊JNr%OJ?n2?X<]x0[r޻dl 8Xj@ ƴvRCL=࣮̔L/ZX0>z++EYpe84@=+k:8tB#xh Wa:uudømAprihf-? }X TW{o!iS`<^QRVg! PNR|m:}}X=vIw9ev 8K#p Atb?@z˰fNs/#;^ WP ؤ%R$A]9@Ö:Yϗ>Vh0ѥRQ}A* {8(Wᡛr뀭(GA?t|t˵2n\MIFcڒs?N5ȳ)Lj8 :06qv>_IeNmܷKs/T{Pqe iasQW޲^3MgqRG ]xNu b@N 2 \---X+gր;,.7!J Ȇ ʆ =x^[2; "Q0{ 4@O`z]mu`Lþ@-3x1- {&htxRk51^qc? ʄsB=?)L“ÿ^Nyۂ=]ᑆ];2,;:M?!!6!=|% ])SQ|.WO2%"C@Y,@ {%vjS҇žn3f⃄A8̏q'$yrt 2ayӈLxWlz;~@, Aᴛ֍D& <NL\֭T'׋w'tׯ5B8m_62&7YsV%-/hسM\#֧)~o-8X%{n(މY8]X=WәM3McC=rHCr &-8\F]dz9D_0} e Hm# S 0,/8p`%Y̤JLSAN\ ,+iI'&# |C)Xq1/4F` F8ֱ31櫨]8HK@q$xonö_8"pBACSk"78c(-^BY|?bf-t(5z8, ~~}Z#s2<2̄UoVwLRqXSmܻ]~/۰y9>iq7= ¼ǵxa#~Ӏ0 ;8b6V93Q l%>,3h&0/l$d+rrހo6]w݁I`s p3%%Fc3TCx6w̒b0V)$d<3RlF@@ixF`dX[R,4ų9!~c`>qEX+]y1;g^Xq. hߥ(`'rRVL陷tljKj2+jPxO|vtq- m-dG >/g]n#`yzlQ\f"V $%0^t~ZQi =e 6¹VHN/W`9ίPjڵTJuN,ր'=cˁ~E_*oݲ}[/{χ"/[˯B֊_M:_w:KՂb0<I[US Q{!4(| `KR\}48e30{?VA"#x>u}YJŗI0fY/Vә:y4iï~B>2b=VpJ8Jzfj~.[DlLB[+RP}w#ds%q|]B )h%RMMM]qrYyG"~Ex~]w{"mz@n`Z t(( `^J\p0]YD]BCJFm)s,qIkɭĦ.?f[]p*?!`Eȹ2t'H''?i+p lXXFnl/g3];W}{va{>imftuAO|xI8@ak. @[ 4; C PV SUgvڅ_|4d]x[y 鉲&YS}M6n30z@Oi\y7^II_2A_>cbLo\|l{@xj.ٻc̮9e}w_P7unt ϺptI@׿.Ļt|>iCP:0_T[]]]s,z0[/+\qf Ԏ6Ȩ;]twr/~LrUD.aŘ f5Jumcؓh8=!fҊvb K|]LX~@w_Ltd|)`]\GLipW`SȮ-:J;U,P_>[u_JU]|/+]gf OG+Ǽ yoyOCapђP0|@ .8]c|\c_Èᐝ܋£ MH:%h!HF,lnwX.&*\ {F L% ߖ=29%56+Z!hd`u4tL|gm@Xq@jյ v`t4R} 8гO1Uf7h};Kn ]UYSP^+,lF:gE!}(1Gz[w|a=MZQh/q@-6_FQ^ؒ2>A/(/ $RV%  LХ)9&]wW{7V~m8rpt&C=1I!.^`㠂BƖZL{)CSa2)0Lzci/i#] %>}e<z07]ufHF93JܠtڻU8p .|e.v֧3<.K$o;bhjQk[7/ (8c`è .lݗҒh=Hd,>ҫP]U T5[ӝ4WD 75.)%IyQڥG/rΝ;Hwcƾx` VsxB0O={"Cnx9A.|A@Qk-h4UMZ H`؄B&riH !S !s ߭m:J7'V_7<Ư9cp`}CW~ #>d '!U_%;7=9QO76zYwE̘(SiB_Td-JƏsk9_wZjٵm\x| ;:!x=3x̫naQ ADMyJ@h.=DVj%0 cv@́cM]׎/ZeIFL`|6>At/y B.!^S^=;ddD]vR{PŌ=T!!L7p\^%AXNr0Ynp(H9)t( uT 1[QWuNǖ{k >s$9+?>0g! ҆π~ą86`\G@9|/eǝ&?~'*-Z,'~7_gݣy~>3_Gn caԆ <% SP.#ٳg+ B9"25Zf ` 7R]2e{^:[X0<lA[!"75.R !+fMnm-!00<3fN hEOrnb!A|?-XrbW^":5!ߝwd7A??t9Է1QχvąQ~,hlɪ=[7B-: q'׿L \(]ݫm@A:GYݗ.y@~#P[TցKefIZjhȈ4(rIW t떽DC; $H:9!)=,w̚4~#aO@ -RRӸ40M((!΄I~wlNK(@G8$922T{*1;Xvқw}Q5]}KM ߤ~%1H,$|'ʹ3b1 5 ٲoGnKp5}zz=3;"?ʏCXZ/ԕVwxVcޟc؇-WIdRg@U4550ks LF0HR0xAƙY7e{9~Rc 3TM(ӡQe>r U.KKEP p8H3eX k!ݍY &`PSh@rN}`P!x 0_`,wmڛHU(qoBK M+ NSWʌ *x+"σy~Hj6dUe18c0us{y!$挢*^e`> /ț/{chk~Xx8/Θ^i̓i|X8S C@EE3Ru ގYG˥.Zd1 53L嫠&(~t hƪ|F ̀F!6oPPU`ʁ#Jfɩ@BcqL=`:0QI|qٵ%P`pXN9 RAf%?|z1 B5طbt.]-{", ׾AV@k:0=Ϳ; 0p"mkD:yeѯ?4w W#3 LK~95x)On<؃M^X!P _k'T@.tOO"voLLH4Æ a*?!R/cxX?*tw€igK7 Yv<'?Wߏ_) 13MV8}z':;;UHlۺ:;d@@pR03hP QO@<+|R4ӥ:x7+hJL4b1) @4阿 ҵTz d}QU̦a+???Or.t"հY (h ]'17\u2'_7w-_)> q3O<*wⷽ+^z?ļ$79㣓|gKhU3׊eؽe*FLcSUKNPDžO$sM iE:ćquy/Zy,Ł~w9V|FS g=~2:cAw5i1՞qPVɿds M0DVYk |x ygi']Մ1)ag_*)EK}Hd/VtL͇I ~kt*̦^f.? ˠM{XiP ²QC8o1QX{yҴz?d|d=ˁ-1{;`jzebH0ۖ`qh9a#C^g,xô2ٵs^Nx0շE sh> *׀_^.T^@Ӵ2XmShL/+W]L0<9[K?t#k&~ph}qӐoc~۵ Mк߼{hhC ྀj\YdQ>B.GOH zhB%e˺^2qEzy~Z0L1ґ1o635Mr)Cw[0̒sHzgJgׯ 84@tCIAS .^|\?]R+\2f G70)bV"8@gS>)?䓑ر&+ c PpO]I@Rsɏ 3PZ4ؙ-3I^D+>-Exy |2H`8Wi@Gј\7p]'{7e˭N:Y0~O}(W/9f*$m@.v:pia/'@pMh? 񕉅,+4tϟ K$MA1p /K.yUYV04vt@m>䍍9,:7p_7N1V(4զa&4:BAPE"U>(CWG)dpjlNJ̩_:w{7osϯ!_"N d6{uR YF1BBf8KFeLy;7|˕89g =G;&^Q0/{5p~}&$bt ޚS+ . z->Z69,Q(R<@x^;W/_M* m۶Ml"{kTif\<+:Uk A6xj4?<=Y$3Y݀0! q' |fTDZL{)@\t\'MSzS#wl;^wg8T ~O|ȸ7|~2,4>Ksz-KS r/m?Xy*O?|_|Z?=Z^9Xh~&Ƭeg!pRDXa~A+ڭ$vmǣ:J/g}`ڭ۶bه;ܷ[hm9ӣýEҌK`\*g$S6Ϯ=>)hlG)Ez۠g>kq=y9Si +K>uJʼmоw\_bs=Ժ1$@L_z>xC⍁qWqHK0AWXμrNw X%[z3)ބ Z#qㅣ-H2<օ&YUUU éK5`Vn,c= FVssb/ڎǽ2D-].K,W{V~2A o"vl۷4^,0{OAͱ.(qC 8b-ȴoa<.cUE'3aJFkX$OT^}{V 3boSOfE]&ü˴6"RGy{~mxMK$18i1~Б? g1O,KKi[! ]_7<*{u NiaDx2@f~ֻa%bO$;*raZp@@BZCM*@M6<"1^pFE%XдDNB_8pb6AXlrTK@=Ap-?Xx KV95TXt9?0"?g_|A?ڏAY'}ez%L JBzx_i#|fěi]zn:7-!4q݉'ɣ<oy_Po>!<|ƾAmd b~xв`_ij; H_Z>L@fP~'?)K{T /Y8 #N酙{.3r_,67GhBO Ƙ*,m]dﮭ8hPD`y[/Zy\^Ҍ=C iIkw./V2K\޲_`h cO9L@&[әc V* zAМx !QJG#7o.c2> bwgd^ Oߋg ipA or?0KTsC@]wF]T:~'c27Z:o;~_ȀIVphh1Nπþw;X,3_vlYUƙu` eSI rapn_`Ih:pÏGnVv NDo*KIzX2|9CLTTa‚e(R͈43uy[ |Ln ֆnGm?>pύߕS^LEc3~CFB}tlōr]e ~GΘu~;1'2& 7mP <fCd<|\/͈!(q/J-:ti'f#Ĺ|mBτe\."ԀS@9V|+6SJRfG}P?Na9:8U `p2zZ+gKB2X1@ߺ]KsκS᥀1}0,\$3}?y')Lgdt>}aF-\cZiIo~u4 .nnM,XTl|ɧ(!?5rꩧȹ;2|}(Vu`sT&拮M~c#X!Z` I`^ >@_$PL'ᗓ&K,+DFea֟}[~ke|ٯTJ m~2'c+Ln伷D?|̦'.e?~gl+i1&0i} r<58l@a EV`6668p\H0ӱϛ'.`f9'`زylx~=``t7A!"G'ڸ/N@017O0X6X{.?#{?/A~Jt^ui8gC&rC---:0 8.W]u*Y\6wY䄠a!3%Yz-4c . `Q`>h }Jc{`߲_V.'EȦ$7B0!/#M!>dPGb7djqdtl024̪#^uz+Wˢ3┆D :D"!=0]F.ĸ?|\OĢf ځD~]2`M_o?"<À^/h*l6h R5VW(>˷-]~=dʥ 3<d 0ㆱf. ӂD`.Sd%>É$SPo.p*F ,LO1gZ8\ Hg=H<\`CdhBWrx>5zk>8B!^y8W=OЏx#N]6?ˡIGc]C6pNv) .F릾33墋. 07f!<e tc687(9eh._`jc.kT%ղ%gh4l7őtz4?\~yuR?GiZDh~Ǽ Xӹ̯iHOKG0K3 G],>ʷu3KAtQ TይGKHa68ߐYƓ>6H52p'2~ ؾM/h~ɸ>zpOxEro$1 לz9/TK4r¢M$f9sO3n3‹wS e7QVo- 8:ТC}P/+/؉H61!I%q+On.v J et>J[.9D#}\*7A^-81HddT-@`.,l%¾ 4E8 /P{ KW-~^<oaG^ӹ70i퍞.Ji7agJj=XZfpewޭLJ{o'觰(\t~f4=wPBL`)pB?ZUDgCD5ѻ;Ĺ' 4E R *: qŽ3MRtnl8Zw=E#ȍ_W=oK^vF]ًFg|Q&1 c0A&0x xφK:C0e"cjE Ox3u7)Kr?dwgzôX},rg,ܖN@Jˋ_wn6`| QXp'e>ڳHOy3\5n0::0wWFl\Fp9} % Xw.Q+j{ 2kqҺIlEZ./2sN̚S-u X_#4t<9z|9ji#U$3 osOKJ?iUtpR0D&42;:dtŇ #"~ޏ~Ea%`8C}V;(ֹʼ^}٦ gă0xMDO< $ ĕyf!b~s~F!]4@MŘ,)cjM#tpv>%sVKˮ 8vwkt~Z/UJ(:fTˌjc{ɂF hcX(k],3a7_f 4z #M'2/8DH|iH}:oKK/Aiox?Xo#gADRᙏdԤwtg42?HaLE72A1[nQ(µQײuoeF5`>ico4p$ȁO@{iX66MzE*!ꃽ=^e?&kF 0ZZY7NaGԔQ2ewu5  ~:,ħ`xfWh<0ыUV}P.Q;R TQ\d\??:Zt*ǥW(9 p JgH!G)%2z @q>:҉&0]znիe愼RTE9FI-䂆iZP/+.Y,0#ǗT ř#}T D2(dtqHyXN]~GfhKc}5KH2>"LbWёzfz*H;x2{阱zFiKZƸd"0D\@YvGL#4'`q8 ;<9KK yh8['^e^揸e|gx/%X^U8{[g,< iNg:OW]z)  m0|!4Sq‚X.*UWzE!D 1|aPNj+C:9n:Ϋ C/$X/,isbV-)jva|!-#T'*2<xǠ\\/;e`Kcى ę?eqQCh_j{$,_0_+ iqXRXFt 8j̕2|J3NME=Rς:HN#CaaUahf+hǏq!y Vfx1d$n'L3̤uAEF[~T̮cIP~Zx>zeFyY(2@⫐Ȕwxajo[|HEi0s/UG$xӓIf+n ̃4l1!gD ؆>1vY c\KqM.GKS~][es ;A1؃E/pjqUvDJ -O󥰠iT!EY!(ë 93eP^=.I'4KaF1O 9skuBΗ&,I*+Ҧj5Ƶ&7eG3͠ui qrGT xl=C豢+G|L5 k[xD2T?<'%Ztdʳ/#%dhI"Dvb)%ձ)8d Q@Cq=8QP*(8?ԍy3G0z(=7 :R,0wRYǹD:OE-XXy% e҆yAzloo8%qaG(c`e|!g;4cDF}9w`h~%)u]°lw8`},YJ@ܠ3p{~~.&y4@W.J2j*JyUfWK  (]˱K K ?]~eL;r=a7!:4qlhvIu<KfRsLIPdOljjLbV"R%ȑRR,[hbQ b7 t(ѮX ?\HiƊUbjKzu) ( ҼF/::|̬X5ǶFhhXl}diK:'{vɴHќ\\{b hQtOH׉T$'(_RYɗ7$5G`!R:GkO=c b_A>I='XPt7щ9 (0KY(К wl uyZ)5V΂LcԞbǚEӕXR XP:ЬAL ?`2s1U41KalSSedW1~8KuݷQB eAPI:2!V!OG(:曉{#П5;U2+2u\Е-+'))+eP3w)m6fϣ5s OaZ>LS9 Axa5=xCȕs940$0-?ly{uqNRX W..Ca9SɊ:92BhcK~ hdУKu(>K6`OH6%ո UP`7Fp:HKٲ-NW>`cmϲf͓Xi= :lr޸@ȓ.rN/X "jjjJX$@A=-}DI{$ 8AOg$U"CU`_"^)hPɪY Av@PlBLI,U$qL/&o% t s\v&m(>6mOJFQnZ#C{nHi'qɋ0DjZf&(IDAT ,Y֌̄׭[7΁%m~-=*fP9 "ɽ oF>~x\ЬU8# 7( cV#:G`E?82}?A4Ǒ`+~pGAןn>9.rHaJ٬mTص_x^4ϊc?+~t 4kZok /n/c%bJ&NrQyxyXݥF碌ӻgP!gt(Wa1ҹ_vr3X;ԷCM_@z<66#ޤu ={ k.9`_ q"-M n\fą/*^&ʸ U@${F|eqV-Zfd!˳ ^OCM)4:*С†Cщ-j}8H"aרw~Qn8JJN*Vd^Ik&/ZbO#fь,\R8D61:<&l{/j,\n=V~|l ֜*˃H_P:(֧CiߤVCe~ xPPa Z6.%#kJm\)]Qthi. ͟y6.)3# Rs!<'-0H|Gcʁ'$4,̺ V d.E5.Q Ax8(%(gILhs8%(dz?$වetOjy=#9Vc!~"Bv <#xsZƅG5FL|ϐj0d0Ϸ&ddng"uI.oI@ȹ8'?zi>0=/Y{cn? H$Dy6 f w`aVq)c<'ȷZMbzb;$` ]cjG[ T/&k*h$11 :YR-ӋF/jȷԶynZEϯY ̄໡Ac'Ћ]tX+::&fm`3sL1vl4IqqW&(͑ c>ƀt}?ka3\&?uw:@}9 ghMWtdp,#.l4s鲅&.qq .ZF\^c&Xhcq{4yo޼yB^(_ztzQi' P[⋣tp-pZ?k~!ƍ{k37gZx.x <Li. .S>\Py78-aRBt8՟D /D:yȷ@O pgݻXt+1W=[Md ={- η@(!7*9WL9#Iyȷ@L eʳV˱i0xUk ցCG]vY[ i}^>8DF̑d:5%+ `(Q | Z 's )*rݓ_:00b3C/aK%o[ ػ?J /~OOjn=2i y5r}M_-0%=ýǯ: 2"Q2bFd!yCnkK|pX| \Z`9osJK;=c~v92>=Pk)8{az|oUmWIEB&(y| `qO={np2M/+@c^Y!8E 6yK[tHOT@|i6PQ9 /帿pѬsJ /#WJڭeR! '?oz 80%p1½rˏWHa*f(qLo\[E' 7k_XB{x hd=]q' O_ƓbqH%x'OoɶN  !t #i{C :#6btu_,qL8هOo\[_sO!+s8̛eP]r|y j1(= q0"d`L"ϷK^T=-`sϑ[*ߝ ~OЎŗ'{E'oV).,VACx)=|]-/f0LsOiĊ@V8!Od Np<_FfO0UI$ϷlNOLx";r8v6:ƲoMo_m<./PjH,O?[.^|L+ VX<[ ݗS <8; #!sKyȷR p hZ*5k HͻȷZO:::{/Y_ZѰ3\%`ԯSyh7{"|-o)om ~GA!oO Q ;-=_ @.!8-v7믿n| 7ʯϴ構4zQ@6:vi_ pan'*\8q`BZZ`:ˇyZ!q&Pr GCM/JcbxY>̗nR ]f@^\bb*!oqFa`Gx~Z˃( _iKl)kOf =J-{ C]a~ ?yȷ@2x}ٍ|~7ayX2>SfD `q33g~/?Co(KgzIgol܌6ƈ~2!@7zY< ba| !@I-l37EZtM}? Q4x.h-<[b5 "gro4 0`tbQ'h~o| $ϴO0Oqg㉣3]3q!ȭ|5́~ Cf@f LmdQFw-oȾDI'ʠc+>2yd-O0VObԩgT| [ 9#-o| [ ȷ@-o| [ xYA!DиpIENDB`ic108PNG  IHDR+ AiCCPICC ProfileH wTSϽ7" %z ;HQIP&vDF)VdTG"cE b PQDE݌k 5ޚYg}׺PtX4X\XffGD=HƳ.d,P&s"7C$ E6<~&S2)212 "įl+ɘ&Y4Pޚ%ᣌ\%g|eTI(L0_&l2E9r9hxgIbטifSb1+MxL 0oE%YmhYh~S=zU&ϞAYl/$ZUm@O ޜl^ ' lsk.+7oʿ9V;?#I3eE妧KD d9i,UQ h A1vjpԁzN6p\W p G@ K0ށiABZyCAP8C@&*CP=#t] 4}a ٰ;GDxJ>,_“@FXDBX$!k"EHqaYbVabJ0՘cVL6f3bձX'?v 6-V``[a;p~\2n5׌ &x*sb|! ߏƿ' Zk! $l$T4QOt"y\b)AI&NI$R$)TIj"]&=&!:dGrY@^O$ _%?P(&OJEBN9J@y@yCR nXZOD}J}/G3ɭk{%Oחw_.'_!JQ@SVF=IEbbbb5Q%O@%!BӥyҸM:e0G7ӓ e%e[(R0`3R46i^)*n*|"fLUo՝mO0j&jajj.ϧwϝ_4갺zj=U45nɚ4ǴhZ ZZ^0Tf%9->ݫ=cXgN].[7A\SwBOK/X/_Q>QG[ `Aaac#*Z;8cq>[&IIMST`ϴ kh&45ǢYYF֠9<|y+ =X_,,S-,Y)YXmĚk]c}džjcΦ浭-v};]N"&1=xtv(}'{'IߝY) Σ -rqr.d._xpUەZM׍vm=+KGǔ ^WWbj>:>>>v}/avO8 FV> 2 u/_$\BCv< 5 ]s.,4&yUx~xw-bEDCĻHGKwFGEGME{EEKX,YFZ ={$vrK .3\rϮ_Yq*©L_wד+]eD]cIIIOAu_䩔)3ѩiB%a+]3='/40CiU@ёL(sYfLH$%Y jgGeQn~5f5wugv5k֮\۹Nw]m mHFˍenQQ`hBBQ-[lllfjۗ"^bO%ܒY}WwvwXbY^Ю]WVa[q`id2JjGէ{׿m>PkAma꺿g_DHGGu;776ƱqoC{P38!9 ҝˁ^r۽Ug9];}}_~imp㭎}]/}.{^=}^?z8hc' O*?f`ϳgC/Oϩ+FFGGόzˌㅿ)ѫ~wgbk?Jި9mdwi獵ޫ?cǑOO?w| x&mf2:Y~ pHYs%%IR$@IDATx lIU&9g'a8}Nm>gM7"RR* 2C pO)Gs;wΙNXw{a&E@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@PE@P![Zň~.ƣ}VE@PE@Q'+@@Axq}"("(E@cUop3=XPE@PE@p``POGO;zj("("LP`X[Xៈ;0A("("} 0' & UżVE@PE@P } 0]ǫj0|Sc< y85\("("0qLC= m;M ҠkVwmc; m5VE@PE@PƏ$Іc ЎwĴG"("(@zFHfh5di08z$S֯"("(" GUo kU}C1Ln]ZVE@PE@xfYdcl"Z"("(@ +PeII%׫]AG@`tغ֟OK{M[)"("(@?K{I N41 8uǧэn?[iE@PE@PE_wϧ8OR* o:>izn4:.~SiE@PE@PE`Hё}KeOioZ}7dA4>\v>my>m+"("\| #\;rC9NCSzh5q˲[ȒtzJ+"("(%6Ȓtg|*k}T] Hc/u$63N&Nkߋ^R=?-+"("(B MFOғ2I~]Iz/~}>XڐL=\Ҳ;>I]zi~lWE@PE@PE p][,'|IKdI.u}t> lHNR.iJ'^'ϏφwK]Ij'}(("(" ^NvR.in'^'ϏφwK]ЀІ`qH2IsxI2}}CޭUZPE@PE@F|}$OҰq˒$KKN2WW}r/r^ I,\T|q8~\=Iʃl)J'.M\_/vؠ^ioݰGMN;s&m[8.hH)E`Hq?Nr?FնA3_~ً NnF_zccwԧ5hA7>^fy(DLE^l"=nؽ^p|I]qeɷ=ĕB#ONP/$۠;Ʒz'Ş1,8_˟v״?m?']oZC7oڏädV^݋ݤt.y_g>#uOLsΗƤ+a~R+Fe} >ܨiyK͑e9gϞͼo|ERO,@Kޜv:Gek]k;ItJ|:G>iIۗimw SO&}w{ţ1MZG՞A3 >iC륮nm/x ~砛s\ \$0S.vUyȀOWj^a>\,y#ȫ̻Vuʦ׺vztُ|ө/N\1ۛqL&Qguc=J^fXZy?IW t,Wv|ܗb`@x3sn,3/~Ɯw{Ij2(~ً n&Ass{'!5A vstyyoiDnZJ@.*i3s'ˠ9˘yի^p-)]f v1J^R/x4-A#Ƥ],LM'Og/pI9n qRtۮ8bk竌Aά<.s|,wn]{-D ROC/t>9G$eqsmtQX&|hhuj3~-R/4-[孝9ІV8޾VKkCA/~n§~NR|mGv ߯~e δv]3Mנ8!sP2.o>>l}[}u@@th b>ܪ9>y2gm2Vr(clv3Z)j9kfK˓%uS*"("L'D^lضۼ0f{5vm[%A=??㣙'sI]61_^4K͹3'5\e"("(E+Л݋ul0_7>؆? 8N`=QfڗC[rRntF.]Ճ*&9[fs<=˜5 3˧Θr즀>K)"("(-gҼ1mtϏXcsU9uӜ75{?|Xq@xtu⻈/9.Y|c `H͠\ 7"("(!0[[)8KȸAp:LeyI#B 1Fjt9`ri.#)leٗ's%K"("("Lz#vw%<:FyQ("("(Sa}^W\q u/f@/el!i1eϹO&yJ}0B=a\peYdM"VI"("("0䃀9~ H2@u9-7"9i>$d\fYjzmph)"("(ӂ~¬^W*Snaq0<.|X9KNU^  1͐la=,܅4m?;odr}Ecw_#Ɯ2ff դ("("(Ebcpˏ]WS(Ӡ^Xtw|9Nƕe[.39AICB@ X|Ӥ8=wi.rÀ?YÀS.7{0c{j("("(o7?yԘYz1j.Ҫm. ;>9gX=8ss(r.I_]}2 3y}Wf{r9u/B~َs@4rIL8Ҭyw 8F=h_PE@PE@P  h~@rq'@#4x:24t|$OZp"|ICҬ2{Ɏ?_ M2E@PE@PE`8c>7y@8r u%)ԏK"Lsfe㓔 A7  ["("("0e&{fȘ\F9`92.7Y] i02H>%V2ݜOTro.ӾywS/ٕ]E@PE@PE`zثLF)&X@l@= T8I>4%ݔ\u i|_d1ϗ'?I'=99EÒYC4)"("("V;2;Bσwߍut#={0:b ,I4 }0Dpq_tI9zC- 8cS.5 ("("(Ӏfdsវ L](=bLw J9%`rz-BXӜR: yIu9? h3-g`AЕdH>DXu\*'W_ʘ'sx<˭h rФ("("(ӎa.wOV/1Cs!LleМK=_}h>p5eM)Ɇeh3?)5?JVىot@-+"("(S@48t{\fU='8vr\DZ[.CY&/It/6I.*>_\ gryrRʡ}ғaѬT"("("L;X{$q/$q0':L#GR?p4 K햹8>,\Lqt/n:mͯ&E@PE@PE@V@Qm>+S'.|S$8|!Efr2.zyB4ٓX9; \PE@PE@jjsSx!@3P9pc Ƃn9xX䳜$h> pP5@?_TE4ZGs Y.s>1r|Xfsss }Eˊ"("(T"p~MmOvfqqP1F$N4qn׏mU/u>ǫWכN_Ps9_;c,3/;33;6eyz+V"("("Lk4mFW(F >qy2K'WH2 .R|ya,sOH֓'U擇k' x|9zmAR/llS"("(#{w¾[b5l.9 bA?qKYuA#qiH$T1p_^:ALͽgp/;_>"("(ޠLQ6}'pؠWr,GN1fp/ O% W( wX6\&Ƕz>'6#g|6|P,|?W׀&E@PE@P >Q[A30wxK&ӎGPr(n@7+uϾZ>(]9Fqϡ<|8؇<7RUM"("0$WOo@wwH}.40 }k0PPzH [AOhr\TĐvynՅu尓z\M74G'y ]/IPE@PVկ"p\qSr?jYS?j07p,y cp sWˬ/้}1-㱾= MF T uf9\v7 NZdO&E@PED@â/Nd׊" me-}dcCntY1'>8g.sgD@_ WRZ=؆}W\.rG%J"("0CI<*ڦ DvF24e6m*]3W80]SjM%hf 3K1h9whVrϘJ!cJӠw)ݩ.6vnCbmևHvzH>Z4s!V}b 4AX_=؆uVH\*%8{lE':/80q˒/Ye7藕7f Ѥ("fV@8Gf&E ;f }KOnʴ2Jp*SN|=mZ1zx):)!sо2GboM'2>GtݲY܇^AT,--.hg 6W"(D@﹎q^Mj=lRO4rm3SEpޠQ[DN3@HzuD2y(u|of/v[T̍WC7zϛ~g23&tɯhrPN|viS ʃ r'+ bA%P,g[H,5O)OVn&\}r6ILZM|u@FOsE@PƎ@7>co6`@wuiD}/P^#se #4-BW)0M{obTiHX4DS ֚AZkTm[/e_?2sUg̋)V5a#}Vn0SO4K"6N5ӗ _sssKďA9`0wY>hΡ)%&:U@oc!/2rXF9L@yzB@^UE@" 4`-L}/e0}ߎW0NEzo QQu)x-wz^\G^gL)`#x30W3`wutu*͓o~~|3oxߚΫ)Ι™6ūg'nꀏ8OG;}%~@!g}pY.r|?;ޫg/oÚ+" xP$ LJ}ʚ+8,2tSشw=E@HO: 'P,7\f*VYgitH#eZl#4Nm/R`NwBӖm}G#H@;i>-[O7^{>Co̯2uzg)^3s5ϧ/o$=6}HQ. jw<^Pg Ǹ1e hg>8I}i>D%eZ2e:C&i֕x24vɕ3_sE` ?/y׼FAa? P?̀GJ.X## }4 3|\lu$49M_ !g@znκw|8_xx]NFÕqs֋˥h.K\[I}ޮj]5A"0<:.f<40ȲO9zG#.o92M}bDQǖmBt=u KXD\hDݮN@quD :u\"pvi+?}滾/J}3fmcS~̔oNz1W!sma馛>я%f;Y4=`Ģb}eGheȑd9sNZhVl:"pZ?D4@&C{|h;-*Wr i mViXRU)H/t:F؍)Ӵw@DAz:M}wrKJ&wggf٩hjfN!>ћ(ޮHSY1U@ŹԊVgBq7^{yӷ|wG4x~~/Т7 uo{B?@oezF% r˒'ia'kJC8>82Yi!o]vemTh ҋҊ@@_a88YxfWk]3C#1 c[6L{XL:F 4nu#n^n]:á! P$}ck;f{{홭Mv<F <`6cChq%֟F'~[͵W57>ʳvmM5['Ͽٶk3-vf+m#xd\C.Ns3o:4ٳ>Z$_c>$$!cJ}0N]%Ou8O8>?+ӭYg Q .Nc`(zPN&CiDSһEZBc$DemlNc!: ˴\>KzG\ldʕҢthf(H }eyV+fylNX24U"nM<7_kB5=}k.C ^_an{߽^ E{ zX3{~;-\ep&C 1CÔeC >2'ün~kudB|y8,6|z`egh_P]P"tY*w Ggh!Bc-A{sL iS1۳=unw OLn`K身㖥Nb4_FF9MoQ0N9oך= jMoP^6[:l٢t._-NTiT}VClX]/Ε um=Y( \>sqW1|0?O?y3W5z׺Y߶_ȎYξQh9gLj@.a 9U.SѮ=tK[9̱[ mAtq!拫}Vhю]L I>C#yCдVN;;v{,N#~X&l6)D@M T5݇^:Q~@.-aq8LG,MMz}ofvvvh{]tIk동G"%9 eLw/"u 饲Y)34nt 1A:Fg)0 ܝ\4s4}q,, }xG%[}_zghpeV(Vw~k5?/zi%04k:kdcGh+DPPnƦf6hSim:#pvnvD%Z)SEUu:gij&;Oo;,PƌIq1BOyqD#x/Mz{4F1=~mfh$έoH!`_@4~Qs}au\B;64)HtwztwQPsLw}$N(P?si|LwWaI'-[1K ?=d\]/zsʱ/o$2/z-\)0{] 7fC<c疭S78`/`{qڭ{iDucI+gh8z?b6hd\1N ˕}tuLyGi8(<(Zn`6rtZ+Q"Рixܾ^;#0'zgޜKm aCFi-A@A]Pm{aSGv7^ұp,Utwl7CADKlN Ӌ\,HP;V_= vKwkNӢwn3n㛟g^߇}\xS!%w ֧&}\aEkM1CWq$&fϢ>q2)˼0-Sb}:T5MüvEO]t\Vohjﴟzlâr%; ~۾rA:Q2gvD=O#`smrGyyٓx4=iS)@ǂq]͑tX6Zq|裟6wtEH'I~S̋͟l |Y7:}h:}W՚1CC@%@s48;CA)Hs؎r :Ko. OSHӤ5H×Q x@uSn1w|gV~?|x^ϣ L7CƂ5$M1bz4em%0 <о/=j-zihמ˰\s5|R@\EG֫t|}LA!(0RE %SbQiBq5A9;ڴyV{h:7i۶auMF:p8vԼh}qRh Aα횝NA:7W})`QvL]z}Fw)H_A^wi ea!&쓎?:ho"^ t7:chtcu% FұPVxJhew fEZ9KfD҂" >鷚ZlЫ++GEK__XGf>,{L-BoXpXj{5[1C:L'Ӌ'RY  Wԑ?9s&Z-T~)i]4(eչ–F}@ѱ5[FA;f珚SK=uۑuQGn7< cw,(Qhlˋ/7OEWR"p۰ՑSULv|x;%.mFܱ 6mǶCAym[*[ Ǎn$=؂ +c}/ܼ]D<-"@DBr'0T[ *gNAC^ e>V-g>i(AΚ 3掛;O|y߽2;[7kK>hzwLnb]ءy## rNUّU1_Xw)_OHz=#G&pf]s.m'$qľbE@ y<[[QO'hvjw<+lk4)&?of_nh8$W>ؘ@{$z7x|i/-y9Bɫ[vԵ mbS?|r/fwX (biZ;J_oq\}i[-j&WTxOckByIOIx͠t]u,&rql->oa"̀Ȏ#ǂqv ]V[a;M=hmZ@Vۤv$}wY_5Ga6dr%ix'9^5ʜ]ѝG1bI{c$}崒N9N]@IDATxW}urM0rKCj'eU+;[ա }~ؾYMGDmEW+`2Orz]xm/n*zD/lg3~FDHӐJ%;3c) _YZFƨ:_X\e8x.+-aSpPݺ}m'\gOzG`Ag[g7դ(!ܧdO;;ihE[^f&~ϛU_mg!j"X LJsss<+ r}f>9xլTnscǖŽ",yj5q@!]~h$q5~dieK'< =G3D#>3;g*W:O=CA:c$}#H_9ڎj4rVwҴ ] )܉] [GжRT?*ki) v#`5tw ;ض hFE34CAzu.w0ۛA:I_QeZ8GOtCgF['j|> n\I,Oja?UHoEcͿ1'k O]˓m1CSmNȱ [A/w=uNs:IoO H:-d۸0 =ELw Pb$Rm0>?ivgJ-. OHB4H fn/Xsٲ{ ʮ.p0}dOmzCa_EqƠÕxzmm2Bh@X<'B{'ԕ}bn콢ۦ$v5V^9"btf8ߡ5` K/4vRGy'<7'ԯ5fu;,N-q͙4/Gih #yD H-h;nۥwѱh ҷΆ]Hngs0St$D#4=˴h,IRNBW)H Gұ_4߻ ݷ0U>aYmuRW8͊)U7I<4ҥH!ji ߈t#NP.AP&dv#\>|8<_.VYsEbD:C@i%W,&ϕ_f߿\J0;x:z8G#mq$*%Sn=[<,|U.+$W;+DzsUW {4`u\s,wŅ?2g=@ iHΣ}ӱa+HEnzmg7l7>M@SmN/-Viwl4}RAcǖP^Xz!Bt^/UE.V^d؉G|Jr_cWo_n%hWi˾@۾dBnN,= 1> o#.Ўa*hv8z./[YX'hfE-^f3Ͼ뚞/ya}&[9ԅ#]L|`ej@UuR?Zz2g:Ά˜>}:q @zi4%#iN>H+7Fj?IXcmc5;Nv꤇}1;_ }iK6n7f?tb|N:7Itzv|tZ,--PNaH00W \酼@/,wՅq>-߽,6ZDėvF."yN?hgqSTbu7 f%SaU!d8eBURİ6Ag c綏euc'˰wcmd?`iR.Ǜx]Ofs>hv?fI?׫p}7KK`Ou$;ly[yNF*};vqiI:sYg4E6Yϲ]}g\-a k"buwڄn(8'FrИޜ5ckH}7}wgӎv#oO2b]E/U{E )p[-w=tNEZ蘭X^W ҫ~:tWVVh!vq8c9\ y^XfԠ'|0Mϯ b`^$>*Vic(~,>g8Gz -e^6y?yO* Fsu߶*+qcnY$ka]S RD*u\N4 m}w829@'=-|\ 8c;r@Y#Ft=lTwcMZ<`^7[hT}hB0^, 3*N:^yZ8۫9O,ؽd#Hw`Ѻ#A[Ɨ;HeӁL@/' W.Pm DçϾl$'`—uA>dXDF4 Pa;I&? hP#ЁW>ƧߦK =C%]X mmMqEw<|ln5_$z7Ϙܒp8{K5L1(ȇt/ǃ\nܕ'a#0˗0pBKb tYIAoB]('Ors 5&V~7>fe#7sn%nrgiĜFZF(N^m`t飘Nz@洺{P2K4vB۱`hu9Zn~~nm,ؑul͆ mפABp%eS@',3#na^xV>Bjm~`LNn;X1d{L2XB, b]c8êBY9Q_P[ t\rP'2V"pLhs/yךL6gX`?9}-fOVA{LV'AC%q[._>` K> ŭbx,(سQЬy7=_y#)dh7q3Λ/ 胟jseכϙ/WSK$-0Z uN?- W|l#T`+,9!7<.ǧ<عI{n*nb,^Ni4B va~|&Cd|Z>c/l|A!ϱEgݭmzk#X.WBrjӶ'O,'ﱣyl-Κs㮧zWo|h{gTc7tJtшN@'*|>HtNH=C)}х>t]}ϭ^iU[=VQ#zi%B$ɆcZ؆8և6%C'w=\O*$|ل| ߭X/F*zEH]:n]l }.*L#='>5;hi/;a)(Zo 7|v,y2tW2tڸr-}0@0{p'҅'L,/8yY-߫gxd[~,f :,A!gȼ_hA{?URԭ"E I>,~<yXf1:,&* ~zP`]ʭ^!X}nWAUZ-f:ibr=IIډ2:^ddctl;< >ȑs|C(CA)F̩rScG8lSeY'N/۠"0E<NBV_թlLc=J?? 6x>~`f>p!u4ha=(_S:ڒ}屝mVBi 2ټh~_fheWM$ 7l 7QE'y>"?"r,LAz?ҧ };=ҎiRʝ:SG*MDXr#ScCNp=IzVi$Y#7e}!OZ#O>>[?+F4)ӂ@T4㯻&_}6~cऴWXqLi0K#cV^=B"dRO#hwk_$E J+wyt +i 7mfZoW7y =+ lUAH@ +m(=A:G-3xɕiy|u6Mv tc}]~B%{*~sFzeNpeWLg<};'Q R`z:X94E,ۑYC}>PF4zб&/BE5裐'úDM4 }S3/DjSvKf*e]Vzyj!ZVp9c(;}q'IR \#o}%A\}@ǝJ_M`HR5 =+fS+Vͷͯ+u^T dW[t h'b#E,Oa:0f=!.Y!RDl>ُOneR&gs7%9B$;ٳA6%N.䡍2blNҸ%!dNz1 2:E[Q5>_a~cS6Y_paML|9HWeQvjQ.];Vgjl5~c8Y*BT`| c?*J^@C?R,0͹KC. QWnݠYӗ5t|XK.dUzpWw4o'b^|ٵwk\)\vX$茀>Ѡ5;$_eYY^^3dJΕZN ֑)kE֏}i?ި[MyotT۪T_@xS>,28 n"v\ Hr D|BuDW=0=$bֵ4aŲ w'" ki٦+H=K;mR v#<]MS/W({*ϧ=8]ׯC[{mQ uo+Inyk+eAY 4)cF`u{l6kN9x|4WXOʔ3pmrK3=>8w-o󹹹E>]E29:7}M/nhmav6vH0h~~|pH5[E 0і?m2 LV# ]rWoXN +&t-:ϣJB%4/4 vg8~iu a D$ |IV_me0r2YOƾ4WƁ~xtUe@W*s:(׉t9w͘Ϲ+ TW/6i#l9I:aidV|z;ͅZ7c%75k7'`dnD=*Doq6[:ʇ|TA&Og[/ \l @/za9 ˢO0 Yƺ'A6GxA;,ӷ60rn)tķG^\?&#~DR8L.=iXAZN~M^O+'IG=dmvd;q<{h.%xqV%sulCx,J';-?%}IڪNO#S,O.9sy*3;_jY0;; 8IyC|u+'/wKݲϏԑ'?ƈ_}\'ͩ6Rt_i7Ey՛)!7jϣ+ydN\!B?](tzc흟@V'":7qe!| q6ЌȒ$|KJߒv@e+NQ[ʎkJwہJ\S7"MdD|$ԋG8?Iigw?'D^XhA[&T'br۞y[=hV/ht P)w%tRusT7|oUrvfsqb˯T*zb|JB>%-L"ᣫ >ݑė6=e3t&>oЛ| J!ҷtӍ۞}\.wc@,fK#NQ;>e|dz}Xa:olӅ>FXA!gV<cueA9jLJ;_#ؿH;߰.ҵzi 7)!?$Hnn4 2+&"d:-_C4cWR:^6Rչvvr{{䐡Q$e{vArel_Xh;\O8IGҖI_~Yni00i# ppO[u{S V2lm Bz0tգ[]Uzns/b4ʊ@[:[-D|'ؿ>-WϾ(O%>|Pr[]N+b%/)@=ٳcgmDXsO7M+9q.d}Q{HnQG .|=' V&zcWW[lWhA8mz8z-o`׳mQ;/}iOɇ,KWsE`PXm'o#kY<` bƫޘŊXӚ,9D>,i',KZ{uI+>ld/KyxV2~းUoOuYOO.{dL m@qzv#C{8 dsB?!k@@Y}2,t!&W$v|*Q%( D};U|v~Y0 -pBdZ>#'ЏM<\g: I1FnuaDuڒX z(>$ ]YviKiE`\3]Z^Km~'.^9ȋJ|=}WIÇ[Uހ4 O +}Kʮj.G'7XFŬvkyC@ sϟa*^d>o0tqՅ)V͖~ǐ2lᙟ z/HlY^'y_P7Ȅ/:lMخ4zPBR@t!lA?bB;ja}u:BI/RT](}D[ɔƧMz{GBaYNwl6]za=\?tPeqt\"}>KyhGX;#sa?+"i]8[Y@Ѧg|eP=̚z.krȱ? W^yeU{b66B $TlS(?\آ{LHY@V J+tX꺕C9˺هϿ h#:UJ =+Ŵ#ԾnaN6:rVA_τcu[~謉zY<Xr4WM|#HRVfeuIVE\?A  >'m@lnm.)ӿ: |C03S2s;AM7ݴ"#5[1l䩞Fu>7 pvKWyܹsK|2S{Y<D?ODCs5WFMipZ: oVI 02K}7K-;2~X&* eP pl9g( MxH!c).">`> Ƕ)q b-1ZMG:j_ N+,2VA_cO)֫k+&m@a,h2n >_Gl'aI,WSWy/=R*nlL 8{,<,`eAy?+azcՌG@cӭӗt|Y'Nwvtr呼P:O?%Zޛ[UeCDIf@2 6~h RUvm5})TYEJaX *% $&dB1w_> {#^;;⼽Zsg,;L׿}7j{ b+P2<.٭*g!&uRybrƆtPxeNglAg_ƚjpkK Za1gmRǿM/P%gJO б+dm}'+GfH1N+euF+=kB(ަTa䖧-=дW6BP+t@O=.oW? {qUFNRؔ,&;z@bU'zg: ܲ mQd!~LeύC;6XՑnz?4lO?v{[_?ik@e'@Yx Pyj<֎9o_#@Q<$p#YPDLUot(Net {g5nǼ*yghW7&zƤ.$~7M1U]!OJthUnl } |E]q)>c1=oA O$V&tA^)PU&G=ФV7r?vAB%w;L;VÇcNAgzfq[! 2>Q}_܀l%%4טuu<Џ"{|۔߯mR pSO/V.9TCe 2SMu8/ƛ0A1ғ/JHWȑlW&ֿ M[l{6JueYxw A^84e"˔A[z*hax|8qM[ Ml zn 冒 XF/߿ɩ?pn5;#z3Hh[+_Ckv[](K2~eK5][*@Q,@r>h[)g/# 6^b6`}|j;9,p+&ÊWN ]*$KqƸ0'k6X-ýrС auZBgㆍMlOwz xo DmQVݸ ܜ}4WQ緼:hE'զrp#"(CH}}MNL9+ξ1=؁cͿ3Fm$D-Wc=` `刧Lp.Sy!`rI$Jh#ICcIaJdG)#*zLRVHG%ԇYo#׵* +p$HT'-tMqGWʁuDc^*.$)0A/_C=8Jf6*Hl3 n4x l\%eҴyAҩg_r{dpnbbmoeɝ]ź[/7oar52hA澏eE?mzP|L쀹9퐭e Rg=Oנvoq/|;#itG<-ͩ\ws1^zEoxGld;b,oE8qrW1rM)[nnCx#u[nAn[Q6Y (_&uaѵ<{x&@\,ci*9 ˒ÓFFsnuPхm:ԕ8 J90C>R8ϛÃv%)a}b^0V(p)NE:M4"P5&p v~4|(*V:&W 6QOXω,آ^:H 6q v)_-¸ RYkt{D}z&o$׾qt,1x}uEN "1y!-:\ث Q9F7Ker31@{`][U鱉bl̃o? gJ֬;/eZ\D#/4ٷ{ P6@2K=Z੒(}I)Rnq"A@;%tT"` ˪@ ? lb`s2ɀPQ2T qAQ,cL&P*MUO_"iw9SM<|6 ΰ7/b]]l'uq}X5lby vQT>5_7R1'#}R˼-t1;e@lP@rBmy3i7QY}myojC+4\sI'Smݶ{4馛gUUauSM h+J@D1ne [n<֝u/؈3y|npИ{?[=z(2Ve9{(![ŗʡ>V;{`u)8$kT1I=lzN!mѢoszA'؜P9S7K=sq`2`ڠLoGcJm*Ud,9֊,ʕ+ . =Ϡ2ة2B^sD߶};˘mb+ˉs>MGljRQ* 0|C$ x -rUz`S0bF2 16Nb3,@Wfټv8X}Y}G/}x"c#]bbRc&RhO6{/[ZZr¼{nKx[Tʘ[un[^-shlP,3&e- 4@^ &&%+FG`klڝ[)ƺr&M&aMp<sBڊzuZ\Au۽SJ d0.%{耗EƶԆ0)NEbҶL 0^_5MA$ iKLIVȵ",;X5v~]UrgMlR7cƟ⋏g*HnXZYKT'9Tl a&gtcGRvב,̥PGx|̕:Cpb%bqۘj4q|B.QзiťO<0߸+5c8X /+gTa1[{NVP@OF%ᠯ.N)P?vaCy{l=14Qx pEw}MærhwC<î nv/dly9x{je ,{yRa"w4 KUfڧO` TjȗL"V!8+gn쉯QD)RRֵe"Ýi؛,3]*,LHQSל@IDATy %1 =&tHHocg<Ȑ CGm aߦܱ#jgeNd{ܖm#wRV{kR(j$ӭJdZCyb#9 D I9ձe6H*qQlgu?1qlbR,p^H9b~09[ >>BJy نfG/L,mM8rxPүĕq=axTCDzs ~LX1WbW#7/[C}vV9`;M_rqrM9^E MWYnDwӳZ- 6D@pQm܁'dnas@B/#KEPm =О9YXn |QxVߑ'܉oq|㵶#z. Ks.!sb,~ȕD^'F?6*ϴaN,B1y!nVƖl#L[j;ۣ _8^G {d OEa店-/'ou'rnAlDiJǦ cqj·B.k#\[cR)b}m0CCoP 'ljj El;*t<UiH[ z'm.UB W8 ˱NmK*Ʀ2۠*'_ʶ+l㷱eƄ|ظ|;b[ߏ<ˇl oWnlu'5: Fp. WO)b" 00n"gQgb۲ma t\N,X-olO&t֪Thc@*σר}x` sd(S9:rR9'7 O@Yܑ.Oq;=:B|Y5ת1s@̃-YL 6."b[xJ9 ˶ 呿ޗظAxtĞu*}.;nTn(YӘrpj0D-OOX=[AY.-{CT r`daܱ}?rG^~I s2WpGMWfLN&& rԩ(@]wq7dC|sz [c}}9`ץ2Jl|qGA'vybZ5h21̃;Xa)ȕ9}2Ml;lGM{xPeA&[AƎ#ĞWUk*7C~&oN/W>ĈA*Mp ,'bQ;Cv4'^hL1eL.wq17)Ge* :ؤ|3W}3ؘ3: ƕ3Z}(P--Cߢ )mL*9@ $.5x@c1+++M]ƆyCXCybbB)''i>1wN//IusssZ+_J'웟wv=8!BN`L4ԧ>u{yܫQ3:m=4\>/J~ٍxB='+ֶg@d^Jmǵf}eЦz`'Zs?,j$Bd9~\sƒ*r8PT&ҕŠ6&R'!Bs ėU;ߟїbΘO\!i.Fr2c(yAĎkUeWB'&B6vYal̪) I_K*}JWed+×b-`։Pb~cLtSm+ptetRHu1r~&C+i9W8VuM&xa$dZnN‘cN#lkc;8)s9$1F;b:CI9ԑ*̽~w~Gy;W}W59x`v cG߱Z%x` \\7SuaaN Vd2{>zOӖvU':club6_xo:|ci^KxhU#K?k{:M2Yf-ex ҀrͱOɠ끪@ȯ\S#9EL>lZdíYv1:ymL_1%(RRԢ tHn`FWTxaGʸ( Rve6G6 VeގN%d09=6Y}oډ~*evI$u68L|lgc2b.#b&nx;L;2NW&(0ב`<:Kx9a$eNq|lj8'vhs,VcR6H]h2 |9Լ-G'$\\m>{ղ>})q&2skR"شhOTtNCU`nOaR{<{ ÎhۇB8=t3~z.ѽʼnn j ؚ-E6+dlVFRo(doP 1v('pz$,Ƙbb9 L9#8v&O2zZ5786ҬXK45 >8 <—^I|Y`+NR.tM^pixhq|))ڨW}3}]!΄]-:]9KR7b!u:2yG&ܸW1 ߖpp)< n!wc2O*s>)Pñ|7s"es<91-Wcrab kZ’j}5R8p@zkࡅm} ){3.v\o,r`rHgf4aIꓤ ^_^8dC s@71έ" "Om՚ֿ'p(j XsS֔-ȃ2Of ':<`Q7`rC 'Nϙ70o7)*ؠ.m`Nvm 9'-q eS;5-1ܾ]QzR2rشi= ]\kn~>{@SO6sEX%Km\dpRz/HҔvuq+l t_qiilVi)mܢ7V dy\N%۶s+K_ `̃'s!RvSF8x!%c'2@M{&eR{2d3X!'re0^l@)ujMpGcTDJ~R#qXi\rBsHc<Y{L}Fk5q3fЦ{oGfKq<]\Zu'5*-ʣ P؄L Y@Nknԣ\Zev z逮b(X}N.?v8-o˭nk f6n]:F=;aim/wreFl5,3ZY 8mr8El{5a>+%^#S&TМ?葢HZgGOX7^mb~zCYVpm6}g㺧|PU28Ֆu*r)6#H&d/. D%nsޫtMxٚ\/X}ˍRsxږesx;fzʲt`\|;{~}QkU{G~}lB,imza8pXYݨ ;;x@fL2a+W@\$tsAR90Ѷl"G?W=0Ո4紇<^C>&ounlښ M1gg겼j5{L1yƕp|1ޒa"M7UN1{փrAuy[0;EW`=.eL9G02Oɨ <Lb>5U~,bJ/sKba!d)G}22 gKrMh96=Ф}ٳMhwY+W"á׹|v;ZKKظHX$NX_D=^g*i@B K7#L'/)|N𛰾Uq;h>#ԧa7qlr=pa?ɤYZge^14/A7y)LCjBݐɵ$ޮj@N+ubYzuK]U[!J$)iSMz/|Raw͙[}0Ų3YEBo^Y=Ô-d52 B4@Ӟ>̶l= :wUk)wq %e4XKo˦;91!V)777fgҸ%s||Lˁi얚_|<[]? U5$2T1kK"We4&q#4<̘7OOp\-\ƭ-κۘ0\ e̢Lݖ06h PgΨ ? |>A{\'kR^2/:G6>L\"Hry[rFm[ 8ߞamn|:H?]swoЕ}o[r8{ M^pg94 ?ۖ<qj`WYfG-ƖatOySptkeJGOwoQxz0*Ws0G{̛p*#7y!ɬd)3A?)yNĂ5\ /OM}kdbmeYD^a-L}~Y&‹9nƷgd>3#_g0yYn[&8JD)c&aGw>We :ڏxwVutp7~c5m{,kZ}S,pYomG a^#UA*L뾌L J : >a' Nh$;*MM{n]w`y5V쳺}'@]\wnv '& 3jӟŻロg)P25(@`җ   |Zuw7noϺk0]ʞgp)WRXS=<(dm=BA{,S7Rp)_ N3=ePJ?-$9/](WudWpvkvw.vqWq#c?#? Dž;wYtەˇpkp?~mٶ)YlLhwBӢT :Q82A#C1:up|(X<kp2]* M{Ғ(G¬O<Ν;Ο?r<ˏ8yK_RwqwIwQwa|8pɝrڜP Nh>>6Hz`͎Ns.}uqĜ@S)c)[][%=wE :igsm%x5`yM;|ciTK߹cJᴀ<ԃEX%cĠ͂L4[NNS>ܓS_/^g q.n _g`,Uw}Z>{KUvLp9Ҥ&d./ ɜN`&R$HNm\wlvзMXWx;jznN!F6(Ol*)ۖE1Ibzݮ^G}|>?q''GxQnܡ&w;vm>.voQOonG4p} Co4>?,/N:Xf)o55kqhOzn7aQ{9Y9;uUd 房D/TvEu#Z%NyPC.qZ 2=@/ZE\q3y9ڦ:qgϹK.vivN}vrF~_iv/'N/kS&b 9/y\s!O¨vR<pj!0X?V;+=a?I<p~w$7!w=p/x t>r-a0ٕËup?'GѹU:c;,x16)L*HvnU H ""7%<ԏɋ9*g3gFƻk[ÿ=8vz`ilGU"!׫+z2_R9&xs9,Y$^;&Rt|krfR^^72mӸFu9¸#mj{r;n㛓gUK(ems4Ɇ,ƀAOB֕;Ƃ@ qxcrcgu3c+VGo y)ۑ]U8aۦes[U}3g˽/vV}E*}we{jBwe4'ppU5a2/k[J%IҮ4nz=ЬPuʛ䴍sk ]N/7Uzqkݨ=7d?b9V 3o}szx~a\qmxyGg` \S2 y.~J>H=sCMFr/xjS&w̺ ہ9o8A! &ww.:I3'&6-:jhTt7v!Մf2e"%, n9!/v7]7/_*Iw%mC=>яtk-x+^2g>ߧw⸤txq_c8K;(cՏ0;8`lSӴ 4)S^bSwW!qsrdS.ۅVYLF}v:cY^4^IĘl=^+XxL0iD>32+q"CIĸ+X{`'0$o(_Epp&ɐ#_?Y@A)'@-R>SSr:+xIOOxT_/?wGr}QA-4?_{w7/ݫ^*jwmI IEMӨ8'ONqP4&ʁ[xJF QjƙVr\OEc1Ƕw w(+>^2Xɏ9~I;&Xv\^yvL!gW۹`p#XYfNSL{`'$NPn@/i=JvnWtyyEO* zst̬̓5ϸS8厝:|-:vpsrΜ HD7:$OnIAn79į8#tWRՉ=AJ팎r؂)K,7殓<~^쬻ǏG Z=}s}k#I;~}KV>ph <xf$ndN&=xhgfT|eS Dv Lڱ ;>_'8ΉudҎ zʮlm[C 0 ]Յ>kmhveM1&*?>OO~G.:~{ rO9۟n|Li|B%JcFNb\A]}1_@5z:QǢml$ǟ203)#O#N*KwxqÛ۔üpykx]??~~h׾?֖7ߴ k/&4pb.b!?׈QGvCCI\w v`Cs~my%Lpim3ldN ٥<ǰj'%3j:;+휨c&ey;k1D7sokҵfu=Оc[9qĴsCWfزy}fFsN4"+?oVoQ$ &X0GՁvL1@:NjR2\ǂ0);6# &C2s0[gNY1YblNwDr@ɜb!G?V g_9kX*Y2q+8Q8wdhl>C}F9r$IIyI۟5[c^|"P'_t|H?kЋA*.gyɴ˒nwjˉX'T47}KͯpϽkXƧ?aIyln{~1ZgaXd9=P{szRkl=G~EWaPN Vo7gu?>t=%ҽ>38jgQ}Ix%2 irےn="69؇9?, t,yn^a)l+A'Ԫ]XfG-ƖatO{s80l6AZ_9oCII7]Μ9=x̲q](+XO:.ȧ:}X bξd03N*:7`oba!4,T\㡍eI6>4S1 qA'8= 矀X_GfPX_ukXkK>'l,yL)vp}qySov=?^?ϕBalG=i'T%Fc[Lc'nƠC¶mN md&PNx')=WR[#yη`qGs_~SDŽpWWF E!׾6\ idx6:<_#O]wSkۖ cژ[u&ҏ1O~A 8e[Ou~kMM c"['qTq HȊb"q# o.ú;/}/[;ؗD_NV:o@'N]^s-PG2OfhqTF scdoq1,{r !{*PGܰJ ptUԑMѣGoo%M{qoO]SXQL$>ǚϮ9'o<~K6.۲ ᭍A96 ǏWx7ݴ;;魳6d{ NOۗ$Wɝ^pQXjd1FB6p[Yb!E8pU0WާŲM_WK!>UO^b㋙)pz<(WH,;;?g}Y `k':>qt͙[ݩnU=`}o>=.6!H|9_̊Vo'4#),d@]ܐ#e > 8 []l|7c29H2q|vd3ʯudˇ+}{gST wSc|TϠN^J 9`s(+ CEGlbCFy8d[k@{e&:L7j𠼝"mN]U8tB5@01Bml-`Ѓ1Z<( c=;ʄuhc b2`! (#_A —Ġ~[/#,~#ЮŤE8S8=J<6^h "$kL̅]}}#}ns;iN|sFy`g<^osw*du~* 8Ao9Hxd8bϾ%JxooWՍнurf/ggzhǎi <"ا47]Eêdؼv`RK=;`(z[¤d=BwljwLtOl];$* e:A|bXFl'$o'H 3qIWm=yUIIJmA/bʁE"_WĔl|^ ʒiu[8n葚`kKˇڕ^gn{.p?#@vG|8۞o~;|D:ܘ;YNUn(HRxm Rq:8] SЫث-tHQ)y.?cĦbrU,>82"/͕pu|%0~gq.w66C}s貮8'kPFuePd΁mlH̳ZoJ-Ih}zR_F 5ҝ36$r2ܐQ|>LNO]9mX:0+jkM{@di.?<èd99Y܏ (&!S;\88 vD\E#:8ܴUeŸbZ9l!^t&b@_"+E7F~|! >3qeG>!WjK|}o/n߁E]:X:MQTm~0'q :a^0X]z4%[ea\X'u$k\ ^/b062$>!wL"G@|*,S()uzN!~Q|O|%/5ы^W>e'ס'F)@/lqc!s{M7GC.[%q$&WD}TYge(WXYN.uwpC7֭I7WI6^ iZbW4>{ l#% =p") tNs'#;q㖃 Ie7М"/^0zrJYS^rZ.gi¡4֗)9ハOU^<G<-*`hzQ V$b/Rb 3X56m'X$֕S.~׽ܽJNQ]j>?Ć7a1\*.>%0б}ICaN}4~MJ!ckcU8eˏJ#90Qe{m-R$ؔ_G>=Y_y1wko~3Lyο kX&o:_Or.Ɖ $P1l9Fve2+mt)um>`DYeT XC%v4655u([%~+خIe>THJF=҃"DVȪpP% b+JxYPFxod(*I 8MZlA!OKc9lrc@lR1{}=v)^.YPJ \‰‚~b,>3m :(-6C6^~o0{`ieݽ?iG/叻xnXvg41 +?ԗa^Ǵ/QX>9<*x[[cr6RI0(x3R+~d³xDWlz;׽qgΜqe8Qr/%=9Еߑe si ŦhXWUohObc`eRy_8!|zousy՟\[+h-w& K2"<#+HyŤ(<`dQ`Br8p YYwpvG 1 _lP^Q(3F/:ف1"G\ > 1!GK *:%Eۅ#'w/7k=C8|<t`ӽ'X@r@de/`ccCZ/(9q@Q̒^ b\[l9S{QTq, 䀀wD>T(2L7B677q-'oىR':&oUubϖ袥bTe@IDATڼI4WVnn-3Xι#~彡e!Z{x¡C;캂YًFAn,YWnkcc@Al,C YL" >0qPx2ߡ= p(rO6%>˽_OSR1qD'cRpW99t%y_]~'.}◹o!~]+iUO|lG۾O^w0l\ UǮ6CHC>ơnqp f|Ƣ_B=3b"&Cu{(H"QGARNNM,S"/Ym_ )&Is^Qӟ{w|G'o~|jηo?1JȮcQO_0O2"`#*>ۍ9u]7-e4&iR%l;(>&vcA7gl*yM Zʐ\Hk:Bԙow<>pߝGvF _-BXfp}B2mRv#6kt1V ۈ]m4Vu6  p<.ҁ&Bb2(HRBgyUe؜_x K2WCCeiK^rƠЬ/hL-ثhyظ8;zL,Nֻ%ku"{HhH&+$Xu2}Ϟ'v\ħO|tc{ƝNCuկ\s<(ν;{֑ѝT)L0j{$R|x>h[p`#2keWR,X`x8l(EB6NC{NW<1-\@bF/90H}A@_`ĺݑ<Hu{/}: tmjhNN]w:$"O``A)fYs!c:&ܢ  ]*9RN,dPJܠ:6.? G˨ )'a:iۘ X6* ϻs?oQ}w ڷ7N=Bo?ꑓߜdU9G,]sk5'[Dmu@{`8kB1P,7;~x匷㦝~׳ ۀf"-ҀhO4Rw2s;xك!aA"آs:x?09 u1R{Gd X CARС#ʼm!rkY_zǝ#u\79K:{CNhK֋S ʔ>p=p6j!0Ub`-^ֆeS[liR饝՝?sg@ƛ\gun.a7 c!%q1z$e1 mЦ--"r$X8#6qL.zx/K[jY&1+ dcrhfqⓙx`g_}a}lͤթ4?IfPh96+kh~lf]&%I !+ _XguGS2GY1V4!wg=Ff:nEX80yWdݴ/༌uT۠,E_L 'd_u_:lk汨<%#<ʴ??d"2SX\r><>=RM+GZY5 tuU s溛+AZ .șU=uX8 jtmg=wO"[/cbEv)9dHXR*Tb`kp)LO x+ԍkҗ%N)|z90RGX)M)i㘐{WBz{~sP>~뿼`򗙡 c?6'~/:r'ilԕOko <+lngc'@#G`یCHJY.#ةwOՏomle[oĆFi|BX A5թl~;}IZmeTq. 8/ u4d4ᆝ?BL9| ? 72ł?A { # yp _=7\ٲ? icmmʤ|.nm"W-W[nLrĘ! }{Ϳi!-ˤ\{q0 }av 0\|r<6;ة-x.~νM?6Fa\M|p9zFӆug Y>XʍoK0j$9@tx Ӆ̓U~:| J`@>NE C \>̱/߀,)YW~w{Sr?C?8LL[J~`rj} Iml/<xnUn6'ߏmY15e2m0Pg9U.uVߞ=^%S|9rm܈0Uu#S ~Yd4i.ɺ! 8/ ue:1Y9$ed3e .p&dvoC~@xʀGA dQ&2I+K2aD}S&:Iv?uYt. or|̍211.r3/ωq769Ʀ,Ue}܃_D"~_v'L``[YN0B !Kc|.IU?E9=Py/︕Յg0AJT!:Epԓd<1G)>i`JDFwSʉcX ՐC=y_))y׬XwT67pRsvG'K_ME\3=q%9{1GÅz/S$kxl\0<o>lsd g2m~{=P񀮷(G48n@Lq#LzpG|` Ά&U&Oo]s}VYr\oW#{.c}(LY/'sȇp;?1}2~kcSnq_]s-7puW1q\Qdw0IQ&SS:Qǧ0Y Nה`0iwk>6+x;yG$1I* 4,^I;24f<%8dtkʔMnUDw{[%MZQ.^I1|קEXreOYcb;#`){L^=p-tvtf۰D&f{D {ppj:,Wn1?1?2Ą; ؞\Pxuz$oL^UnN;r)wzOq6u\NMUtLe\]zIɧvy'Lس[/[?>0.Rכv_(r\ݎ T 7LyUzgOp?10-@[qLzMc%/Rv)Dc˒u=O\IOf"V'`c1,߆+ZSx(/XBJS>c8w*ͮo}O[2$d{Ёv^Zy!X$w wy*2Ӗ[(,36tZ&vǦ.UK~zzڞncknK.Ss]Q蛽*#Js)w8+tDR(+\g݆܆/e ^ q} ϰ˛0!Uu 5'\#G9$Wq=%O9:#@LjԲ;[N6Bi6h)O,ȆJѿMOsO{';83궘}'UwPou:Я c4Q!2\G,Qr&YVC̔1X2G@Gc%؂?ʙe9%q/lr_LSW&wu~~&ʥ/"z`hGuhq_^4{wcB:ê$'pC"Nc|\h^;$osG@]'UDey) D7{WHRU${[I2$4Qa]s?,!ʲ.WVVEp2I\&:I_ <.vLVmcpI50Iǂ&ڱRMWրoNy_K}'c0ɪ 2 ue)|j 4V䱍7z^Oi%=ptud$A.s<qq&QJbC@^˙&;x1:`WW+g}ob;)'7DWa<%/_wOv9W}__}+{w|%$ c\/Y'\[ {;=; B?'Ϻ{`tz~p~͆N'볲\&-..zl{7L6ÉR_ι#~nؼ'm'FAOL2rx|Y&xi[[[s6xLץ؊LFV6Qǭ]`BW[ 9FzYwď J=)1b;VW䱌pO 4$"fQ b[З"T_&"6%_m{~u=mvG$.;~gd:L a)ZϯHVfbG}S?V:5+'[@nc+x 5/iNqK}N/};3_'sad?|1&jϗ>O\߸[+4 -q¥IOzҾpQP Xסl W&ڳY2YwV94-5n66?"Ìm@iw eUt,=昨_xѭ\옸cWe.ggee{l.{bLԱM2 n;/KGN/{|_x 12./霛ӻ9Iy,˽*҅#b0Lᮑ}2ggd2/}Higwk{7o5 7w~ڃ3_:g.wnݛ`mҼaƟ|/BT[k}{nwc7bԱ}ے*_u&ԌJ'Ryb~rR9EHؼlr!bm3dQӦUXhN9E٦.ʶ5>\(Utzky0Nw- kr1N^/8S3av캛'AKwdt7Y`GP+'jׇ:P fGXŇUihGja7y]bW֖+v366A!RGuwAuْ u#Xc;jlE=Zt!9l<jC z)HB_+ǰqb'B}UF`[5NÇ sW;jm^=~/u<ūNV֚ʨ>Z^kkzPb.(NkkzԶ ;JNY|#@!=訞\Bl,f1oEyC论s+W;z7< Kjj oy4 +>WJF|'?̗]"z}Rv]/}=0G?L'>5_<8Уx4bxƂ'qJ& FC,8؃⏪[\› :*:D_q,g@:*7VXe icshBvr_*gC#I:7fAaM>:iX6qNP2ǚqT=}KyaL&O;!w_/65?:'g8t»+g XJaS8  \WDL^C yxԹV 1ͥ(W?_duaΝ 7^r΋u+o?Z/(6Ŏ6^3ʏe4)s;5RqŇyKb,ǘrba,A3P>wn /lݲWZނ;_u5Ī'^%;?r~bE #ƣf&k(p;)[?d'ZQN1w_#6kL#Ժ""CxŴ5 A_I*bL3Z;&cxt3G)o3)%R{$BEP6I y#+ljpluy90p /QeMaDGU0dl}[`@T m$XHl*Xą6/!gmlT%[fb+\opԾWj-W;;SBK; ?;olnrt٬'ath*sMJ:HP{ Η< sܪ 11;bj΃}HxC:G Tʭu\R;$Rr1@-?~9yW8bz '?6W6] G <[a 7ҽe/)q+SxP;l~1'ʫAFCa03P/6o@]D,*5EL:mk`VgvO49% .E6``i[[*>{D=mP}kpKwHf=׋Py" y(>tx!/b׉e` "~!12NӶ5<d ))RXk~K@L[~Dl$$cc9]Ǎq, ڽN c NrЅ"(oeգbcjNcw-36xpc5E?auxJcR2 K)!kSmPk.İ ? ( f.Y0,isF5j>g__CBy%W8(Ҍb bz~Cܼ N~nfmݼQkWWYx{Aae!_fu{\hT_"zYD/gP^pwap)o4uOeBӃYy WX[hr_E6ŴG}f'mVѭEDܧUR*u/(uѭ4;zkIB>Ү@z^Yb Qe$/8tÇ}$ o #:mEGb*/I+WhPA\þ80:(xeS*[ r4V6AJM)~Ƌm! As5z=F|nhxrRb~K>>Q}s?7>y k֩@΅\,9C}!عŽƮ2|.?H%f)H"|SzTpF  $X}4;哧K)_$tH1V\/o|t墷󽮇~A%5$cGKD/ >C޴-mX7RK_íLg#-vWAư!7lUJ#>U1fVgefͼIjqaʡ_(3vH%o:t]ygzy˹i4?jۑwhiFnpUʙr1^D!b?Qsx'r-t9:"w` }"1-s ?r>q[8٨s2)82#tbc6Fg5PDbtpS[u6&M(ŵ7^sd+}Y/t{ Y$}B xD^8? rvgX;t4 + X|I~iU$EtnO~;{]zr7-eb .,~u ƾoղi11`impT"*1^L-!b0$T X'2<䪳mk Q8'|? o2OG&7? XP넿֯r<ypK ٶmŗ^zgKLiRHӀ#ͨ7sLom#DGӌksM%.++ǒOm,AX;Tb1`$#gdtO8n(iPؘ;؈DMA0b  iVo)_pO XSE:;) o:#޴nϜܬG/Mq= x(!ؚ35"|܆ *)e5 .`N=w)7vhN{>գFk(Sqzxi,C% Tw'~Hפ|k_+/ b"ǔ Q~lةёzNRu&1 7u50F#>7:yC?}Tͦc_죯aWu.Ru} l0울ET׋HM7`V)vV_8R>9̗I#,i)~x܄{0'RACNcXXa<r`Dm<իRQ9~BGTz>-6T Ū?jŤlAQM!c1I?틎{¥]d3>~g"& Mk-8TO QdbW)j2;sWY&Ac^yX7x@il)xz{`.("qsu7憯xY+~+]~ߺh?rzjZCedl~OkY̵!^yVT(K6=f:ܼ+~M[x U-P* F} lV+Fk2v366VxohGg/} t]ycrL'r9J@.M">|`xa,b1idn}H.+6%̥l3ys,ؐ+&0X|q)‰1s>m'c6qAOk?k?PCvn4u+?Fw 2_JS8ipK9DJ2y,`c۬F,lfBd z'IDOsA6K1yi| kRpw^榧?itl{߼3c~`,eTaS9^8Gx) Ŵ15q|>Ba~|AFe8dѱ^T>$~:n U=b؜RڐOME!!mk:e<8 <7rq4ݝ|nrbjT֬nssf??#zJphuBm㠤׼hr3V||5z-F*m("n d^75+߹Z}ݖ-xZdRl;x찡'CL'ǜXK nha' "^,add#5l=mC9 9i}`w_8 ![]Lv+^<|dtkwo\*Ѽ;Py\ya2qh=#fQ[~Ø1ƳԆ>۾uo~sFN}{3JL00@Ⱦ>H52a|B, m_{(ԳbNqZ[=t1N@"8kWv#P}U zZɩZۮ`1^.7=Ŗ4n;5|ϲAv9 e9{#qL:+!oV=.A!ɢ &ayLq>6ә0ԏXp~qX䂐PڏT'ڀ]䉤_0?bڸ');T }.d ''􄛦|Eyf*QONcv^7Cx=)/p-,au. aGGw\TֱS9dSr'K\9ݑ?ʛ +F\k2ny0p7|j1c:yrq,(rbY,!kX*̇Cl&xNj D[a-Mn)jq~~v>ؐp]ˋsЇeu^wuva>yWܫ=Mu4_K:IW0)'ޑmn~8'խ۰sGýrtɹ/_WZ%UҮYWݗh~+)G8t\Aڐ^N[20C<>G.%.e.LLlϭ̾+8C%O|iC>1z?dp]qG̵|b)ס Rx99t&ř 軌 "j-n\-#DZw8Z6,;iai@Czi Ap:ęOzmyӟ>kul;x{ ^/;W)Z)}'.pv?}{Eonj4~Շ#|}Ocy)&:~]XGmW1Rk >lȁdYא>g9vo$ot>[m}uvѯAu5uEy1W^:}K&OQvh:;A{q#eF{a(4l-H'S$,-[9vhJ@Jhg'mʚA^ZwS7nUR_JzW{*LJ “- Av~BH}:֋!`31M#kC%al8P'pRRl8>o3:Zׁ NT4JT>N[VP -6`4ƾ8Og `#jH;8ǕZtE tZ u,ر0zwOp=.nXJu^;fA.wN׊~# ݺ9}b8hF&o=Hvls'}pwp?lxN4OmE_(u6 ku OI._"Wnk6E-MNp"eiƍXX^mkзSwԎW_᳒_w. |ݩ}GPM;rJ8c ;Pb~4dRLZv8p>T*JSln63FhVa(ϳx{'ӽ~ø7@?X !L@IDATmTٳ%jSiubAvT^ud09rjrʞ8X]"r'|yܔƬ_x1~K$fn pED tG%m$}缓,Snnm_mHw|yzWqCw;no參銯j:-n§t']/mm,ѧC>]6,=({.g.Lݏz?fK`g7kW{Ń pYJ/1l+';NqH6F7XF?νR=|f ?;PǴȤRƝ '0c0[7ܝƿUd|ϊwAI'4v5F\zU yxpy G}:orECmw\AK y!VN߳xliNl۲4ChoPQVLXL2+PYa$o <B%7N/;kr2b>C-p%T  1z?ѱ6f':p'}>@WiAN_] `!yM y,pp7]TtZb]p@w\a7p1/G}k8&kɌK_/u{U|u]uny5{݆c{V}D׏? q>L708zxyAFG}ёk/}mݺBNѧzO,.;_{kj!G^rgȁ}B2 \aק>@M:NA8K]YzR;2]Z%AgDNxHdžEzގ9N, 2u/m$buݹa"o7w}Ļ/p/~'\Tt}}_.Ν9~=6:}wuK6y7, :##A[Ka,-&goƆ|lYR=\Sce2X XBB]$;$i|?t;jqa~dg7*AM۱sY76_KޚsthM;kn1`e F}42~C]W*EE5w*|kq( -.Qۭ/;f~ʓcdhL6=ÔI\R*sbc4JwSGs-ȬJb=91iѾL~0/`R;Wq{;@VC9NuC1'q;sV~k]N~@m"vh۟K wݙOćH\G<,qN=Jb A [IفƋG%6AS|at"9־9`t\4?KƒKFtJtr9wsg yXY:dJً]ʑ-z(Gbɬ7vs|Ƙg4Uu#u0}6 '1brs dM/a \*  B@@a.+FkKY;ڌn^柤;ܽ[˂py1i5mPj)l2ǡ?TJ*e? nfjۿ]n/Tb ƂJu_훡Zrr7bMp=@U KB9'%PΉ˝49S:83{SuՁV>_X,3fllL.++1 jrD<2{_[~Xm+WVC?1449 qgZ}U5^Kg6VpDA5fGd|߿Ϲ)z@ܞ=Sk+ >,]I"}ZE:]I'bWїȆy\IO9v!tm.:a ˡmon>ϽܟlXTu?U=Gzt7]<zƳ4o~<Ţ)С0y(G)qs.k۠rv$ ^8i~1},vL<1+-޹\GcB_ _Wu93ChW c%͎JTSOR}RAP=j~ifpt=;KР4( :qgK=yHZ: jmQTTtc2te%(V#ZL6C; ]+I/}Zgtu62\3fZa!8-i7IWӱǂ}b|"YcqNx,8}r,!'clLN. Cxs_v{{.su<+o>vynNP!~~ϺUxk ۹8Xw˯nl8CW?p95J T 6J1Kz> wy+ǶrCm2QxڴrS{l\":Skr:]kMC\ݾ6!p ;C]St8yxx~0q!(QNFF*C)kgrr,ˣُOmnifK]C:|NhFk}a*hA;զ]Oz%&rhm#`߿>Kق⚭;]M[HϠ}l/ٚ'ݻn{B~3 t,ځ\e} (ZuZCkёa=X8f {{t]~‡^.pׇw/)*ӞLw~_}}+wzSyayB .cb* lj]XC swvI\َ[0fǚy\Q\t  whk;_ily,f%O@+Nt|__=6-1YmE50V$JsPpOn=QUW$3W϶AΔA2S)Z$஻:^Vw\YǂWٱ`[x1E.Ё"vlhc FooǣW?)\ Kst] Gn+?˳{Eۺq؝r\[sސ}DӋ:qױ:GU]W=?,K|ktcye-WvG^Ć?է!=%#`Nc:;k-hzΫD?IT(XZ Z{br|!ON߀Y27؝v҉ ph!q+iueto~\TpQ2b [LBDש]W U' 6\U8г_s-g[4ξ1w 'J#N:.]p 6'a/`i/Z'"Mؕ/c^OpD2;3h}P>-|k",.S?|V I ;, :pk:=kޯ>Q_]Mx[Gزy۷=O,Wr}/M:ks.m~m1pJE{rmamPy;_rz B֖K6N= p\AĆz8vL3cvn[}3s7WYrzx|W'Ƌ::؉^ b<=zk$Уyr!*ܹoR2ЪRvQQ$X>fE0CeG}`S$mCYծuǦMz!Urm} CGɉj' C#C*24+UFysCn>=F IEfT(k@T.˙7ҏL0"=#kcN*[?e$~jpr`L@ s'iN:X,YbbygN(( k~7x : "}'^4W J0)R%wz. {-CQ{Ͷÿuuu~z:-+6Bߗ8 hi*<< w~_uݽ}p+̓AJUgLM޼o΍y֍+?C?ot,7akj1R5Vbd bo8b o֮H2 T-c͋=3nkrJnpWUu>-.̻=>U/7&׽'qzjL/)vT5{Ηe,븦xKpypJ)IYZʥF>k]+URzU.К_3͹뗎CXqR-<} m@FG}|&jg>r{ݻ W3nO/ԁ;T*JY1.쒣dr`1LJo1PR eX+'>eȸH̔?+dr eG\nB.#;Z0Drn.x_ĤTrUPz/|;zcC)7?b)¸";d9uK|(xQl0ae:ұ~r{N=E>XwQ;eFڱIGa=tUJCڡx+CZ,TX273:4-?NZ#7j(#Qyu+4X`?PR GLlT$l\+4 s9K^s.0(u%!k- qGq;Sܦǻ ےH!o7o0xbsv:7#08gn1/}s.؏^V; 9,,6ճ >LΌ~]2?xHo͋vSסA9+ܔ ɯHoro܎M7Qkxg/:8L\}A<%R @0Vf;bQɍs6y ?gl_U 'r۴arKS>W&4@,]\,*v Ϩɬx3@QyG}`m@ބ>R,e_wV>W\0Z_Y[k l1Bу]"d{ ņ|*{Q}Dާ $<?bcj<@JDr_([/|x}"&2a=ŀCсzy>B PxNYctWND{NӦ Piuɦ)Fk`QTxWO"F`x?q\Xx{[\2$Jv8aÃb)Տ]ھ}N'vc }Y6oLO75ny-ԃK:Ā2duLo^< lN[^d،7n[g}˹+U:./H|¾pC`X'v˕Xz3`d d TKbUvY_i^)3Ui-^<%al8ϔѷ+{iMݵu؛,vuerLLֵp' .&-ev/Y|>Zq>x k[yPwv]#K|泞8?+TEvY+o-L/ʥ ؓjX7Lb8T*l=CI%%Q>e孱s>CL<57%_\v>sU7wW乯Wm,?mx ?./42f޿αb;c)3DŽ1*uq~T6a$@D|wkPHb$g P^c /E OtŖglLr!7ֵطڧ|H3˃-.mcwH|mЃ74 S[1Q5 ˨YvZ68mW6#qIH9 dG.zT%bM6n*s}b*S{,| P}$^LfP#L~,`YFGG(_׍su"t###JB0C<2{_[oFH> }06GlCCC" q,wFMY(ieD)"= k5ͅ7EF 1I9 {LzɊhU>$W/eΔ>Ϙ Q~/ܕ*8b,,<a?ĀC-Vű\~҆-9DEqƟ7žOr:n1#H"y.mܖRDŽ /^a*NLirFqV.3(.xr)*6\v`e+'f辅M7$`1,=V׏lCPI͉ېѠRW;o!\Cyt$偗ImqʡuϾFGF^Kӭ~w}\Yǐj?62ι>MpjW2^ƩM,&.)Y`%y~|T3œ7wl{IO ZJ jmQT yCP.%$@#>Uxz̑|`wNlAh{pp@Ow=P)ZŮ7ՙ^[7URjF$]zJU^ ؤkUC\Gd KCyQy<.|$FJEz{(t %b"3I&b@1%(dr"T)WtX` xʼhPICfmE}]Dacⱒ'hPuKɂ\IcŰ#1 bl,Afyǹ$ݲa=[UCOB7 s(ffAb׫s@y-[dlz)=0ի X|/06mhșXHv_f+>fs >ĎAJAI4 q&});쳔]bkIQ&K5V *ei'ZW,N:Wp_oŕhUmKvkWaVg Y+1Ck^6~r7W%NUQ:p!tV==(DTIy9Ǩ.bdgZ8gkjrN9r9c1Q] W-bn%G00[n?KcIFI.ކN| ,@T?ڲUփHl9>0 2$>t~*GE<X1)?p@y NySX Q_SR3am3yiFj9y`_ ֒=cþ^jVZ継K1)~޷@/_8JCCr:D9 F vl*R!A2)tŎ~Uk~O{vcO$;lJjh}6{[ϱ y "I7; 'd&zo7:t^u9qc07IBeb۹g>nMIr.q߾^Yqvs(S>/-l֞1 K"t95=PǜXoy5Xg,|7vw2%FLbTuL` ݌@@lTM"F&"c_9M]Gʼaܜ8sr Dv?y=bJPƄ>u8pO ˦6o "z3DAmaÏrytlX(s_8xj636P,s(/캡!%bs'9W1Ow4z3󂦻o^~|W׹7;/U/O$h@.,gc0τLct^Vг|Ѡ9І"z*jm^GJ-m9:8 = U/࿷_R^w[dް}1A1G-Fde2gnʾ(9f0 X͹e۶siO.vdǎX.t.[ٶ+hCFZ9e6f'[?yw'~}jU~Tgg˿&` 5bw5D"N|@HXduW0Vzx/r>0xJU|=8E2"2Ў> #m /q~?3 t+N?EYЈ"dm'v5*~悏l6@%f.N-EmXL h[+ϓ{݁oÕhyYn v#p1[ܦ;hc |T<zu"@Mn?1^lgrNA>Sq$I!4WX.c9J<0mAE9'%c]||KݮKطe8@!=|[~%p^|`S^mc1'h5ꌬؕ}:nRci+ AӴ(*'|~[RʑYuQ Y;ҋեwM,@o7TxN!Fƒ8*۷\{;sm@_:beP46ცjxl,>p q7xøyXd>`SI 9oMuq 9GJ&'vt"Gq\ 2eM \,aP8 *`9̴qsI=?'U/5fgGVO<?E }pnnf~>}R)y_gR}#5|[9;<z65 7>~wMF攝P{` +ꃾ˯-()]㱉g7o-hwv6ڴc*ӥ=Ap`g }@k2f>ĩ vcGF-Ƈi><<6liaN?ODiG?:J&^w{i?KuOO7{HruJeF:/~-b܆g`n:-B6ѓO7Ӿ29-3Aތ t?~~X0㳸Mr]B8^\k_]s .ңy52c1>@ axAއx>ZlUuzX.HE9XU~:鸍{w"hѽ6hN߽OGo i|"'<ߍmܞ0"嘇<]W@pWmZ7{SXS]͝?s}N`#+(a@c1#'\kU|8a<ØAc兽GB㞙|E,h4j^ӢXE:$>NW.q[=lhx("i -̇cQ+}4]~{$Yhw"XpcA Yڼ  rvm<4 pӺ?*:g 9>:s.K^:uGzm`9;_$V sYQQ.}2Wee1޴~3 bh{aOVu&O]s/ykݮmIkU]q'ܝ焎A&VG2Xa^GǴuΙoX)ˏ!9w;tZR1P ֛7T߆]?6dvK0:B?[EDU5KyK}hsm(BA%)G,C7"{hcZ$Opbfx"/O/[rEV o9]΍@ӒիΫ{/z5t kb}}G1îX}(@j'F@B0'\;3r*.W(Xc2:R,-} @NnGFnz'#P9(jSuLw: ^Jlݽ4^JV k M{~T[j6=p)7BMr[=|bj~}@^#83>o/tn+bעǕqm⊃2 t7n[Q=BE ݪދ+o< WiQ~әubX'H,;;hqZ½E6rm6rpg}ﺈ^/ͿiAW||#y]v㦮R nSqs`ߞGc>v9w_QzdQ8!6>M-kbtAK◼sR1ȎV.ݝ?7wH|/[ou]gV+;Gk(#1>@/ Ea8XW8x:Δ !x?ݮ{66z{-GGiq~~E6`Rwrmx;d(-cG@Fw/~7zEWwA|[q_u#1A/q}n9nk[QV_$unY6ig 7jѓnzj8Xxc[ֱNܒNꡞ7ݵO@IDATJuɂ> Xs\!X.mU65'ҿ{4p,{w/Se㽟#rQݱw=n~y>{2}gy(6ڭ z+s9"G󀟶X^ƶAӶb] /8iMjKu7|mܱvt }EH:@Sko>|n} ? !w(b3˸3\/fdcڹ$UNP O5uͿ.Rb%:#jP @ P&ꇚ1w]`A$E*O/ *rt7A'K.y{k"[>=W7'NFv;YVNXP'6y=*C[>3qvR74r.s-pnCY>/|_tg0s͵d\7 NlM\l`!1^^xKJ6+/gr_j L̫jv߭ =ym_aa0֑Wak^g+{ ګe6ny` N0:*<ص+ m)VBmkw#wL;pX;ή%tr}r:&8 q&|Ldon d?*DsFe>6"O]l߅ΒcsB??Joz#9#x7{k>ZM /sw~aڷ|ʞ"y'?5u#v{O>jFa7"' beQrկ[zr>\E_7cHnON9Dbcˑr}'W'٬ڽ4cGq=s=qX]bMn*6VRlJ'aA6y5ֳ]8pq }1mpN9Y Q7 m+[ ~`եvJ_"j_Uq]r;SwVMA7m+ϵna+غ/8ݷp]wu[ouv\Lϴxm|`~{;_.!bP )6Vjp2NͥJ_ [s&gIE.fC]./}}=WS_u*U:NkA;ķcӍGS+d|D>`@`:YTr6/8B.Rw|ݻwO*d1?<ۀO9w׬e>?ǹ+?Kzq\4RL!vUᶟ2biw}kg>OEw^ Km8dR1~Qx)< uGbd*wDLVLü0sȝtlVovWu .!O|Z4.f1% idi#YEğ0vKrnudKEx 9ԡGA⦥x@Stg2X{nUrbfmqM+ Fw~m`arL+Xڔ[1QW}0Y?偂ˣ$WP,{~}--Ƀ[-.AEmm8ג`|WEAѭ,U\m'jу:XŕMTr3M1CCJo#0!]Xq~Yyz=ŵ#OqNsnZV3>7"ϻ/q/~3]!w-\n+PѴ(?ȤY(u z.]ece8?}Oe 5\5؄x``н5'Pޏ uNgbW!ʑO9VG::[]l`"~Zy}6`s6VZ'%nou3*KXɗCr JZS}E&*9] RYnk*Ӭ6Tm2tor6 ѥ"g ]jdc߉ʅXZۥ%vasw+`3\sF4:*b(FvӨO! |Ob %lxC^kF9"%+-_srUsz}M Wf,-QX^ЃZuKrDj8(*N*堅N[P@_1B=0ʠ0}X#t|"xcՁ Ex^}G y{싟dW SZ wᾇ蒼C)l>ɡ|19zgh*OzY^yb=r,XzfıS62r4/!'wόbM?i L?r6H*r/Tgm⚶Grj=+]@~ƺ"DzW`5Օ:R.4e*G%r;S Z}W ʑEܟet7:7<^;$_ i[ĨLЙmb[wMk R0$GTKΔA)<U#[{n |AԎXMV$"X?#c&c"eMy~| ͍*&AƳ:w2CБW|ݪX&URԃ8`}r na|W \*]F*V̓8=rK PY ЃV'.CJJ9`B.ԅn ?44sH̩2#ͺߺ?Z'{NsۧIRZ zSxGg%3 ;Mzygv5{2wC~Rn3J3[~֮]#K1B}#zlku:tQInEn/\^d;t69:5a}Йf|s\ц9Ox!$=CCn6DX)G3&v1`v\, vTf}"LWr1JQCoOs5U:?[8KaLL3Hˬ߀UV:}Ɇxlj45#y')'?G f`uN@񯡁I.n"PG w+m>˄xKcj /w7_krD\)g?Oа!ox[ݏ^q=$eؿQkz#-b}m ƅNQ.ND-ıArbQGcкy?xMoF7cJ'c2ưԮ#z)w"I\C]M,OuY-RN5[c.Zǂ:hx( \eWNηnLKNVbW:,5^s#Gw5n@e9mddoqe@G׍hD>{ٕ*@۶oƗ@eP.ա:K_Z9X3Qї~Uqk_ca!r?Se,24imkLYn'Ʌ?(` Ui W6?PimuR1Nu@#mO?2Vɫm+Xo;|pӾ/?m|\d$E zi~8dR)(u krЁ;wuֲgv]`/nMc?y{O\&&uY^}l:FR\5<Ht&i Ɨ: u' vܩ' >r&r/ry3qbJ5x0.Ҵc[A#1Gt=T*7i/J֯&n;6hQ-\YWaxiRwr&Mmfv3j=qou '+cJ3g: tLѱ>pmrCo7Ҧk͏f?;SmP<\FDs^Pk1 SN4 8 3Fl)6RSC<:I,C[5ͽJ8B$0*Nʋ R_!Ʋ{e\;>A׎Db!E\?S9SVKuLqƚxQy>F6( Am>;!BÈ 44}F]I,Sz-.J ŖOy<k+ٞ+Q $ z1ۛ6Dm ,?PH)p̉(xt?L^ɾ^~}W4fV d|Sq洶G9,I brn9bS'͌hB~28 RK꼒KxoWi''\Vgq2 'm ޟLFVGNe[&&'=fsf'0j鬝OKŧ1n.nΪZ>\+yf;*d@kvXnMlI6AM¦v\XpqR9`2fyl gRnWIJ@V>I ,Mn&yI,8@Q x<RJ:?a@`U(|m`^ JBDc6-#!W{_7S1|L}<6VzI\P'䆢v1Xp0l4g[lޝG[ Y=Dqa<޴-lږo8۫ŲAphr:p89Xl>'P07~ٝ<1uU{OGO俺{"~Jd Bsc2IZ )&ӌ-61>p6gW RlBctIA`K(l!tRqVVam+-?*ϐؾ 7}@3wz9?9S^W'J_rOn03Sk9nUP(ϟGNǗG7HlpQ]֞޹q?Eٶ_ձm?R_b,oX8 u5L3€H aV`?b )}5d1OێQi q%,GEz߇&/9A)zP:+t$XBޏWDžEhN?8-TPìHe۶w*聯8=yx6VjG~anס<w]o }XEuVXQ|h{zbcS|DAX@M(&<ﵯyUGwLtzq@/j(nUg&1Zc!\\A-_o%w/etώp BV]:Nʚg"Hcd(ı]鴟X$>Hr-S%:ʁ t,:Z?XM;LС!%`:or!ʹG%lL9 & QdBE%j&]'3ɛ;ο8UmyOqgv_#ٿ+h;•n-DbW.aal/ } Ɔ8'?x(X4|NVcv,(~P?+Wݭ.#H2Tt8ѐr) )+:Q)>N8?{l#>8%|xxSomx9<6#\u%=a,\kC_pUKɛ3S:CF@t׿vQ m-m=>MR/26: 6:Nm ŧ8E6em46q:f,lhr놏iNYH5Oϩ&r8i @•p)׉:P RBL/T%] p|Trz^b .)E M;q Pb;J+١UE? 9QUJmA6S]Mg_p۶}m䖗t6*VFuOh[ v胎?SYC^ ) q-]/X6fVr}B~C3rIC R8V~0~S1=Q|_v D>H%JzuS0\}.N˓(Qkb\)JoTzRVWr1jMAU=PWIeclvSI ͷn7(F/+O4SN훉HxӼcpid1)x2՞b  #!Ls 6 )A-H}Nsq4FM}|< mfN__KUu&jTRG* z'҉@aGr:X)N$%C[5G]_ng'{ͭ};z_\K{0)~^~f[|DTq~`9A˯ SpTW -l!r6\֦~T.q[.8I^]K B&gL}N[FƢ?gYԠ'Sk5?ipիF&B۷oOEUy]*W9aq. ;uIK_E;m:*xH[21qcx,PgȅVV'X'r3HNSR+k~I!g'i<9NSciV̒zk/5<>)7~+:> +KU:! q}TYʋz/6} >Nd>&ibfG %ucLIeXӧ|ȕ󥎘L [l\{dYn~2{c;笹zú=,f{v6"=AB.mc^ ZC] `yR,-?7~?_G?ظ%>0e(/!?4xʵvy3q˜64_|ʞ= цe,տcǎ.%t)Y;L;{ʷe͙5É jzhtobbT;sElG/5΢vX:d+K#e` # \["F:O/+JliFNZ|jHM e0vZG6RQB :(#L8=d֯W+Tvr7G;?P#Kcp:P_bu:8J:8m'9;Ѣ)mgVꭏЄHPVbZsH|l֏oK?hO?^/|)m5Jx+t)8+K nir{k;{v<ſZa|AΌ:.`ReKv']79`#O>[Km|(0lz3B.m Ұ9(W56尶L۫12!.mN޻<`亲?,:(G#VgMylkWV;ƒr֪:Sxy&/Yo@n@yD;jFkHcm84KM|Zd|M(ZxD8Q\8ĀSGYm&R VO4dFD{"cd|Ӕ;a\KaVMkMth@c9R9_bh2U'b֦9=|(.M`*ŒB9i8(A?6ObBb'e36(lN^[F)wCtcww/ ذu1r>lt8?uع|TH46 kكKvѱ.q ?r bP0~srY>! 9amb1R 93R?|lb-Ì'$R̴$kP:AEq>{kC0v|&;dc_}xnj'.iK9R O7>MxvDq: Oڝ1՞p3a}^Kw>9Cl=K@pRg6yi؂"_j&o]N[._ґ+{FY9DG]Z36X%]9Ә)boʩ !QmXHm7/BpJ1\ȥ:uV6IJ:U;0hH X}"@^aL|IC&v5!& ASADAe*001˧mY똇?dp s3ry]n[ox ֿ\nN>z߶IWt?vͩ.HeM G6뷓|C=knzcuh':%Mu*/R/ Uɝ,wِƛo@?7S$#0&3X ve#RDVLÚ\Zb'/CUK֥8fʼnt>[ u-kgc#=b4߬!MT&!񌭁n YIKnbOTߓ7`l@)zlt8KvuѴrZrdTgU`ֱe^*t?ĈNF֖ض 6m}1C|K GmX>eHm|b?LYms$iWIO'Kʞ? z,XL&W¹*%}K?{eqb6+ t" n#Ѡ>,P؈)K&WyG>?sDW,Ox_p sU7wP9 j?LQg[?c±=/ʜb[q[ZsK+`ȫNm;v^plø̻'rotM?W?μ)m-R cŦXD|VGa4 q ci#3tgо}Əٶƒ{>O:W\>RqhP!|q2O!<҆t:`sHg`Q,j8@ %)N|tUadh'>D9dxj}o'p2HR"xA'urְδZ ?3GeB-N.m&K2y'K 5/Og1Q^& sdW: }@[_ZG}_ Ý+\pG5Kֶ/q/zg]<=^$m#!٨Kp GE+#zTW%9jG:bn;so9ظrݗ]}.AM ̱gd]7f8uu#:Ŵ7IuG~Ijk%v柋oD 1*A!Ŏ+% svkWSZgS mrs2ulSmNJ7>7Vᦌ&r? *oYXtIfdFcpcƎ[wARk;a=d٦ .lӦ:Y`-E:{7gFC`)XPPou_tmxƟ`|L<9'wioHFG)ntlmmΑqYIʸ!y`ȈNJ0L9emX ^uˇp%sssx׿.#𩿺='~ލMXI?Ĺ;K,[[ܾm=/toZ@_G]V)\)1snmr Wۧܳ^Fc>ZNnj{4^}d#ď6Q씏QƊm,PD0/mEu"%8<Z>!lc͒˝1a=5ݶ=qR"0L\:Vʷo0  $HlۖJ_\p?:1Zҵl>{ٕ*@#Gk;hl : 7:]'_J H;kr]e/K<('RڙR`䢍rG_Osr_˗qІUCpX-xw~nV&sꇳۋr;% bDŽ5x; <Ϳhq}/y^.7aKe ̘E+DJE EYҎl]c+m+&N2kq 9IuIu':%06?rc;>{÷ߘ, :p׬\&WΚ7R :l?dZ)nȽ뷪hSȑn7 갻k:JKێ֊ۜ&}k)HKmY[^cYT'k6pMvE mY_慭Ա6F9ǫ.6W*ℼ2\9?pLQsBMԱ8: :F-kbI{.;eC'd=68V==>&1xLLq8f`].&ť 5&ϘlI@17&j8x0!GDmT,bJg#,o?>̃O^Gܑ|̍l~9c;o}_Ǐt=YnzAwV,d_YV~kb;"K1#w]{o?ےVc x\TwmoE v;u]>ujm |պq|E`i邭N?2 )f:Y%U)IJ.{WO{ NWΊK8$\+>)woA~ԣ,ԩ/@@yLrn6RЏ1lPǺoZ M`p7v\x;PD:-Lu_"-jg6/}P8M$W[[;v[̌).힗޸xEGU'O'IGot')?xq>7+R.x96 (\OdenPgrהޯɩq=c= Oq̈N1Ym֜LΟƄ8sރBMy>u:[Xp1xdtK{{ȓ^:6*gG6 h &Fg9-mL1F_':U'~y`Z?jL 9 yduդ{l`{uZx+ϼ=m3w;|{67t?'֍Sz;xE+l `J;kp.%ȗFlw(78֫ȃ_a|q࿚>1@zQ:Xke] >o ܑr % IelEmIQ YlMǼ"TupOto Y[fo6Tm{eoL-+ "t [Ӓt)0XEUtzAUmVoیц>`_rY喻JnsLO ݅Ewm[便o.o~m[or&[P9:~4lFx9j<|R#r9&ƣr?q6&՘$`ҍBvTK4Q4r;C[ 'lN6:[ ^Vx?x?~t~o;Ufuc_Vΰ/n%~'?^٥~^~~l  E3Nc?i1)|;>E 06&ӷ Pч|m;={wAv~un}e0NǖdVy3C=g1@Rr+pYQq"]3RLfǓNl¾۬+ub@0ۋfX-tw@.x@Qskd?$dj'tx¶S dtW:t '`bZ&~u?(pac܌2Z_Zޜ\Uu]nroI|ڦ\ƞBO ɫLv#<& =ۘ\ 6j̶$+/ D'MmbADn!WV-z#>tc~d~ N8k+m)OTuU~}COmŷA 9Dpf2 [qjB\<TGkŀ¡wg;1gύ7~ףٸ<<{AӤ E$Qd"IJll9[5 L_& ;"Q~ysM C.+o7e]Vf)?'y2V/ Bj-gݲtTn؍O޻f+،ۀmy. ?@IDATQ>9{;y:iV2-}mak+ܜ?n=wQd~vlٳ {qWMxs1 {VWX_ZUPt>Ƚeoz#8~|ź>߹/||[=-7m[>7̕˩W}9{NאI~cuAgrK-h D]6 _V{'N7+{ @bW>K.&z(R C+0[!,7nZue[{`~( j_'_X&h ؟{ƨ. ѣq0# -R Noq///|-k59U:xRߝ^:VP'1=?oLo~_s~cV0kH;DW/F 779. A\CQcDp_ⅣV,8G8om,)_>iÉ+w);*\}GR6*MD >Plt\Σލ<(ѻQ*h:-aM6},t#ALVqofS4?|F F¬vM>j@V-ynx/Mv<:عx4D`bCA, :,O$O @P Ŋ^ۢ TW(*VG,eVÃW<تp34po3N?rWmM翺~~䲶 >z}d[ާ_S?W>2}z[}cbj-#|:ar`uF3P/u& gu({KR;~_Uz8p_UŢzNkIyYmokڤmsHr:S, 6۬sl YOڶ5i׺8|/].>-yOsyS=O~SVqCПzw}}}Y t7۬6(qяX/Mwξg2|CG\(+F;N*>\' `#Ť|jN?eAGJ.ЖY9|rU_ؾ*͉8Bn֪̑?#610>E3|"]6- pDN>k*OfSk6*bk3^Qcdgx-mLvڧ̯nnKʳ8kE>owgNEk}؀ak[<ăm= Aܘ@76m}\ě(R)Rs99aM,(bҗ17<4y1ӟ*yɶ%/2.?Oʪ\]Z@{P,LV+@](^r+W]I\m2(oѐc Cz8x1<,o/6a6% ܆\~Ox>wbF'Ծ33ݤiCƎk-.5i++p@g.~ҚધEW~?LҶ XEuau6*(ġFa`5PS6&6=U׿|X\M?kYYfyosedpE>8aEƌ1KLښr1!8r:6y1w6UyNcmՙjQ'4涍9p4c38c!*\ m+Ζ*IK>m w`}Vs7k9۷qxf;9~x^=F'+w8İXG TG@vZCp] Ei :|BC| 5D-' mRӎZsX]TglQLj.N1e|$˶52,?΂>mǗ,勜[!F֒ZOxJQy|0S23".`i^!"$Exxr& Hq¿Ť_g2_g -p J XR,EXHc?ihWXs-O6! X I1yzۗ}sW{_8]'g% Wt;_߲4&:B)(K1Eܥ۳[ů|}C=aQ9?H;v5\ۍ_3AJdg/g+ &NDQ_P XO]MlMZ(̛awytfnxtB-#+:0Ƌp0%=7RG gʡ n6N8ӏՑ6~c'&_޴[ٟ9JvzhvXJ~ߤ;am7Q]戋| J3ďmEV*I[ʣ&9|<21(\It r^D}K\ X߀;`i Tǯ*$ O/g)[ETr Di?`4S`..%:jxեF7V%E\Ky[9P,"QinX4cDE_ Ċb1x8q@?f* -UboYHg1İ~&cvl\S*2Bddt5YVV>k%ݎewl$馃u)5WD$c t6'w\.n72]7i2F?+3cqj ,xc'a6i !h촩2ҫ  dxhU1(B\b6k`,gEugc;> v7|Kh[ԙmqʡYp~D*` \%ؚ5Jzbzc7٨qtħbiW%i6RK[ZMȶa c݋. ʍ`5vxh 'vPFj  s# /c` M^BJay8m|TJWԲ_rdm W)J)#Ym{(fxeYH&~W7Cp10GJF܂9F<W )9¢K X 'b;[D/ڠ $E7m'h$ġ~MwO΋ܟԡn~ /xݿ턫v%KE %D5cA_Ӈ5HFSr386s6q"!3` 2} ֻjEǣJ΍I"xKxP$Z(Z{DžĂ!`S |>4Gx|0T1exxj )C!/DIͥn#B@6I|hv}Q.bPkwH\gWYnrz?y9zGX\vBC W:#<:1!B#ǝ]ͷ7wvOxK?)&:?Q67+#Ԑ[Uz),l^sdRv .fu_uXcZ`3\n'Lell:tU \QEnx.F. ~sXVgۖ*lΌ- zn6';}rqLeC}8QWiX;7>mkE;ifdw:eHC,g/+rΠ]lv-Fv|L: 4@;kГ'/\.y |!/k Z.6v\ W ?PBB𷳧r v{SV_lhcq6J_ TX^ PթOf>م\A.ʧB%dC[æf, uW.-wvOkFGG3ל챻7Z+UJXw~}G:ء@F ) 58=&YJT,=K 18vbsŃsikZ߿)m\0(on+5:u>S\Ħ2uu7>u|wKV9t!0Gxh7M(+/mB&Mhv&;[0QDٶ;}]J:KefÅ/ِ4{б:&^dNpSj39x8P5ݔ+??4ǧd c|B_^c`TUí4^"~˃Š^ϊbNzWp遁N-k~9_0^L Fl`E 1GǏ4RFuiOX/;9sN~ouwx}ض]RHQ\ь|ucF6L?~8Qrݏ];=!_]'~a|JH},AW>8 .ҡO6Աau%x8Y X 1A{Лu6t v@0~QhW E?)ڼKS cuKÄͶerE?r[&t֧2~Yt^/^ڮmJjۦ :P.ݾ \P$j:#[?&O@mQ'>󿻽޳5~ qF gClWR>uc6~R)!6doXWm4 8)YΠkdHǘ&ϒ3Ԅ(4&NYطr-?G~hhҞ]'kwӎoΌa6H8p`?ydžsc0d }/WZfd6ӍXZB_h̑6wFrqLo:Y[ƶ]!KtNN5'oS4eeȘm7qɒSR흩UEL6Y*{ob2᫟ Lčr}{/L:98b!K!^ېѐZ6ibRc0_~öO[R:5-T)Oѝu-i+GK??^&~uFnk^V% $ d{Oܥ7ʃ~+mﴳO?WtPWxh+u}Oy8I'*;~t&<;09G{CqRc9)$Us0g&F3Be0enp~lS]SۭX^"ܒ _2jͷ˜ukO]7uSoK7<+۶eҗ0w^us+r@±YB4M{wM۝|q.CKzζ>lX~Q_y"(EѦ8Ā/fmT׆7 s :K]!JO倩>e3|>ٔJZ4~*}EL)w*X/(YhZ9A"*  RWӎڻBЛ%c&B.g0!b _,.`L!K9na\ټOI?k/׼v-aHzmE:P``qzJ1l+n7d_ g @wώGqKG7w12tu ~|3jBJbJ\ Iy)<4Gr&[*7cui.Ă %~q܂ѡI_dI:T! :ثmlcY0>?ج=Ϗ&R` ~ĘZklG6b vF}cWxCFƚO܃w)̶nXԁGg#+W_|놏w_UOȃ`fr:6%>c ߫r`Nmߎdb )/@RmBKJ0Z<|!5DbQk(I,H\ZNvH}`O8qN;cC75Q?q&WvY]Yxj_8 ]WIE`kC9nrNJ]wנCJ7@ȑn޽qT}y`ݜ7#4o hDoO-t ;bًٶ;]q=VT钟_(7Ă䱎lTڜS.-AF!S硍ny5uC&cRnr AʕU:-?U}$ TUӘvɳ>&6XHI 6/7t4MKē+c!v9b?| .#כH)B|R)CPa*DCYBTΚggsǤ]<[ 7/výv&C" }Э}޸M)Q T6ip[mmU5&gM{F  r{]7QcqB_q.drIhmFcEuUe@v}hW$4 D؈~ԆhF^lv,wOMQ=Ҭ[]8&NvA |H~o+^ƭݻKbÐ{t*$=iCF\?nc(MTI{ :mAݐh ؠbߠ bp`b:?b ~{+v\X 'cn$ԭ#\iqAK&zhC֜_fL/+ؠKlm1V]P'mgu cx3qbn (+5q8/!7! Ņ9~뫮53_M!ҪLgF_tF1V9Iŧ66rɿF4N^/4/ڹu. :Mu| OQ cx`ג惾 !_*Y4-H_m5!yz+Sx8r515#'#LOS9:~R=ei fՔ$+FĞtq䖤۷Gt'?0*~<75F3piG`mw?>I r~'mc!JՎ"gd9NKN j|P 63vCj8,{_(QU[|߽o~//s!d`@0!"B ̈qI%dPd"bez󝧿>wUs^n{kk]uE,ix0.kMIa9O6ijg; )t9} V1xBKRҷMӎ4 "nNC!6̤ܬ\947 ) 7&ޠR(s9G*[>ijk{{܏/?0Aᅞ.t77<6Wm<~oJ?_=H)G5 Huxq  oi`"_gcUHYrݽWtDe )V4~<ri6yxr\lr'c Nt;p-+WmvN%PY*"-OILԒE{K9ڱ_<}8[s@ 7 4^6'iG}cB90Y)dyj)3CenFVOg+l5=슝˙kϊ>;s3SͳՔqzʟ^\wQ\O7VOAKN mq5kncD9[njnٺUl,gN!u5wQF#Tg@<,xs yly07M?{/LAsjnxUF1͝}W5 |/C.|;±<6uQ lTcp\vYYwlz,q׾ H>Z;q؆UN;XoS1vAYTcQU G)aNuD]C|#i(ՌG b 4@ r~OtN:jWj:|I_P0.@ç$Bgy׽ctS.rN9Z4&plȗǃwڙ{o]tjr)S__oX=lH"{!`iWo26La[o.Ox vIpEAGT2\Q mAC3AGE@RW1>"lWe 9|p XPN>}锸>k#A˽^,ejNz6d{N.G0LebI\jNy˪X/F۴ ʄrL{r oY=2v}2 Ǥ{Pt(^L{@m#~}*cxkQ|>8>Cu?N I cRؘ{;ܕZc/]sܹ?Tc97:wKpO\g˖U~{񻿢W:9ETm*2lyj?Ǝ92}sXy?"~;>~ @a V'6IJ.1 =/q1&8-D`̴/>ݦN0̧g9i]Q9Bd픋BZL H(Lw`ˎG/|o1oY #! "Lڰ?ua!Fl^b6ݖkV.xkNaNR0mt̎C4)B)O7~i}!6G).Sf4E1Za",31`s}%K!*WraVk CܢήjcǎPgVY[,F6[^(V4GQ[n($?m{dPElOΦ}eB]Lm(i[]lv\gw 7S&ʁITNI`RNI9LVOgV l!evVdՇgg Cj5y^]CCnH>k}иg1 qL1Y&~‹KB Z=$cM!A'b%pdoњaDK;0WV`s$:ܽ}/}E;t~ǿ liK3}sZ[:lvyѫ>e7}w#GaJ'08 Ad/J:[o^ۼxw%2ߝv5=φvPn@xGNU2-(ItS2zx1X\'c9гX~ Fj3FhFiڧg3cm-W컸W |?`цxNR|:?jmJjt^&~#2k€;8S\>>%Z!8Ãr;M7vޭE&}}2U^jlNW8m3@0(oq9uC. ,&у2&2і"k2ad_.$8;EdLQ/CQ?ggU"*춘У_(LsAFYz85KwA#efw;?^H3w>v缫o瞑݁n˞QΌ{i$"Y̿"a0# sۂr8k(‘?_,Ƚbyɂ2J/Ѡ:oZR;_K˶Ud;t2.Io^9w3$IJt dDK8}S#H_] A+]XdVoTj{ %0)2|u-V@馑XW.*@w ŲsZْ[0fI/78LUܖܨ-{n1-9HE cwFo]u[nqrʷBVwr=YrFG#npHy.ƙ>y6HCK[>19_-6LQd"˾a;b1AW=}?yLriӘtG`FϼwsiE\pg?Ȗ_vM90̩/ps׾߾麯 /8e~o\pLOr_S^3c/ZII^pTCo}}pG߽?;~ߙ|{cG V;0Ht[ɬkIrGcmțy\A'BYkD:$ٜTs-g&FW ؇"(e RTnH) {۬V`q^oTWx\ <)2׊o>36vE PVP| pe#XG-İ;t`f_fj+{LBHߪWTDyOx|UTλr{nݣc/:< eMn㦍3Ѝ _jBW[ܣ.o_*vVwKb69m;3܍hYݫ=ɯp;O>Wy\'$a;C|X[6pʿzśL:<幯}~H B[2>p$VRǪ<]WG9|#%3dA-:EPJMJMlBJ8 :Ň@SK!bF:k -^m|v^dt]ѩsNint8Am {~ Qd/ғw]v۶m[inw{ߖo<')-&[w?|=bpcMw.rĸܛ/ s|y6*w===#̸9E ~97~<oȏ?-.؃J7]*@b*cVrc>)uo>4Z.Ku=ݦch7wߪMؽ ^/lKlR)l_$'2kЖ[g9࿸GzUg?w-;g{^@懩lpX15DWlA$ZL(._amqYZx|~ >J9҉XQ}8+^ g`B|H 㙉2 uˑv!ԼaA/_ "DB=n #p_zcη`{nYnO p[݃ͯ|nYC7># ]aC4RcAUѠny\O332|&)0gMKUᇎtK2怴۹0yfXR< t۟=t>^VXgf&P hۖMz`Cq@o)FgĦ8F-WA`n X'O~z=Cz5U}."(Ci4$dbF~vС+!fgŇYicW>.ڋRm[LY@BB]L.<dr@.JdtG`5Gi;~+o|ܝ׹'_0S&f7.!g.wg!`(`~N G`gp A s 1G~ SX٧#g#,㙙­bĜc<' !6 cenlb %CZgXȫ| b1?Bׅ(x`#~CL ݗu?|-~W=IY*cOw>|x۷!np[Őujٱu=YOG5n} j +zڨE(u#;G|r_SE?Gȃg?Qcaڑ cmɘH?8|:In6?"_;5Ԕ#4i <ANX,".iGyZ{G:ˏE[?IψV.6`lŊM][qщ9"X\FI2N塃}LA۪O2p†L^~iUb EAPp/M>a*{A ^foaxpf2y2a2 y">P9Z 5Ym‡dQ_+#7;Ddhxf};{yqV$߿/c|t1]8w6 bvqBw?@O|LZNv_s|9nYy{ЦcsjXz]N򼞷-ŭ9?~[46~ F&FT>(5e;&OD& g}~.W( @6)y~8p`>Dykk.w'ouab~ , sU Yʶԥ,U'vNR|:?أ}hps;W"c,r n(ֽwV8tn[‪#)ʞ9m_Tg618HǸކ1C/V\^ ˳_8IB[t rܔL\  -g3Ey6,<\!cz\ ZMX O5pb@~r-JfLymW'>aNܓ&H}ϭep!w^>{oK,5s_/y96=<&6LJRm;U9v6Y,r4AO;^Dhݶ!trп+'NLp&G}W^ 6w 1D9jPLprzTĩyyYX?rm$:+mhC/؎cԇ嫇^=/.9r Ŏd8l(+ɵ z]tpvHbX 7K̼NU{gVb?|`06Dp0edQ'\=HA "{Л@mjY5 ] 3LB~M փG\ %IEΐ#g1(s`1&/´&1 XƠcǒ`ᢍ2n+&h!¨qD]ŅOlť#؅Dc $QƒgE5Y|[2t(m7jHQQ%,<ݨvFt9jܖ!(*bDL`{3݉Ng/}="}3Gr۸Lj鸳Yd]@_ s8=Z׷v.d6^r୦zCM3ܪ"=_r;t;݅/z{O*ǀڰɟųj灝Y.p7-JnӇuN 4򨿴OXnБȈa:wo>%!.r?.%pE;<.K(;wW X>.O%_ゑ jLy:4(hSVEnG|uhΘbhKk⠷k-gdjrh4Ş_K&j (ff9~WNZ8[b}V A8\-*q VSC*(J_r|SR YM^ĩ/I t >(XTF:Ħ_&7kEJI;ly"KJfQm₃\`X8@~ lWȍ ޚBa%Qd- C{O\ 8Hb_`"D""\WAȢYSQRa!  mUr j^Y j߻s>y> $p=' otl/ϦDqgYn 纁 ۢnr)MC`v=ݍ5u-K_koeÂ\tG]τ%F9ҶN>q_jYl 4u؞{ sws~=qCt[ц>[ HZl-+)G$6I.*& (?c<>g,'OUUy`6f ^g#YWV+rX).[[ۃr\?<([@9R8~FzT O.ր3QfD>i6<Sl,Y#Rضr=o9X9ܴicW.OTiQd/3;㇗|r0!74| :% u*V`Of,,Ho$A>h=8Г=M k٥'<7ŏ >V0Zu\9 8|sݦ=_'\Z<$u[}_^ߑKd+u=o.7V;x;y\sĤw&}>~oe/뾍Ӊ_ksa(V'xRv"5ԔY[sv\~pE}#5Q]AzEe/EO8vXiLIq2[Vj>YbN258z]z꩛7YY0sWrWV0rllXv1DŽeg܁ɵlOݼkQ#ʑUr`q7ϘU<ڠEl*+aDv CuIbC^%-ɼ,v"6R1u"ZgLkxԖ2S$۠R "RR.u|:XGOYF1$qZ|r0:z'_>LH_^ep$H#v͆v':qnmnnn`tGɩc"2~r- ʽhv7:?d;؎s؀G|nuwGԗ˃ }J= b/Sc-6K#bgl(oHB Է"qv ܞ~]9c9Z<[^qɵ G[~+Xo<", GހG~-ږw 2q?&狯0C2'7VhI v xvy*܎![VgL9 lٲ E_VۖCGeʣ:\*؃jڃ,#d!29T緈9˧#`) +F!X!/:#D=kPSR!y%C^mTcw͏7@䕪Kr".זMQ^'\\h @!6lmrc^ L KR,x"-:Q|.SNcU֛|l|Q`aGn 1qR]kGxr3qAIsK<ӞXy}copӓt{c/vir۾Dc>޷vDavw/8~lxA-I)ԱVZͷՖq:E:0cI kgn6k%pү%wzgcFJCf*q+|)ֶmk=K{_o8b)KU~)yoOAnNnde=[,m[͌Rgkʖ/O{Xsk=Xl5qha1?~e9t1wK^?p_=7kU!wJ߲TwK)%[PX] <[ޠ'3 \+7g7q_E釄=/-y&Q|:ImNa'UJ rpθetʦQgOit۪_ '%z1:: 7U{::oצ;ܺL=v*vv#### =v*k kC~[>/".*|/fGK%m126~Usygep@͔/RBL9p*!x 'mؐ}lRC[/0[B  m+G ]m}d6%P< r?`-.䢼8"=mNJW>=y Q p?4"i R)W0Dh1񀟐K~PRFG'=3pzA.=tߎg^|rEJi$soF|A'A$qdHXi,&&b99YVF v˵I0ȌU /Ƕ!v?ty9,fT/@;DȍK?Rnc#,K0Hj(1?p?iBZ!QL^swm]ُР{K_񘟛q_vEky;qONN,E♯t6 €dmc:H :|50ciMv-<KN┇E2t0]ډiTԳVzd/VeO0-W-=b햃.vQql]گkV,LaZQy<V/_sn&Eyt?0g[Uc)n gkگC04ЦN끁%| iV-T{$m*!;&?4V,GalCn%~6(9q[$ 2 ?`7A;$IJy6Ѯ[mx%‰} \RF".b^ԕqq > %onǙƈeyc?%2ځ[0(3թtIsJ[`I~֦X/ԟm#9/Uv믱ȱ5%$+cэO,Z_8D{/?׏?uX\p}[ޓɎLrcG—x[K`>g/$% L.īpX;"iy _,)+fn@MٺRTK?JU,23{,wfHJ3kemƱp\YF4Wȏ|6>(Tn(Ojpx>£xTϴ!l;-?ĦO56[+#ʷۏN™9'aXhxcm_ƛkk1ɕ'!mI9:n)i3XsEïz!ɿ'N E=;8 =b`%6倓#%< 8pԣ[XNd9E; }2gA <ݒ@ooýҗ%ڥ5?Ѝ1G92{s{[G#c[?)A3|t-xBJTa[fqv]ŞjJ|dS ]^s.ߢVbQ36$bX[aEy>B*|=a̴Vz{{֝'jtb,4T#jCݮoJrTNʳ:м b./Ho6YZOOR-7F\;"Gvs`7b1pXHM!3` =X@r{`Q"l^ `'ɱ%L?H< _xhg 0QsQC+#!AZ-%5GmmGV ^[֌9h %*8ʛƅ/t-nNmN!fSn%Ցރ5 9p'% qctO{.BICoz|>O榛W DLs'ʲy9yy]v5_ʃm8ϝ2V[j^};~߅ n_ ͧty?|o txJ/kթi[![4tceQ=~N` s"^K#RkG# GPcFAlNЯ_Mn]9xpD8{U>v2[+pf^~20Y(Rьbdzi;'m]Cmwg- "G!oܙ] `Jl{&$۲Gʎ۹|s%ctJԹ&6H&԰kW%v+&)d\Jy-@?qvlȹ>pn3p0X PFv)o:O.&Cs >/lڥ`ZYIE1rb pk);<>nIt,9$bsdY\g ЌOPp|B^Z8 CeÈP&nf m(1sg lI͞>Naw@Y?RkSA; q&Wէ=ð9|Ql0PW(- S&nM> r%*͌A^!8aS<ቸ=y'1N\Kj0:FFXfL N 6U&^k6&M 8fa{Vm{V&sfܴ{>`TƄ'4p`JNO!1h-`ȁ0{pr?pI'3B=]nw?去E@ g6`IcIOhj}讛~g}w#WP*Ŭz|d ܿt"*mh pIcī>IB&i̅@П50yrՋi7_-`U򗎃 (C ؂# ,Y+'|pMK[q|ƛiΝ̑mh gjnZ_E3g8- /U88Ɛĵm"C["Dvχxj)+bq@wYh,倃Nf&dҚܬ8> LȥS_4xJ7fgF0o~amz[k>cV&p{JvMO̒>mY+܌kJ.I{FB,g+ݺ;|o/sνP`IU peLY"?q繫>z\YNp?_r ˡZU_w ?D?p\~`ǼƮ:qɳUIO 2oØ#XVju&dKlt)`a=a6*7k:ңmjLظ+F+k܋/ec)|QrVo^?&G]k%ओN.MbRÌR7dkSّ*Xێ;Jf{鵻1M4ly}ۉn ,V.>hS?pY\9lCWsr _6|T er]}  #eR+Vd >tgNLMissnb"tj.Bt~9 pߴTg̺ITrXHa<1)l-S'+IDO'Sك0yƖqX螭cҕKF@ mt#C?ɵFqoC{ЈCC܆ ]omm&tM~y̷Ly8ӆ!WxaW{OYR`u#}KOs'?@RLPV9y13dJtl䥯uۗC, ųg}{;;?a{԰@2kݑON Wex %%Ġn>>(Vo#h_'G:"549f8V+kg31~E fb$$hL>Oլ,a|Ed gDK۷mi+c<0㦇s+3Wڵq8k5h=u:'-xfsַ{#Vf擿N|Ů-th"Ǭ]) Bhd&[dφZOIlsb@^ԟ޼aI49)80UsrO8vPN_MW#泂p*K)5*|=ccc#[i8Z|ݪSw[6ԈzP|ʚ̀<ிZwݵ׺:oiKmgr?yhLrt0+gW]bǩ3ã2l.$7 ~d?0{'1nd~~`Fv(Ǥ.c1yY_`ˉJL19Y1⃼b ژH7-{s2{q>Lu֮O+4dnQ?d}+ lwEϓK?"iuɗН_S>+"@??6w K_Vj~/EN+u_31w>%D{rRjAUɜkk]V/t~ EC_Sr=B`/alۜbIyAٯ$X~,{ULcXqDv%L-U8H\Mܲ-; }r bx=sm7ħu آGܹv tev"_xxtgOf_鸚u}Q.ynS&Fɤ98YMs]'s??֐or#ia*Vq~o X9"Our?ӊˠ{Ŏ"JC8S$e .L@/DZ6pvX%'y)40 dL{m[ma"/]:A'c'HkL`L&GR-w^b >w56ps}doU=yn- WXzϽϱx(.ec_Fq6x߻6،};'5<9NuK>|Cu5 y؏W ( R3C~/[*_}NN.=Y(,ErEGh]XΕ6d.RL?Od`[W3ik+= KsBzOpֵ-g6c?_f >::GFwLvGɄyoCʾ|0䙗>À 1.gfAgb:!L1.bop3Y[&rcy|CG `:ְaO-M|_bB~Fl;F:zA!9mrY m!pX$dV yh1k9܆/)/qxۙU7g/g'\OoEv֎[ e1H_X8b0{Gꓶ]V/ŧnak5I`g2ZgpR wb6aVV-ζ%_l^ Lx?O7nwm{9.-}owi\l"<,?i8G}^5EmxB;J6)VQ_h3~5ub1 ksRw#pO~WWlϽǝs/w#[帐iKc&o dW e+FG<_D\6U2qE _te?J:aJt^4e/Vc|hWi;;({65e%{)r+7F#(E5~xTa<(F*yC&{DO.{~:tI>R''$>'XS¾g5ntG4gT˯z/_g'ÕghCr3y_t wKTcg\tR#fx3tv<K.w6DM|j  t=Mw(PLV'LJ$]Ҧ˩zKmbuVά`,XCgr ~kID1O.Kl1BN/6?+ 豔23;\}􄥄j3+_],z9߂J ea[\+ϪrN3o:emƳ\@s˪[:\^D~mMhppe<"2za422x?=;eaB)3sd|y>?+,4H='Շ bq\'^E$}ywKw#~ݟ|J=Dkܽ*7Yr pCݫ8.osx+_SUX~9')ߨqłÇK nAraN~o\s3~,8`Ah=|u-C-ݲ#P^(]xUҽX~r|D8NRTren}-3t_x#~}nZ~<ȃW]?55wЧpW* 49}*Hh+>(T ,/t9y/ sJB%A7QG\5C*Pr\˜3A9^.87"|T6PL k j'ȫ;C'/R 'c.ui|c rjyb+㙌cgs}O -mX3ԕ.#Rܶ;=[z:Mf.\pWתk$)9elrH"ڑ22>bWO:W\}YGCLƉ=t#cc)]!@ :( ǴpeJn(ff9aNjiY|u 0;3  bâ^ٰ 9rq {9"j>ru۝u:~s r%S=niӯ_F9#;v+x\0nufTvԤ큡 OxXmݭ7p{)<* |AЙ\]mAp#d.ρ.EpMNR]?XKVWŚX8 s%ϕa>UJm.t:}$@IDATlFW;^@c?n-!\ke7;z  sglWZ,b pr궢X IJ>Z\*:mŜ| BZ+.yG%jc q%W!Ջ茡4\T繡B)x}B6K 6}ꔏ<v}GԤNe~ X ]hrEWxQb Xl6Ce![dzz_3P {kP!Gcv׿wݛ^{Qn{_G|r< "ÁňaBbe!L"Ԇ;nw6݂蓟epW\h@}>9ҭu#mh#?o`C :iP )!4޻4u5>yUbBfvPhZ.&buA~ &F\R#b@1TYH6SRgI Whw;|xbiWSر(}-ȥ)0Gn۷osdD7`V/.ŽElh@\LkQmi= `Εe+Y}Î˕=7(<ļ?|(,wŖqD8>i>d=`W`}CMc1ެ9YƓ:-Vdݵ㪯24`1AVD PHW4^Ep%K4e%$W@;[x1 ֯HVϾ*W_ ϹS"E! |<1io{TVer=pSt#䗓+\0~yгqDv\v d`-r$uQāʺQ.Ԕ rV$<@|9<]_<W'7py-68 E R//6pô,,",<X"uA SQ WE׋y5XdtAdi6Pz'(#nYnpo}KĻ?6?7~SUN^?!'6Qn\}Oe^Oܵ=wp#U_F;QS}?zl~ !Ud3ˬZuBQ=MVy(>P!EX+ [}"b;r^ 1 =gFK7m(ƦēeuJF20a`_-9-uqSԣǶ!vGCLP@ސ!VݘvoC.C;9E[/8l섏Թ~ @p؏B.:`B,?b;$^.'7!rFf#2 9#6АG g[9}]z(OЫU&r{E!Yd,2ȂCoϜ.:4Ņ l ɅVXt5]lBꆚc-W8ȕrfr`_(CO}ݍr{j 74ߘԛNz,t7OR+l{<ݝԻ2! R?Gs>mX8q~>O~f[c?`K 8ڬsXd~d:V?!Ϗ{o6]u ؖ13c@8hslm9nY茔L>'"r6 9,w_XHnN'Q~5%ܶ!,A_"G?r풗 ca<C=i߽<# QG^auQXOvwO 1is?dxԎE9uӺ؀On+zk PBPB/g6E;"F ^LT7(Y#> `iGdˠ0z#5?=;NZfvl#qǽ俚Kb39 >;/2?.' D}̡co0s}C{nzCewІlݼ!0.NnK'̳JN4O0si='<'sG#;xvz+fwGc:ySA3D[pRtÎatkMrQ?ZH)gG2N9 8˫ӏ +ȋ*fbyqn::6aZxpB٢,tݨw=a!`lllG3FKY۾nQ;Otɦ颞%]_`1eN5Z[09/R\]Ҧ> WhĴۘ`RI/*[iYT\LV7\Dx@|"ahř9| >||hu}PE#+߀bF`T'Oǥt+6@8_l0a " TX_6ҪmgҺoO/l|نszؾfvA>"N~Yx:/GQC'=,} İl_pwLL͚o{雜ayгy1-2ڱ/yKA8֏g5_WbTPah g144u,,xKEuTYǂd@,g~nrۚУ u0`u?^1;-V><^b|d8&k=mo%\uRӴPcՕLѪ:<=^GGS&Mo_~!m[c{t؂B*c؎Op9Z9ucvB(Y5n6tvhAUmEpK`Z0xr]#R븋p2PIPҥtXlT>`2'_k(Ra Hg@Wt!O5 A2˚&dTD&X}1Oh;آvf/q\=МT# ƽBr ް ?7{Ƌ,!sV: *2sNvn ]UA$W}vvJs {:;dӤIm6:(:߬|-ZߪSx8a+ұ_bN}N)2]}thN99P:Eg ÂEO!V8E> >dS~H /v?) 0:w:z`x$bv4ڙ!c_53Y"m^=>$"m]wØJNmr ٥̉Uk ް <_=4OWuoZOjIL0Nq} NP`|+v- ׺u$ k:#0 soA-c񕠃o;WO6+c-6*8n/E @ H!Ʒ⎪~Nb er:uii)eZ#`b3qnmQ tmmm&R^NGu7Ƿ>_zִS%.s4蜇@ AT.rfqhSFI%"!q)3aPV ?.>AHFt(GʚըV]tPAv @zeSzLݮ]B<U3@;eDŽf;] Fjk/./nm,T`ոK w8h2EO* 8)15*fG^<1;9lt@;ͅ#IfmE0G=GUN&,ftlmUB dzL_:Y١Ad͎-8~mHb|gG  *h;9/>?d|'4&CYlj裄de|mn8VW׃4ږcCg;D ٰlo#߽<2W=y ’Y Ә3>O. WNLm'nmiQD ;YZδư4P)@Eak MFjZ"u|)!ݿvqC!nES.BZZ{X7۴NR[EWȚdί;Kb_vw@$HzƄxZuwoG&'8+ KvťY},dtIO6A>D:'UBX%~ t gfhj?5ӨمT 4eR'"fm4x_lZc-;V٪Q,Y_Eu&46m_#J[צ5Xa]'}fj`$ $ͥ mawџV7fׁ3' j Lsd'/zp<TD}UBslg ah|146;vvY4n{Tj=줸wu,1*,YZ{,jυv4ұ:!EdyR{Z ySV-_?0p=&@7YIҍocy333c'p4cq/=H;_?7`K_C>\(?dYǎI9g}>?lE}4E}*L OY*)x:.Ҽe2!oEЁGA14)qR g ax*:9[GPBB2gv y g:BIs;ׯ~ 7c{_bLNNxw/F7*uwE丁OG+~@G/2ijc&k_8։ ɉ%f"auiVyxZǯEEk\Fu GJ)dD+Wo6$|3[qK]ZdF8}3t1A6]{jjw͕@ȵD=qce8JiQU*| ַJ!"'n67tES+8|'h~0CA c{1Dgsbqf_ڤ8Ohv1@:F:Ç{Tjt2Z 3p^eo)3:K3 .A7Ɩ͕i;Ϋ>7U^F7 >ɤqlYTK v6+Xe%}F,+ 1؎s6JN> mOj<~ݏ}KwiUk[$M fBzд<}]i,G[h>َ iC+E2@_9jat4~9Y"scYe=틮"e6>Ge:wm!50;&cflWQ"2,BbGꘃ$NOOH>( sftl-ǠM7}*ofzLN/Uک@(b F&(+}&2?3v5c#f("F!Lנf̃Ng=㩕oSͩ|⛲((M|OH52e_e/2l%N6|+aWo}&w$G\v|͟9P x؄b,={kDI-/ځlΠG+4lآ|C+|ѾOv;"uk/ ~ ]LwlzcԴh1c.`.lo,tW\x:u“%;.d_R<1[a֌9>m8  }sw{~-[o5Zz0)/SYCVKgFtC{^?‰8,Md'br$M)`OԠ#t"6Cr<'>!@5=I2:ix}|NM1q1A'|ְm䓎Gtq(=M$!`#O@ikӵ)o6p'(ȉK:t/mBX.rrM/#V3دx%~Es?W?gnO\0L #'h 3gb}= Uݜeӝb\5~ #amn|⽎/(Lv5wr1mon F7jۤY>mLoN"F4oHɃ9i"kы ƹ=bG߇ea/.:`^wK ";1ߘK1NlvϷw-Y3o{+-j֝0: ͵Bxhjڊ9|&v: " Ya;&#RRGO=b'W$,͚vV!E|UҷaEc8c7f3 ?X/|v? -o,f8p!aÍ}=iC?0;E~NB' <ڵp }:֥,FXdȬo`caʊY]_3뫫|'u;SG67in+,*i Ņ&_l3 Lв`\@׆.fy9Wң_1_wKӌ''h5Apķ'o}lxD>z,G7{*dӧ&]ֱ=ٹy3CQ*:ŕЀIxm},:-2w(?'su~*/*4u5 [{m|;jA[Cexʐ70Sv-.׾w̏WWEOA Qɍ^x9vLo od]yoI`'"Cњr74;OXv7'u`hl':OsQZ=/j >N>9hS 677ʙKa6h봨@P,"hBv.lme 8cQ`XD.$PcaY>|嶛QS\ٝq%>*[э,!to1OScӀ# 6nuI2}ɺuQ%t7)_Eux:S5z+ Bl|eX"/Ѹ#(}`zZ}vs0T-IQflz >F/ T3҄| E UtfnL.]{s\?jvý0 [Tj֖ +tbݴxoac.h%uӬo5Fj|^tw1 {f`[|%KS- wg>ԻGM/eg#Dh>SZQ1O;>B'61܇.tUxdBt$# 1TFi N[5bJ /8}Mk"d.NS#%:{Y ~t"-%@w8+vv-󍭽E,;dBpK]F" d\T~`$;N i`;-MtּP*\hlAmGl5(są2h/pOn&)ՙD~3ouE4cп"&̷73Ss,0.Pi 3p3g}/Qq!O{,~9x=YeJn}KJIAh 2FAy%!jEj,xElg4,G}t'~X^W`ADEQx<3֧(9(Zv_ۓ[6@U+5<$*;M@ePKm/:W^y;k h{rr}@5?O4NdAŒ2?49~2X>_ݱ5HgjSq")aA6\d䬙KF-DZ{?*Ы N z I<˻bv0&]>FqBm=>̰0ŀ,0gu4"y\̟1G9n@&'NUÒ|_̃_7Y8c#iZj(؞e.|fQ#gYW [ևPWc + 5|']`EayPַx*JTwĠ6v 3($J)+ZY { yQt@^ƣ*>~O5OӢWutB8+G蜆vΜM4ȵn| |z=>zKm>S:(Sdod3d?H6MUzK">}Cx~BGr'džpYǂ66WmRms)W [nL!?.4iA}4]@=4hac6(nlᅝ \GXP6v->0N/|IEqZ\8-.b87?ξ_0Ox߹~I»g̑ڻ)pߩv?` mi> i[P,Y<#aX;]K`բrl0 8U$j;Q74ǃclvyhMb\0fdQ}pAMxYpB?~.PK5I[yh ;/Ǥ"l WƵ^H_c֜1gx?h3X[NT d[{O8Nfrl)4ɶ(*^IFӭt&I͡('ElX~c(bˬEGq~O|:- l鰣kxQhmkX+hq>G[nѤv/`NtFx2^μ漼[z0'{ͷ2K s!s`>zٹOZSq?G=<あ) t0CrvVCK 1)jqS1wFi3#d.uC0_}EcPiJ!V/ (řYXAR[mM#]~>5'pI= pdHn7J VBYM }[odN5IyĎUqh6 K,ѓϘɥioKjb|K=rUWIFkf,cͳIVϤ,0 @iSQZ"M:ZzWgb} 0/jK>}5. r MafZYEImOJ!'+4Eut@֩p،|;| v&-"hO~X ر@ 0J T #xO{.Q=N s.0y @IDATDbffzA \{̏쯛w5 wϛ?lz({eo3sS;R7߿~.}/dXTvR( 1klWAhLvs h ]kN,1gObEYA?QQTBΕ#|pjn,d^O>c:IQxnWbq3 !"~NqW.@ڶOPo|o;m?&9Çw-'0ܚ#sU~]$>;tA{pBs4144IJ֗TjX֏ac-i[1}/ nr R0&Lwc/ncy&LۥNB7YkCE!u߻ ]BF @Q Ď6,&h}bEh;av 3V_ZPآV͌Ѣ„Y صP7#uc. 1Z\ X\qz~E%vJ ˅_z变wk#_0}=S~(I,4]mnχmTwM=֏y~K,i̪<PAram4hglrlUU"ؘ(OLA~ C/  ##;!*6O·]J8M;ӂ -)2NP̷8f[\p mOӣ7b_AO^`M*d1+1߾}n>ȴ95ŽЯ+*)tlvVA ;Pė"u@.cvؓM? rq-SƇ29̘/Ʃb{iğzQ_%X_!&oieU8bqj]r.v:?FkNK9DWp+.c^LPC P9;&*o3 #@ X\ 2@ X`] ۰_&Z`ŅILbjjr$ G_d~m~_ֳqp zFIRKi[f|w_q!,=/0MIzVA;GS[7 -JÎ=-R/cUiP!_ׇ$nmƦ!ݖٗP9jս8u ft|.!EeoL ߿_Dz_4+1 ?\}8c|󶰐=>tȄhe$a`kkp1]tҀ*MWr}_mfbzdiqyX[%Ѵ( HE|̯lF[6Q6q 1KK!.@NRj33)F$ccVPܳK~Nѱj9|iv^b}A c]_oDOxM[Fma>awdiOcYٓ_77ozɯ|8hydZ.>6K I(E(lֱE Ha&fpt6I%qVώ;Mgؘ ښ:4Pzp킠3g{ O&|V3 4x9JE.@%%u!h汽 Nye6 Z˰D.6R _jn-kTWkwK*h &&|\ZoZ m#nkSêr(TbRx>_OU?Y%t}#TG~7 ' _qNGEuPY.XZƖuT;&(N73vJl\:vITGb6|a<666~OH~ )| J-96^Ġ4d_SSn.*~^Yի؟XSKnNGP ~GIкo! ܄@ID0! O<'".NG,^z9_cL! T)&{GPӢ[XWQw2!fMJ007 g%[OIM͇ӴJYGЁ=ilxZ7H_2 ʅt۞s`MVX> pOJIIi ) ڞ`J,@M ֧e#ż/`hyA;Kn^"KF<S k6cuQ7&;b[qƒ@C<޴i  WSPIP`hP6uħgmm:*Ťs|9(yL͠ysSykgF)Z:3iׁLxRkt?0~ ,Q`“]ƯctF7N5 P3kvWZ } ;k5dUetFECT'98jQAK1X>Ei-:MjʾBp|r #VΗt_?#2 X$V(`G˚6)@r,h\"xR3|>U3N\Ax >6_Aa]%oyPLpѠ& M17U>׼~i>2Ց (MzVUl&_fIN|2UQ;:}` v$8)m]@{UP),܎}mAmlvw ڿ;zJcSLh΅1P&ZG>|]ZG~ieH B<- x< (js/ پ2QK+g7A)$1U 1lA'Z)!٤tB9*y1_%jL2d=L}@%{.L+6਱JA;4|,S\gt^V]pďl iAQaKⶵ{!CvYi xm۵A' !9U|=Db\-Ts/tGU/x3lҏd(4l VT {>LιMnrt7!gj~>{hWZEP6΋a]p,_}kj|vM)Y{նOS뮻.vES2YS$ԗ QyxM,^3rWؚ61\~aݟmwt8GvՁCbKC HrL̍Uu$/և _UyFO%?W287& d#|ư[VY؝/6l(m)pNpbYoc>IEo&EkNE jbe$'$zmq0]߈'h<l_оk{co&4ʚ:":׵3i_tnlBK-xklX5Z+#jz,"j`b>Mm;s(bP756;O9Gf8%:N0ǬЀ}m5qh[ً4 ^V({*,fdbRp#ՉizLᶻ+r7ߜctgG TJiolulz8~Al|8l_d}uBb7t)W|{y#(b̴zR,S3eKnD}! ?/qDf}fz $j jsV]Z/DkEx0]džVWхӐ~n0]¼z_<_+'y٬.V !n}z4%;')Jtvr|jnѝOY\M|Ohm: pm\X5 8_XE1EHE*^;^L/w 3L*Mo"ָY%-Z L)uv/ *E+)T΄ڇryaII/*bRxKZG0X#MGLLh-8F KC5QВgc\_3zv40iVmlθ N/uM"ֱ1 H si6. dLFT&#ݘɘX*;''惶fG bKssg8Z$5%&m`h:}Y}V 1-o6\j晜ovse+ئJN|K4[V7B)sms'RA梍i`3=_1_뇥3f\yյ=.s㷽,q0we,s4d:0ZwV)g0P;S:W1;8 &ܮ͛oYf!m]|vG&#Ma+Ot(]}=Vz53v/A(Xh(WFz!`7ϳD OCv{MH!]v>$]2ͩȾPNE{ Sч-_ 7Es-_4_}ɱjd0 301Wl=Iqko|Q,ykwStXd?]?T=9l"1Z~1e> ~r4-9Lǒ>r Q[D)+Gk6p" }h2/Bb qK/n[~V\(@\Фs`!@\(c(R_>{(YC.RB<-4/\-v~xtst)-MnCi)w_@JHK^[b>O5>k>vE/asaf쨸`c1bO0qh 3y_nGH=;3\gNr'^vM`Ҙi~MXwbN`K$Nb'X8 I?&ITOv=1f6rK]y%L &L}m9fi,s.AN#gRY3ᑹX7EI4->B<l3Fi`ihnձ)S̶}{ЃoF';[d67{cf`a02p5'ssI([|@˗'_߆^>f{3̭7g+͏3o=0u>% ]FlQ'١)s> "Edd+-Cș\-zkhã}JnOvosO0y+XC12Q6r:6d&g}v ԅrze oZ ʇOY~msP f 8hu۷r"mKD>=u??Df`a. }g)fS6+Lwƙ.tÑi36>azѻo6_?Gd̘|Kb}iԠNl U!lab.V7/GeѦ.ݔjP+00ccc| BO?sp.cEsbff_u4,|bh []׭M t.%+H& wX YvLcU֤/'zzvhQO`{?_ѯcǎVk+ H9 tn4R2R ZAT^gCj3kS*҉A195eFq-t;ŵ3?dJóu,4k?19~cJȾm٦Oeh~}ժOڞ&pDHr|Gj'c *SڹFfjҗV9n`s r˄Z`z'ǐ>Y驐(*to#DNtx[k--@=9=>nXӞjl&;iv6|Vʹp] CY1ySs息| &Yϙcs)OBwbG(?6ƫbqhX8׸1%0AךImN?|U-cdZ&cHc !m:u-&Ru **"tB/Hx-%d! xw2s{ d?+šj/2{r%'4g}W_ v~3kYYmKʩ?7ot r'cӼZKzt -Sh9bɕ'gh W d;^_bG_;(`KOx3 KRo=gE cDBn ;KKB^u81\xRtQS/ 7+U3mzht<}u׸\_#7sf?eZ'4 9 aWi`VV̉SقxgϜFt.dhqa.& 20 +Я\>|/}-|o7>~,g/OxK}9"`Sfg9|em~EZփςÄd:0:t f>k<?je|e-+͙:_X$!u1eOV~NZ-[kXCUnSk-=S 9ĩSh RwcH!NHonf~ui|GQW #f?aX R4-e:5;-(}%N+~XPF{u9yaZ,EUL;^goҍՕlBQ3>WM9\Pȏհ50g^9{\tœ}W?j&S%Ujuko{X8s~sǘ= Mg5慯v܍hz:-|!m r8v\uġU=|T(8NB(g^ %kIOQ7QA_%`iZ%a,M9IR.5]1lKUZٜ2#zgn['>q4S88k*}ֹv(7'2=>cedi*l/J kN-MPD*"n>K#.p87`fE'=B 'EUN>>uܜ]ڕ.hAaC/\ ⲇ&"Ӡ,, R8f`aR30׾d&Wզ8c+w8B%gz_|]Bg{h\ɿ0+m+yT763\IMv Pܵ#EY&*;B$ϼJ#a)Fu4'Xd@ )-Lsv@bt#ۚVP;) E&ek}\';p?fʜ#G n491Di.-_)>܌G0C q3$O iЍFӜ9y~I;IӷDdo%pyq1>vURW9?9=JzLq5W:mi|[VD[z2ftpބOp*£kp3A9]޷ȱm>e%=;eAM"<o޽gM3aNxY{ONA'2YqK׏R,|hnd ëKRڸҾ8f`J4ggޠ'-"iQv)kKa} -`ݬtӤ;c:KpqT 3pg`P;~-2>Ҷj{W?$9wO||~ͬ :~ʠw|y֌N^wJs}hR.Gh"!o=Ьj'r+"s)t*'N={_\ֆ?Ƭ_f'EtK&&Ģwޫt^@@rE,M}Ȗ1]Swp$6x>e [#_Z ]~p_7aʣv# VT)^RM3p|i_ LF&I@׸ͺiO,/f`K -͍̉xEcf. 6B}IXHh{X.*t3Ca307۷{yeGߘ#9.3ww3L%uZ_kO}@Z\5sdL};lAzR$s)ЫOᙴwYTtfp?,{qUd"LjWJj7楁ZkfSc&~,*(4+*;i$em&G6x#Xwvx]>[ (lens\>Ak頋.q%gk|Xm(,*E`vPl̷49^=NSauY;s4;6VyڵuZTp;٩@ M_7jװ 30 xG:xY>zg_enO'v`8`!`ɯ6w 7~kf~qY9S.:OיgojvFqT RUv? ;FO59QjƠxT@Os! W<*D+uŸPX4-:!P|DMv-w8m^ޠf lm}PחlB>z.\#Mq^cXFゖu؝bUG}䚎wt, ZTco|L+Ѱh͏ѵf䃦A 51:-*lNLu)#Pީ@XTlA![TnafA#7 m)<{ͱ/9p~=ϼbWv:=2:jӟz!t7ЄR_KK*TY JZ_) ĆUnH7Q7hY:bsKebz,jߤQou3CN;5zz YTEZ@\m4-l z ZlMqyv0><{D] 3A@`Ǿ~wtO%Yx%2ctjuXwxpq/7),:Ucg]zy/,~|/e 9Ɏ ..hc2Ji~Sw؇tNQ7zȅCG4InJ:o~Wf W?pxԥ]٩ftڍq,#f ;"!-2+CԾ EYKd>#}\'94 _NNNdƿ^wAv0˥37lDYZ*@Q 8J5]dSUԇGWlV+qcT~I,ڇ%XAb:\wtL|#Jgbf,N/`/mR`Aa.}hh`slЂBv)`A;ldV@ŀ-ک 5eaX8_28۟J6NccWAKrAڇ>rf~chࣻ!.}nR&-$47ghʱl-0WOhqE @F.{\! XIayDf`ЗHO>l^TsO z;x ? ]|3w_zp.q7;ѷ~<#.TƗb.\DM|.EoܼVs<*I Liuи:It|[cѸ:<4&{c|ϡ<1>5l=7#{_L |xu/Ez8l/'OH m\>X89KL~A++c`Pum?M1^PQ.4eG<-t.8*싉|4q5ݎ(* %>PV D7)b/'J6 (*h 5ń}fbc~HLAxE@uv(4>@ t9-ɭ:>:;@-"h x)ZH\@N35l-'oN>;D 25-[k_g6OY542533hW9?qp,P޷:fk?=P(.UqA]X+Z ~_` gzf,J{B23#[Ol3f޴#n\ve87T)-E2Gw@DI"{-Ӵd,\oM،A"*_Z!(`zpܥh$U%Ivʓ8YKjCW!劒U*P^+vtۋ#CIB8>ѤA[X^}}B\.6ZPC/erVcմ] UZTڞ@ Gi.i [vth=at w*nx-*KjЕכlTlz}w7,]<JBa4?yYg{H3P̵7<'Xwe/^$W`>{+, !1#@0o[͊AB,YV8 ;ae@B Z6}6Rw[w}=dQi"}݊'ωȨSy Z )cXQvBmD |(҆ R44'q%*q3Ʃm8C?]2$]SB/JҏvB Sz6GV[˖-\RDwlVVd=7Q*A>۶-~Vn\ gDz Nہ{Lvi 1y :7CX} ׷z}!ƍi>4'< t3pw)e[I:.]eۀ}QB k e~w\ 9tL>·AA}򦜃 ȣWr.ʴ]e͖RU@/\үը@Ai)__SmDNA&TL . ȠW`-A+ŗrWۮ|u{ՎIy3ĩ p}hb >O4 `/ߦwr˧D3tD_O?ѿ#] 8|vtRFY|+iK,}/ nOI`IdXR+TlaB'1=Uf+ @J,Znq;ofk ̭҉pY}eassssv'2}ljeLZshn۝mc{b 븥pe/b$SZX&Wv&Z׸7I; (+(|㋶a@Pu ciGFٶ&14)ژ]>/#iG؏¶0X,9"kU>ȳ> ,-,tVuPM3r:hBL $ H#DM82H S ^$qfr,,,cYE. 4ϴ>N yxx<4`ɻn v^՚==Xth$T<]*ףzµd W1@Mڐt"3{Epd؃}E?D' rDz|d]38Q*:0䑌ɀmL˳y1[m!}k?4 ջ>F(]-*Z_u/Lx|̄Ř8f•7az`oD߷7X, : YYb^qT*3 16ưI(Ϣ;px$;S9?NH~mҾW*R9~wvG$tD`EnaTڈ>ʬlx(DK䓾->|-d1(Y +2@roX籼2cN@@!6ֶ4|Zs;b4٠t)GMU[Fɹ*/*lqk*,mp>Vo5ޠڡSӥ:(kWaz*Cjz+d0Ԣ֊\Gcʲ6Oh9 iq?:cȎ2@YXԝ\ςTK9'35+ǁn^z|1#UIo.>sly3]CC 28౼y(ML ZE6ߎ'7:ZFRF/I<.:8VzLZF.}SC05CH^-*KfJĕP3bI5+i)F)ĕtbC/k|s5w1%E؅%̵bI(.D͘\5ƼPlb rF71O %J ^WB>jzB2228~Y|LZpiFbW`ӿny+#%dq߁хkp@̚DV^H?8Xn~ :p})l/DJEO[[Rag5)I{o\˅Ih%*W 7)t7>i\m:c^r%3Ba<BfIT%:PUYr¯ӞHq *)RDkO>z~0}?DJ9Q!G'X)\"鏏O&u-;]@;ʸal'ILE2k3>!)Ze%I :"#p}Ca!h[a' $?²u -hdXG ,Y.ih|1 hsz Ҏc=  Nz",Hq ?3v2q`<>j=#,y4l%0q"\V r~ttoSϩ]'wW lB~Zw!,ݷ=sdL W C@GdRRcG*jXlZbx6袋{9bOhBٌayYNYtX8ݧ;DOѹkvG?[ܐwfu؄_M}c gn;a | z> }!U^O;nҨF-9Z ?>CQ|K6W(z{Rzn杔w'Hj7G#^;=P'zϪKoT56bK V6ha'=CRùQiL1 KWcwnQ Z`ؤ-Rfϥ#~BUWuV:64Sc 翢׼'Êy~xce~}b`X}p|uh %P9Sdh& ȹKMC_'"3:x;v}W/sة K^J _S+S{:vNxnr-;BF-u[q4)t0}=j?*1꒺UoTlB닟w[PMj Qz^/cn}5&VKүҟkۢL{$͍~HN۶u-b; )K tԆ(y\[y|oצ 3Z5ՠEtﵜ$kyVS~÷zԻ3jyyI,L-淮*ժ 73eӌUak2rx='q%bh)zJGo e2X!K@uʉ:h9nb[~^1v36`A$|4?ɴoF8_w|9b:h`Hꢰ kHc_fZͺW_ShoԫQrB&atD,6zh]ᲰcVVu0Я;V,S/auV v]~O%Vח쒸o?tRZrvəRJ`k+g/]ć.ݡEc| ΃>ɩLj{D6;ϪDѠFK٦E_qivvHaGBHYIKWrw۴rgcV+xRH*XL/`XdT6b<aUa{վ*i\OE(E={ܹmTRVU`U &N-ZtE?P~XC"'q.'vBB慶OX]@~֙y7 $hHcXE sP%N]raZxSuD\p.] .!Jb,K,G~Eh:)AɋкDLx9 ALU3qQ1mv9Ne y?WO|'&0 l۞~3ҤA3_|R +o $-1Xdٖ|xh4X,|d>~{lT* 1c~n"wn nRIAdg>0&yc,Mk+,Ν=+ ()2^m -13AokG7`恜#ΨF-0j VqjK^XR}iT%˾XZ ~;zE=jm9wUfYBԌg~Q@-^#T蕆*pJP0ae(4"-rU^C@aYUi}ZL"4tA3@#`aF-0jQ ư+̂wmo|Q֟ٽB谏}WѢZ]nMn*2_f`G^ LLYۥԞ×y* @@`BΞFo,Qk4Caf& xW}^oRy^y xA2?jQ yFuk;y]t׈\zJ?-Jrz/ O;ui]ZʴU36W'EG &s9i㳻TyEfCgj/,^,|g3ҕW^9cyx&ž4iR4lyɶe6%+Ԗ.1-DpI͔`ɌO6SJyiZth% ">H#v!-!ZAVN*S%z`B^s *ڠg%`ofܡa5Q Z swOff/}~o0iÙ*lRI=jEx/0#6CP_>^rpخ5p*WE,6^R +^z ,bȅ=>CԶksȼ;nd{'jiaVEڢ!l4r@G0> ѱXlP>"PY <\ |b!_@* oF֗)h6BǭR Y H^,@lX+aQ Z`Z7Ź_Rl;xy}S5ulm<[Oz[w=c =m6$}:ׇ\֧u!ťjQU%Ƃĸ!<+aui(qK$鰼ڊ.@\\WbKv@fl@Yq{{ L &)lQnS a'}\`^+S a@*pZU(PY u`P4+Nd0SPڰQ`dw#רTݯ7jbU]\7q-)CrZD Uץ؈b ,~Nm߯ϸ-TV'ns6ÃaYVj׮ݴ}^A6~Ҷ{ok`s-GgO`+Q EG/Sߖt 9ddD Mz5՘afu9d8K\'N/f)}g Kcqr(}bVC-0~fEAYU][EGAmM5LA@m4B4#ak> [ݧ}G- m̵ؼcQ]=w%W{ zO^!3%Ѝ y{bR`͗i1洉vsNX`#lc}ڶmg>;i 3@\X2[-%{<>ffŭS@kZc0FFoMޏQcv-壍ϼh~:X/ݎK ڨ$}3l˴# Y UH8MATL=3蚮Рm 펎8Z`ԉՁ9 ;/0TτxClϫ#ݠឭ~P]7Ӷ $νb`}ƙ44T>&`IpT\S|ZPrjaDJXWV?A2G)BCWΖHz $Ʉ: Pk4~qLJI}am6+8ȡ}죓}W}dAb ӱ81f3 ρ-Ftfvo)U`Bmj B x4Nk%4ik!G?3"g-7} jߟxݺUl`#~ƙm:SOs>$ 9ȺÿAb Yh洩ݬk뤔kιX4HsuɆlې[' 0Mû.''8H7e8rynjb>V,pRYNJ $a% _IuZ7Deޠ|ʸ>c?@ 9v_G( v ߠ`BmeU]9j+T}jaG@ku@BnDZxI Th4QZߋ_Ũrwt5Ʌe_yiu+Y}ٓc7md'p7P&^GL ~Z?5zNKl|FX9x|"iz,'˶ |Ҝ$[gb >RlXo"izWB}%Qw_f.[|sƯ,OkN'`I_qS`IPX}>:-.ZO׮\Wq47KkHY :Pg)p^{XT &xAL w^(m?t:*1ڟP{UN&~AA (vEZ?X>Lq+ʺK:d 7"5n͖NQDQ @n` Px\+˴UՠMР&74@E;)IAn X#Fx /\DoD]p|bKMmԎ~(m]N CϠp|ܶ=qXA3ҤV946)K .8p<@C(AT|%#}]qL OVN^ wFkXi<,b D0ͺԠ|_B UM:'\ Jʀĕ+AK0A_袍#oo!B~H!\"k4/@:~3J}%\{YtcԤB FYij% MZKY.Mۍal٠hjPǴM'%JgoUۮn5wTqrw~ʴA|&9o:AzVUDF˧Us;sv`[4[Ӵ kĬãe#J&\ AǿLAɡ!* Ν^YWӿ0* 1zVڎgjBhrC3PPs?E.@Vm#P.'iCҺaaq)H%i{F&P>Y_7ji]W7р60$Ԯ-  h5za(P 4=M3xŁ^hMZ+M.bvB)P aN<}_;{Ui\Aϧist9>q5ѫ$.2FC]v5ꁻ{ M}ߪk^@UǃDIAGaθX?7%3LIsRuhi}ܳ7|:NTr @2X;kE5k^{x@N C?*΢VاMv2]~wcj] $~ rrB :7&UIG,!x`|N*Sҩ!sғ i+5)t|W5=d|Rо?ue;7a<[ y}M<>Ds+ j'ULz偢ħ5(ć F Jf&Tu3#k%il\>ԍm;f.N5{;eߩEohyuER:azh _1U=<#D ,|Ng"OEa[է3G)쌯O Wi܎?0g̸LGYX K*N7Т&xAP^Pm$Ќz H x&i6Bf%+Rzq~o $d>B\O: w!#3ܔfҶ/&ssیF>ꮿ-oA}/>XDpP;K +p-YqC|6Aa:r|fst%QJ21yU+*:@LKw{ᷝTͮt:D9cKI ]vjcfi*K]I95nt0vގD^z~oZXҭT]M{ ԬmX@ĕ%gڗ Ji{~z| iiO|ؐt &2u vX ܉0CL?saa]u6զ@NDLԠ'Ua6Bu<-R.zG,خӫޢФ : 5CN&o~ww]A7k GrM@Ke%'mXF0{Xׯ}dj 'U7^=~ΞOzŷٞ0ں&Kv0,(lDZ|i*J p{ =i,ul?_//'"{ th~jv=uc]a ;[B?E#/0τڶm[lۘMO~F*"DԊ $R48AI/ (ܘ} #oǓ=Z4sĕt`F' i:k˸HŶ7e>}ڂv>|O=Ym9iEuՍǔP-Oyn^O;*x* p֑eLbABh0Y4%n[)NJCIhv2˅M UOז (0}UƸ?F6G4ԾIlXRsDQ׋{/;l;pHۉ{^>K~ ޑ}HvPMwf WusM6Ɇd&䥍TG f… >|${@;aSM9773uve@o3yş,e,z|<ʥ fff yԸX2c2ׁÀ9S>ޥΞ |(HIff >0e)L8h933Maz'[YҙAu Z,څ_SSS3Nir0|h_~II+%QIj,B!i}_.%XiυNi,rކ`'H"y.m|`Y>#5~G2Go&g㘱2 |v֗>Ŕ1_gikyEMtp/' \ǕZIOxla+~ hοӪ&5җ:Ibi:ɷ!x %\^,(Ǔ,3nRP!0v_U |.f3X,GJ@SjmTo0uV`s^O>:vW?lG`DZ`-+3cʫݼ!s(MP 3+3DWE,+54b@^$?<#l,( 9rH`I)y_ZMyrk,.Ԩ/3lW3HG`! %or<}$oGBe df{?g !?{H-t(s>϶W(<3ѫK_~Z]Q /J7mZ3j!%n,{qԝCuZÔQI]n̉t0+J W(O+\.mZx5Mj T? A$9 g5fgλeqf ,PH+r8 r9M T[n΄r;ÔZLR4/oSNWcwݩ9vzT2nQ~R 4~tzN34^V. zfqǬt;/LHtWքW*0Js$[&I|Clc4;#C`u25ʪhf<|O#3,(p_z{>| pcF@AQm/lEJ: ęv⨣X.6 /x_”tGP!4EkOeI-|ud5)Љh|9zfWh,X g-ƶ7m];W0L^@y֕G);]p&_↕fggRwy~进yaF-pA@ K2mݷضCjMFZ͝3|j)wS6ȇ_{\]|Ł_Džx%u UO<||E;۱7 $'˜qڞQͳtt ÷A~aNfB$ldI\%+o2c(@"jԓJ J6=}o ,P\^^ U_Ò.2LkFŽaar5B ȲX\fY|a>^wuº2dV@dq|n,~َiԿ _t:x ^SzUj5-vB94-!'UW]5:luzMQo x{='x:r-X2N]M \IG—0/]'cCZO*MI|q0 XҮĕ4f2U_ .g HdzWhc袋vRT2Z,<+lO4Q.ݻwGɫqDb;־d2W^`~.SSE#G/`䨠/--Z*gL ,//k:_(_T+}t>fI3.<i3-n|bbizgJ#yGr߹ C&µ~PM.f`+6,>iӪuZ䳍`DkZ3-f^”;܂9w=KEwawdToT׍ƶQgq|+S މu٪g:%a'~Zo}1;bo`#qߋCb4aL0_vZl|Ƙ*b|\҈ݻ7C CO涅^ M%2bs?߿d%>@IGl)`*:(2f>ev / 5!/j3TA1\?||EmW2=2dAs4SjqZ>h>+DX_#*_~UFMoK1`Uc5-hiF<~:+cEi#ZSǮJ/WADkX2C[$bV .*#P9B_ē i} t3.,f_p$ \o/ pXy3]Xڴj>Mb2ɷ!^a$x2O2z=BTB/lTzct ̿Gpalj LoEBIyP7~^X!iM h~T_R_{qB' BigJܩ_ÇIߧ{)6$6 %#8*q%9t^v٥ X+ ;) Cy(QQ|xb`$9tUK7HVK3yç.{G;vΫ;=l4aj;h6cӘbIp^_8M.,U}š@IDAT@(UzoJi`]GGbpji&C< ')yc)\|%eՃA2>-PL5IX&&,J4XaIw ̘Մ1-znkGE 1 T(EM68AE6O9I:1|,t^Ay?0c Gb;Iy- ar1ǔ˶TZW4+&}ڡ*_o;~٣cD }%DHR׾ T wREݏHu}>o@H:2}ctj piA8 & Z<jiH\I[bNY%G: Mnoj~f5wn=X0&Ѣg'U%,;6* k39yӤ#'Tk?k}q^h^7}h ZUA;̞=H<|ؒ!yG s?L7yk~s~W7/}:pZYK ,/5_aX)x?XAyHFQ Z`-!֐&J;`ru#_X܁7*0QyU{Fsc=;?%UݭJ u_ڽ!u{T@|} ,xV}OgC>HZhjsKZtN]m~I=Α~X MۅI챨3pFZ6] /AB$.GHkj@caf% )3$G=\8oLHIw)OIrJOMyw0aj.aVFž:H?~c'K8WN6)xT6L$ڳڽ2 gxMaigO g53jm*PO^atf*z]ҨZ%?D&ɎNAOݝɹ7]H瞓1H&~Fbć~@_/;w:uɭ8g?8[Maԋ_|$[ߓu۟z[ާvσ,OE8!ʼn~oh2]s u0BF7C2G"ʆ;AvLNKU.Eۈȑ`p !0D@P Ϭ 3m.] Ѳb:^ ;w(YK8:QEVcqpZ@sd Ruh9`Ġk 9'mHZ2Iӳ24Ц]q)@1BUpxQv_ B{]o|&hgqYc=ߦwӪwC$sH|ϿO𔧴As i77P-g|9jT yaZ{J ~O~N$X/_>w.:ƎSӄo6D/@ضSC8eع*.a\L[ 5Yb|PxWe$V^a$9i낡7SOTϢXQʣ,P^*X5\՞2-,J/0R8&J)ߵq ,_ђQ r1.D Y3A P$i{bjV&gޮ2:oIZYQgNshjuZ Vb:CUk}x^/#oѯu*VL .om7t&8-w{ ɧ #28Bƾ-n-:^"iN4 Kޢ}~~`1aTEDD$K%rH$)4nTm&hEn\OxJ05̳Rƕ< v' ne6S |ң]XGa[\{\9VQdF%Nq@ލћ,ʓ36+(H\IǨd+2h!t"C]0E0x]=ꀏC\:g9@X^8Ν@X_Yc*XA*PE4B@apzFQ ){agIҬ:_ 73x|e iRп6-WYK^U.\ɃmW/> s+ yAt+Ӯ<$:?߾΃! /H34GDX a$[~۪L J }vÎV^v)[HTC.(iR|f}bDnf1KZ6N̆޽{K4eKc5V7`?77"8-LG% ||JZsA#_(:*/ ']B15K̲r`@{|o?:FW3k@X9GE ,Rgh*mFA@3AFL[:V̬Q87 j|õ̉I 2 r3߲K3, 62H]4hJ؆n˶>v:T7_h/"I 컂-!r`ih+.^ߥͺ~WY ochOIi7R"qh؛QTвVʏbi]WG_m.2ٍq8[, uIx3uC$I{p]ǭOdTG_~]wʬ6J alDCMRa&fQ~b_$ (P> 㴴ajđi9bqH;<4F_3]ї>I:+r! Wv,/0m]0~|)S`^]X_:*+gU>sH1,/~W?l?zVfO?GQ lضsz{3Uabrd-ytqL@j5Zo#_tjW7uW7 @T'Ƕ_v]-_#:-T׽C&" p.R9qjOEE!`?TVl|_'01m.Ni)Yb5YH9g)L0\xI}na?ReH8F].e|V#z; w~_TWK ԫ"ZgDbM?"cYEE'@wYCLmҷ.ڶQpO&B?mH?O\䎓UY31;O[sͫϘ#ce%Ou)Ь  `*j4 VƇ^aYa7F:ddQvx-ѳ|w~\iNqGp䫢pNU>lqluߥ}b?YQgG[${VЪ. m`s`ߡO'l>;M0pgXX}>HǙ*s/`SS24FM3~F1ꁢ(s3so0d?) P ^g􄚡pґ#G#jd5_#LX pKZEdhJlW8 ;kmݒ c[/\ Η'+y1j"]a։WY pƹ:gZ^5.m`^/,3z򩅝$ǮJJsj>s 2iɯS PP^AfUu/g"TiE,QA7_[`ϑkԉɄRۮ|֕C$}4kebԇHj=|SNhXlCvH)u_EU_Ta7Qwлg>E ȝo%ըzkߺy}ҴcRrmγitM&`n.c1s&+pvIЌf'NWd?wˬ3]9rݢRk3h+ze2}l+Uŷ7GB e'cG?ĆZ↬[wG8O[ +mHB=_qà !]54XGҶtT.C˓M&ohcWe,m-ӣo΍ϕ 0C}Wz}ה׎!dDtyL3^  pJEo&F -(r@p>FpKO[?&$\O &.'"ߠf_ı;|?vGqjޯo";J1-nxխ=_r+FWG+-(; ɢ#Q-'Nt_Zv()0~jQt]| hob SC~&)T)q.:077'{H8GҞs l'LK0֧@ ;<1`H+}sk/w݄{ڱ}1b0(hAQmM>?D_@u]`D.mqƉjXQa'#B z:A8 Y$d;di m*``s9jJ lA |s4MAC*4ݴV[4˪N7$U@8V+  4bLal+ u0 %ϟ4Ch'N?:G/ۮx:Ə>5}Iџ+Pȼ>BXjlH8+o)_ _gIQ3 u7쾃X="mA;t2s9HO 6͊'<$#h}>46`I ~HąHBBv&m>TO>f1ԡR8- s4 G?"E15G<-+c}N$+.t!G4$(lk|^-E0z2y0E=c܅-t`B_t ?2څ V=yOyFdl7.Ҷ]3|ӮL53#2!|!!h><_s jH@n4pZ4NIDUuډQf!0Nk BگibQl.fNM߯f:hnqt5܇u%#sgTwa@RŹCCJ~{/{uѕ324ezϫ'XBWi7|dr3ީ_W*Y$$6æ8-/OM2WگOX\u>;4ƕzGM;푾O =+ m gx-L; g =CDcx33Φ9n@''Db&Ɠ\+Jyey{a=O:l;5TО *ִHZ'Ҥg·Gʠ)Lj#q mXC&~}"lJb,ub3Nu$'IIwN'հ҇ ]}8ʿ>#Lc}E{Qj?=sσ䗙~G.'江(ۀT(Grjnnﺷu:iu#d^jn%jөo5/=?N?>auE N19BgHsj;u58/}#6x8ؾj|A}2':_uDA|{V$=r$V4Hckjϸf6Bp4;011_e3X\t|TҨ|R:%L,G꼱T kئnTK4BI_DDavTDڃ*WAMi(F(u&?6nF=)΁$7!QL>u{?p 'i*Y-M}:MzTJ[xYNz\HǤ[G@2Gͣ:L-?>Ji'42. =f,rI3Z+4^ah)}@;1@h7:Y  `1 bVW4 Wu/@jgKM'”Db=}z٘N}c9ؤDgsM;<8~/:uDh6Onz~A 72>ɑ"Yd~Iq};7gg cuy~繼](Z*ӤLln;McvbVCޞoR/>qIiƕ>ߜr/o/$mwns˄AQVGK;?ځ+5=q~D1e04MAu{SΜx^]zM_]?v>AM$>j 8$eHѷ|0kp|_B^i'SG:Bm Kbcmmz]9-G)5VςOfuL k-&ey oHaD@ٞ<饗NхZB/Wi F$R咰}%X|DZaBDU+'eB]dnfv[.N8\7;FY-&Dɺ8O  Cq“Ӆ6ç-lO:!YFA7 /P#4*+l񡋤G90&#a_N `q} QFbuٱ UڦӞZ !|HvCI*}ֽ~i/&z&RWZ(:@ۮNrK#4+,V> cx[-`74N^T'sUWE1fgpPƉq|9<>BƵZ#4G8$h)B GYBvAD >B3^UD_a;xA:5s5^m|>,gr?O&A}af˸ߍO06:rɣ 7#@M1H *G>(Ŵ3[nu#VtmToT_|A? NDB)~%J|p}s' B7 '!I귶DR>u,t+MLf X&ig:;i.3ĸ+V"ծ"r|rf̖L[9'^GxjKURKծIp%%Ys)Tojǿ/Q?yǗՙIhY8"hVSɩi 늣E tJS:X#A 9q/)*D`(`ж]|..# uiB¹24` ync$0C<*ΎF#iS5zOcXFb<ˊ0om>O`xy=˓+f2ˮϏY.p @=`R(ϴ.h`Mк.3t 8I}0w+v3pr\t]3#86}&]6uwyu֕ԟ#C',i%>< Ԕ ksߠɞ U}sj.@ĹMH]"`u8YY pH;$}Nٔ|.PpLM>Mvmbj!"}ںc-<6pB,h^~Ϯ st͜p[9`yɻж>|vˡSCxį=H8{+ЭVK}G՗/g?pT%0 f,wsW($DSal =Ѓ@BS~c4äY a9ҙ) l49C `Ozs@@"eD#irYaEO 3"H. '1Zs\{FQ|d[8r<Ǵ5Ai>jӮl/ or%\'`1&Sc ttGÓ!t@W{F=@vf8yf VvTth4Nmax\uՍLL7>$kU[zlȱRإʫ޹KWW񞛟o*eZ\j9Өy;dCd3V꺛_8~+Խz͛s(8Zx%ϱMu8N`qH˷.ˬ_6DƗhzHx_ 7!4#eIMŕ&.Ӗŏ514.ٳRK8%J$g/q'>DFI)#i)/۱cG`|`]W/Q0Twu`l|bh@SŶWձP_mK_ZXHfQaO-P)S V/`1Sy4M7E[,F rD1Q@ɲb-c;tcC4ar7wsu<t:yO@eA~( *~*Sy $@!!$tNwuýV[uw}nUWpw{sϺ3H?9,|1 # 4\Ӷ`Er j{VRr)#=c<(Xn1[Ib*⠿OPX~Ex0}B- O)H,L beY=V6)N6c&y'z;H9wPGdlAAh]Ozyo7W>[·>Jl @vZYeVJ kT _j@W GmnVwײ Vgjl8p–9` `Im[{J8Ɲ=QvS Vům+`9CD&.VZr8B e{r2#tG6z*|:k:oz [.>I+@t<$[7L_/+@~7׽v~쁴!q23Wh| Tƈdq co3i5l.bZ80Ef,'M/7G.Yw"6Ovp^}OOW6:`/w5VLVRkmWAz4}Dqf)>R;΅TŖ70_g@)l)Ke?7)_ WЀA] S\o Wrmif4GJhP]nEPY:pBJV Ke<)[SZd1vC}6zDE졫pe:v%D3Gn5->o2VוoM6-v$4GDyNjC(݃2MZtu_1O i3=z4ɝ&'.7?>K|OMT cc- ~#3HACM)$)7⛆kNeIS:v#qsckz 7̣ <dW ፐ4O~ s_Yꫝm줞#I>ӤV"缽LT'~` -3Gr!Kji}v7jUݬ8z`H*r$:r@$e+Cg|3oU&ݡ{7+˼= Ak0W{#c Occ|2J"i~.TWߤ[cCo;_ad8$JXmݪ4]} yXllz{{8tX<v{Amt.'c'6-YEzͯ|i5v߾k̡C̛&3>9aʥ2333ROӞSЫWni4T^\2l&gw>Ejjj`hS +4չ>4[2ՅVa~j&`Tȯ򵙚=fI ;RϦ x(~[;]n>Y"ȗkĹM7˕oXppAv$Mj(4]'n0w4cO?̸?=016l.{Src^ x 2NBW;W!]t1gPJQ&湔¦̅}єNL@z?́V%Nybo==Z;'8ݍ豜%OvzZ FW#b3!bmH&cYggCLky6o0_j^6J;)96ei/sO x $p4rf%u.Mt MJRܯeVUj2v_!ON(2-%6m(n[SP^_ZAEj#ډ_8ȁr4eyzw ,l&GЇ1ec ߛ8{W?JtgS|;釨nbj/xctmym/nqDnX(Z_s0+̠ܰ<ĉ$:0r E/UE ۳+%]NoʛVc̿]]]遌 UZY(ULX]'h-[:::dي\+ kɹۭ]>!,1_Ih__?J  MLOǏӛɓQ`4St[2%WxW P7 >:rt{>_}*8!;zl祏sǗ\G'/bt%T9lizM/z~kDQ@[{r}kNB?ؑy{rW+Jy@Na˸SpOնbg _r%50Aȕ Vpgé`pCC@SyЍMb.tʩ=1?_MXWh\gXI U E/:OH8{i~w |3x"8fFh0F<k  D+z$7t3WT[}_j^V+$GY] ~ҳe/h'2mm !S88,0?Lb4KX9As+ZUAZFRA$!(PX$-T/Vi,.`ؠoiVx|2$.Pb7Wfk U*LXhc6+etE S~{;͑6uk:{vK{ugh< }AeN*}!WjM*'~ mbG}O a?.s _|-񂍌]R;Ҵs"G‡Byimʬo ҤjѾmn\GE?7sTIW^ڳgoB@Cby̴lLA\hvu~1-m2I׎e3FAb+oRϪV'Be dJ/iHye㖍%p$?@_-.>fמ@b `8 FNQZq0fi J^j%a&4u@ pMFG_ΫF~bE'$-uEj KKŻA : @qNWEG!>X"=E=b ZvL[ ?iBL6?h Vఌ6C`T/6H{~o;Dw`o( VQMk^&6EGUfm]fElʃ:o˂n0;x9|B ;+~?`~mUɸC'B)I/XuQq0elBbX¦]?S],#_N~ 6jˆ/ &voCr4Cv7hGe$g ]xN45R&v ZvQ ;,TJEKv +ڶ]z0"ekMۓ=gЮVϕ)ʼe.y+=E [2=p'hI3I8ӓ< I"Ϗ2 e&5/2VNw$||ڞYصto+Z)ТEiG̏Nt (Q%@pEم]x&3XXPaE"G~x= mRJ%Q%)A+BHS%}<#)OvmVi^Dj3.Y:#!?Ǿa*k]kǹ@P7!7D&F`K ^i#Rf{$=/yy[_}q#AobxqK:y5{O`d *Dߎo(;6R(Y,_0Hk:D R/\pֿɕ>ΦLH$V?A8fj|3E pEEL 뎗ZMi SaՄ ggc =+yo?ger7JO,ie˖m@aZP_rU|֍nU9l'aOi;}jYz&4dBCCO߀KO#Og&cf9Q A f tyjf8-{4zc <<:!tt^чg Ѧ^htE~.)!@2$->S~t릂LO̓*:roʷ=U厞As_( 93r>X6"J?h9~˔~<]I-l!Y^-xæhQOJ@P`Z(O3fO&-B?%uOetit %ZFPө`gl A,I L;` * \5UKVBi] h&MqN|( 9uTgFm 7gg`aiktuLzdn)L(7Ov=mX#s[i R:bҾLne[n~ZwH} @IDATeE\g$ɓuΌ%}?Sj%{ WWKmN9ۧ@;Rٞc_V'hTlb>dF4 Uݴ`BE;7i3 |BѓϘ0-/f%ژ˴ <mt-#6S==A?St?Ve'W(re̔ZmN650}ƶr/f[!m*S=2x>Zv~<Z,*'y5=³|{W[mc\ Dk9t![*w02P jל!z)5m`=^І]j7ۖbe!xD^WM?"%{*LЇqh$΅΃KA$,IJHx4+uлB\q:Ek{rD/>O6ZJ(4B iXaG[ȑX'"iqEAmr!_R#4, *yI33A+P4M)xPMʳ Zuάm7f=u#w6K^i6|id+F{%@o-Æ}ךn v6ӝgu yˬ e;8J9 Oo̺8qfJkk)ZDſ4}OM&A97R $,bn(ŋl!QDP0@ճd9RA7TĔiV7ԉm`0 0F"iuoױ){{ KUys5yM )P瑋!4( O [?g! S/d+fu1}CglمO}r#:mxarVp+NjQS *^GTief=p@?}<j>q>\;1 uIr@4d,嬏st1?B0;7!ZK>-Ӥ?+GtTL*gw]yQZ6r 38LRpz?~9\MգNS2?2t+ahle6̐X4)'aF_ةE "lF9ScW6>Ym=y7M=.JfM^Or!Ӓw;tZJ;mN TU^ 7@Yv5SYZ+#@M^!T(Rs&N3]-?V*J?H'WcqX#b8LM;jA@Q`=@aZm0F{# X3V`}gsoo&m_ w˅1[}Lw2|{ %2P:8:p}Qrx;2^f4P` u{-!q!$yϾ?NJ<@-4'sW4]]r;F=UYc; sO_ c|U=D)nWWoQ y&īi3Vcy ڷht T2$ꚆAF t4JFl} 4:::Rx˯gѓKo%]@['g|[9c|sG7겍`$*pr)MͺΤa)sYxvW݄AZ7΁jkloG)"|zG{̎ 'LiVІZZuPFΏ*4W $Oؼc9Xc7rK-%;N{  %'MB~DvfFٷ\rX>ߐ4YXW e"eDY×& z3{4O>pF~>)u2N@jn H׸"tVl}AYd )'yk!X &,tnߵJm[, b+-iC,@Q9zoR c?<~+͔'?m.}&+0߾s8 Sw (k㫹 :c怤  ^J(фp>1k::F{w9Gr:=3Gon3]mItvx`% hJRFÐP <5,4ID'M<*b|# @Lfmi?S"Ŭ>SɫͫR @3Mz<зto_iˌXVe?VM;|غG&7QAϰc^rی2e"TTv:6ksk_k3ez- <6£4:ɘ9h `BusHh 4F"M@!y9/ľdu:hRV,{b1V|NUX3ۚ0YtO4MDՋ.h FH\kgfГ@i#[o׮]_+KfRÕgCQgиֺuQwᤈ R&mO-_m|>H纨[?l9hq&lMv4ulI4,V D5 Ok<]GN㺩"i:>ChȬө[ !9{a#9)x[x(ПrnvQt\_q4De(pPAi866Q<<<haΤfpoU79S]?0drSfkr@IPǷ(òb ՜h8iGtl5GY'TC'viv 0Iipcr HlF6\Z(F% {*ztoڴInT/%r ڎfhXEmO !ԑzC:Yr&I|'?U9d&(lܴOrCڄJh mO!}CSHQH EpX0g9&@(Qtu@R2f+F^OV)'C9 u$,H)G|EǴ!i\{$ a o϶gc)k;$9D6O+'M3:GfhX)Ղx?@ Q6{p`]Zbw_U_%&J.i2|bfS] kowg1M\)6LxzeI0:s }?mw_^ fal~n\ty-3~8x ܈JW'Bk̷}kBIψ\WXX* $'RlΩ/*WǷI/0ӏMj{z~ֵɂi>@-/VO W7hhr|D{D1, Db(Ntc<ۮ+9py(h=+c=+׶#d^Īi,Ź*wwЛ Xx_^13:AefUV=0C+JB=&Q oz̮gt{vX'$|xːj|C.3^ +'CǎH3g ,ůx~΋v`"@ീ;o~i1c?k 1V2$2ntL-"C#CMc7|Ҵe@RW#S6V{̉zPG|hXѱ)m~WwoC,_o[oGwG{O5Lz H; %a:[|ᘨkNr2m hkc}+Q%+ϓ 6LvuN6@(QRt^Qk[UMdziG4?f +A*0h'0BʼVca;Z%#}VNAhto%n {|FwrUK2z]cQurNtZhF!=SY.i.h2L,Jm9{έQw'crDwvfesםhຨ.}ލ*re!'o`ӯ=>h;;I u|V 9Gu=H۪GFI=DlլsUA.lImWRn/&[ (8XcvVD]]VA뱽WzO8_OES_0EWLSxe;8c8']&qeoC,p,3T1ºK̶ך.JoDiW&Xpu6:I 'ݗ2z!1s9_dIT䢳RVsKNbx>ߞ̷AZP |g95fhQG^]'Mf >15fK*U/ \%}gG@ZEӐ:(wӒ؈^4S$]ԠO$'|t%"ŭ;}5dx8t{CQ H.$Z,p`"\+vN7i(:]JWrheu(:O8bcp,9^ɀeԕU=“z}+VlvԄyپ΃3W0^|x Wb4[W90kp ϥ6l4i"mMcqDŽTCB X=(9&]/B_O6ړ'#*]\hxtoGk`kp&_Nzusypplwu~U[MK 2YVjGY$Km[7瓛|MJzIslȈ[i*|b|VWm^)(B r/HZN+AM;`6zwϞ,Ǫw s^E77hXhrg9nĉN9V!zBt}?S؎'hY RwKt)qn5 殴:t,z*'9IԅlmlwR^xn?h.z/0gXxF-o [G!wQu{6-V qNe'=A׷3;Fk:dxA&c'zSܠ1XȤ, axx |B[_klM+,R5!4IH%&$} Q6ܼY6P`9g @g+©Џ*]lIJز!Beؑ VPō*mՓBl5tR狽1+",tv&in~^*>R]Ȅ 'D}GZMyH]9K,.,(@1eN@E@`-,6vńS;Ȏy* CfڈF]* nSp&Zr Qq2"9x#mPIb'&eqLaɨ/f ]ۤeוF,bKⱢ_lJRod ?("QtDwwϭVz,Kc_X*Y=]ƏRUyŹmϓ2 DOxa&}PX:yBYY/EJy~y&ڻb~<8я*/jE^ 89z㟽߼>c=6LINs69tD a$cTCgaæ]G[,eŰOiZ ֱQf2 u*Cc'҄c69w1#qHaz瓪k9tкo]?%4_lH( ͌Ί\'AteH߷o+w+f FhR{O q<oe7kfLv3ldh$h  A 0 AN4q`Aa ;mrpUUPn$@ O,zNd آù[y. U%6'_\u j[LQMC@3 ] ;Bc@O1}ܶU;NRw_14U꣍X=׾츄^$@@+y<=N#0Q' wR!;m?pÛͷn7=c~sS?7J61$cqFro$1csR"Ҹr䢠F14QİQ<1u:9c)@EF~I%b]-Uz2h:mbzIe۶ms E hW/W.q=/|K_27U36vfN.]ƕ=5fHDep䃼SwD8ـE'{RI#^$ǾRM*Ip^d\!8Vl>/ʬiӦ#dsV ]ki3._owan_{ 4՛=<=P0}@Jy$j hJzF$E~Inmd]/ymJ޷o[ɞ^ׇ"'Pc|ȸݻ7C1ELob)&c)EhHv &4z3iI.IR9j m$&'۫'gLlL"K-,u?LE=<55m?aN#G6G351E)p%S*E]8$2/5gWG޵vY./- CEJɦZN؇+K^RgLy=p@uP9MB @ ѩe,XNyk;)98o =l,NuQ3*opM;:ԁLgD.Vx|a:zH'?gygC_ֲ4ڷ fe-==ڵҲ Zi)aFN'O6h05ify, + d^'1}"x*TtwD-wn7ȉLӂz 6ǏVSA oy ' k m=OxTs( <,o7G*h X8_7}6^!}JŗG+wdҹHj_Ԯ/‹N,ǩ\$yOh[TE5q zH&|#v s7'L 4?1Ƒ1uف;'&#4_9" 4H)fY7mL#046Πl1uaFHFY3ݽ sj՜՚Yy'Z^r+P$C;Ze" 5#\4{$3BѾ.,,—\tuu,fWX,EhnmX_S2-Tv4(p0`;#Dǟ1,8y1)UOAn^S]*'Xmċh ڃ.!]Teþ yU)(1O>(8QF`QY6֋p=pfK/E:.ߎ񯿏@{hh4߯mpCӄ/9v93&2[9Q׳q|;G`1T[?~zܲ}9q4\lvws,< IlPѢ`s\Temg#!]}*`y_miW⏏Ki:noNT-x}CzݴČugeT"& @gg'd ^ƊO7 LmyI `Q`By2W媈6m/bY '{lDhF3aY"?⧜P+ N7#xI Pi=@bA2y®݈{-8gX1 H=VEZYeh5jΖ)sVUwc+|0ъ \ȰlxD|q+)H:(`Br%b|$?Ɉ`@@B*ap`3ds0y˧) PgJfn?;.tosQZ*9t%G_ -yHJ׉}{*Un]M6è2y+_Asɚ7@]+X _~'af7=7yt`]$!>F[ kL.QɖHUhCQhi`14mu]գh in6kWiF5UTnktN+(7Ѓ 'qez`'md[#€&n^o13_YTNyZ\i"lݔc)D龈qH'bӢoqjL Y!棂7`z{̞}\;`l䖦y(#00B{`A43c흠2x^FjUNmp><݊ @>//WstR졧Q0aQn@T: B_?/p!AQ3 Tk?Axd{M>VO y>WpUhdgNY<'%p $>Ϙ2 ]=Vkv3L{Mެ@C[$wFgWGn)?}\x?C3[|-lyy +Ra~ \c)m~m\砘 >hQ,H+emsRajmm^C(fQaDBuqIǤkl"DzI4ui%I {uRGGG?]{7w7^W:e]m4Y)=z%A2)HN+ѐc% `6c!\Z`_, oJGuᕣїqL*Y/HDK8g{j.{rm{јsϭ_,܌^b\Xs9>lВ;]6CI8' ꉠkʨ>fuq٫~ tYU3.shCh>sy(2,As20v:Dٟ21H.>*/!!:O7VTvvI4,i?U`#5؎h\m5c!qo5JLi'r% |ͲFJ>o$ \iH?H2|>i2ї #eڵ.'7P*Q`6XN︮V($ߵX'99"Lz,iIv pE1^n6=4I+ vql2x.2)2C>rn+r6m?[ͽ1jIs5t#OJ QZq@Q335 H.Ak zp2(F8@IDATB`أCZK|_*  6ov͡փ/2ɪc+/b z30ySZgx,Ic2?T_gs.VP:̣k35v{;XWΈlSW-{ ^&z-`D!I#1*@Ҝ0q|y˝.lb-;Z| 9;!(wvILz[[, ݱ>z C(22'ȓt,[ףMkS I -m߾4$=貦ӰxٙH<f$qǺth~i-cwt;ST3NE҇mCgGzDkq0Q-<1Փt-^C]Tg*gA,n$ (9w^ qcO'~t_ ׼=p+{Ń];#s<2Ruj:>m_ȴN2Td(AWhia)ahG0h'ju<;A%6=vy V(f!P^K0&SzP9pIb mp&L4c8}}OfUk@1_ {NiM^z"& +ObХXsC]GaS|M‹_KPxnevO:TXjY)uIu);E`F 'J4YzZ\ UǏciZ-C@~Hv{0I- $[[z{{uTNkf[ҖM]̈4Nx*zȵIr l~X<ї3< %lgAh(";'>8h: +0f8||gaJC/D0;̦/TQ4wo"2nr6C<;~L4(CP+ _7MbzAԾ ;ՠp[y:qL?qrae?9Mf a`I#NyoA' %g9kEϹ=|*KzEGx$vQ= -'mk$n{qͿ=̑/7=`^=__0W?xh;7Q 2`A瞖#J6s|!Yg_g? ԧP`(o ëGKm>em&o޽6rPK~lǸROOY*2J_^pNptYXn!_'ФL `|8~ʳsfw]O81 i @W3Uj_Okr<C ` IA&HC"#2t>TI¯G*XY2!/u|60k 2g(Ni L=cOd/ZL)=~R_\So7W|K ^,*cmb<|{E!fPt>y*~)]gTkۉuf.JLMc  FF-L<w>C6FV1]:5xNZ{!XZhZt5ﬡO@h:ܷeк%r\kܖ"啅VLy ܌J;(xCOnܕ 08X'"c4DʵN3-n"U-mIzbbGBǷo!59Ek;k. q}y _r`-9rb (̣?p=Ƴ\/W z]fr "\133~L=04 4gQWwF)d#\ꁮ3r<]~tm0W|L*a~)c_4|̤4,*GXazzG =AC|,U\]$:L3Ƴ&NիR:(okλEdYZ+kK/ze}7~j|e|(1ė/e W/~%ɝ/NӢrvI41OtIx]oZ/i"=ƹ~HW#FKbYС2xY?1pQ VO;;;Cϥ8ZO,Evb Gz8/GKky& ߯6 OchZa$.;XNEfSI5󘮶#钒5 (Wvu)=@ưl1ڈz02"mcC:?I)n%CyP$r?뢠A'}6ivm~A_03bWq jf)<0΁s0OA4ޠ0?G 끭.l]W{pm(Fn5km;̉#76]}J4~sq&c.X 繲Orv ^0O>t n,Ǝ1M{ _F38xlk?'0/)|t SK XBx=䪪_NžN*ҩu![i/a lL.zd#\ǥrjh^*6{-P+>s|&VbCr=yxZ4CVvdh.F( f?3 >&vDvE$ z*n"sc>''eRi,@\cum%Iv:K4Ew>t6q<#uɝ^8[0Rp<*J W:JtEA ;l@ƀplrHyf;fvVPA O>7@`~ޢ `Έyo_bs?-ewJ_U2n2Z>8pꤋ"}_x8FEWrm/}屴c$ 2ȖG͑-rʓEK䠭ێa0K]|Cr A-ꦲk=9?C wOC*"i!Q̊e薫fѴ?ZHעz)\x0a}/2dؐ/' r0VL  k })K}_/Cm>]ZY əR@7Rs'LѴVdfhڞ0C|2<7wu~ 1ʑA7"#:aq91P u&P=+(z/F7F;Ѷ 66x2B gDe K)ɔ^כݷa[\}Ε.ϕ',=0q13q Scfnv_M- izJV 5W=g$ >RWlߢIaVgG(5ɧ=7~<DcKG$)Y"s6` 4t3>~K\bu$2G,W;S{ಣ*N' 2Ȭ>pWE 剗 U# B ft:=뫳v;ϩ:k6lqǏ.ĕQ~=,|Lx3;vom9P$)!X368S([=?UCeu!V /L x_# af/Ā}𺞾5ՕO˞DZ04Fg]_k~|r͵OЫg̴ׁlYp66VwZ c`GG,39d'«ٱU/epؒ`֯/lb"fgYV_ ~(ꜘ>$,ȢStb8#c,:$eUBc4ԩ l x7*KApR>d|qIB *,E;@ >iָslhc$XɄwZ/Xm0>(( q#e@& dG/FOȯ`vW?V)m}:z<5HבXqz߰=BwlqX5䯸 \q㳇C,ёb$sAY"Yc\:gfq\qpC3|[7>}ndE-033vڽ$XRp>B~eG *R#Ύ@c`+X8(e/y1X|| X29X.E2i* RslEF Co͚»䦆q&qO~47O@$Zrͅ?f3F@$" t3>=Z&lg2:83oڴiS\NN0|rܭ$%*l Nrjs(:\zPU OqX9|ެ |йӈ>L(<`c/=V[2F˙U&tGA̭L>,}gE1gƎNy7!, ˉ$6x.{fo-[&kub2/|f';3~@6IDn!4¤ĈFeܞ0ٸXvMzk;罵uW]7m}V,ec/9uv$?NXVNG$O;], q@g[\bzŤ%2Jwç~xr9|x}eE77'>}A*o|)@\m֯_OMyGφ:&@d)4ݼy3f=L+zr3XWtU{TEZ&"<] bX>=ײ%L/v+6'K^D9A;qℓMC\Ww<2fY+˦RI~}շܖM A/2֭b}.` ![x1樓:1Sz{,s[*fÓ(r!qӆ9x`V2mYW8C*)轁UUF(M5ƖЦD}TUAk2I5[Its>%+OpC܄4:&'ݨL?(t;ip6n=gmw'=i}îM'ҵ)" bׂi bYQsVwx_ ^JmsMp\@h`ؼkZ,1)b1:#KSJ)qge9/QNR QFV=>;ÿyFS[`~|eVov0.sͅ0PhVδt.O.OKt*(N :|MJWs|Mjw6sRh*\Բ~}}7t_+uIy f׶ϵ㊉nPpoGgkp] kq-2ۗL2YMC&;$5Qkj89.yAnZlT28Uzǥ_n=.أdp1:&ujI1ĔM9U&oJP9@R2HOS2Me@ԕ&Ď"ly%,{d1:Rn.LC|vnȽn2ypM DLLcRǾ3fj^28vc/qɯrɅYMBjT%@kNߵj ;i5NoPp2`1u HW(ʄq\Lu !GYN[OZ\RTdgچ;.{۴Bwd=dh-pQwOv߿T9q7~%0&`';f8IJ扨3C`=Iy+D; e1ePɬޖ b&\y4( ?ӐH">ol+wٲi~vOrxq`ƵH49 S+^`-ƖvjQgH6PmE:8)>1[ou7xϹl )6/8e]2 9I\\=H,+v`ۥdڏW[cU/EV9,,'kP&Z|$!(*igŝc 7y\}ׇ8L8O ^ħ'0^b!g9dHRGB]n'uL ^oȉnX0rl$H& d`lH>G1Nƈ|\Χ}A6{7˯rm+?A~S m s|&Kb5MM~5K΄dSF0HA>k5K.I~db)v)B.)`jPdr<y/!)G~|-NM?q|Bt_ `㍃,fp~),~[_*S+ $h4e\g%\$1y&ѣxΎdH\"Ie'|S&≀k.Go i$|4VO kճdV_UgRջit_*J7iB&$@~z_6&e'VV#䂟dFU=\H&a1mEtdr+@?6mERs'9@R2/$u)TlDm)@gSNU#8rS>W\b y8'?:> RI2m #R 8kcU&6_N5eOB]lX :F'*<,OL8O˾qB&bI-.s]7;lbwlbG&P :VB!шBȗ.1מPK\FwR_'O?8a0,=VL؃Όvh\V<娘Wx)E?.T 1j֘+=֝sɓ܃?&\4RvIw|zdx}~VpOo*][8Jq?'۸mY2CgL-:KtZn%֍ oY^_^PX_S2J'-{1-ݽ؋I/("uඊV{66.B<[':dN;->gs 2/'R:ExC!)SGAp)^d_ț8c<*P r(# #`Ĵ Z2m'2-DZ Mg&Bi ʤ$؅ u)@?5rL& :Y0>tXV 71r\&Vg}3~eZ&/3D=KGYG!- h_߳n_gMm7I.)l`Ѭ\򀭘[5UɄS'b#含#ud1OU~/{3Vu)_<> z{|py寸]\*ۿ}+~E5`qǁOVEp~a9mY}xWr-_q[6ώ 2 'rTL\Vu;v`|n.*fD6lnԢbX 7y-MV74g^TZ:;G'Z2Ѳh{ɥ_*Zߎ O߿/n2S rU(*0AQpw 2/$msnk^.׵fC%tӇ$6EzWh{~kB)侪o@ȡtORJ.\&ɫ.yG.qx/liwy,>{n>OaBt$OH:8 6(4ǻᰦJs+i!NAc3l~HWxXk,&W`}n3+# DUeIvf^˝ s8 'jɖm3ZeڰWPgqBm.sM, Јn)!_ЫLvo Mnbz6:XX_˛[ox[a-MX {,/}KFK~$mTmRs_GK2~!s؀]&70a_N &~q,^(ȑ(M9`Jys538z<}(KpQĕy"^ͽBYtMe?8cxalcC[k9,_OMj< p2gb@&xͥCWL#8]&2E]+RR0PfTWY2?v /ǎs~7pA5P8ZO(d\'$ ?q*9N"x<&4TxLNܒ,p_FߕBݟcr#>@I~• B$rWI;H6G)8} ^2 1椖N"vnj'W@B]Ijd| rV娝8 xfUSA.F <"c2[-$YL*7*ÛŘ:"kݝ7-XF `ĮoosOxEfVǜ,OLOp1F <2LS,DcXy[mR\V(eo(oEBdhEuN D<.?5D ^\pAGh[ǖE2 IX/erW}Y2PV[rc ́qq]|řix s-W-ֹBGVLvPYKL`\#5Z32W}n{1tr~uț BV+ͲC[{\PtJL*`n­~x1v4n7C6CY'qza/?U.ȫ6tb8OċKFb{+(z;č8Z;T??'ԷTr/{ u\q/yQEP.t"pVZšvѐQK,PqX`4ImF+yv <"OL6ܑ CzPVor*P8b:šbJcI<>r*ťq3F8 gL;k$Q^ M r<2˂rr(LLQfHC-nt7nrbdvޞQS` 6[hmYyd^olyK6DL2`S60 PH&dʅ6dH&$LM9hvaEZ*\'P__S|k,%LGe{Z:~,Պg{WL=UﭴGF6ە2꘶qζBjgbE5dGc \9>:,W(w~K~}D <,œ6>7rzktA0:qb@zuHĥx d NӖO!&q zD9bxtbyYf5VMOy~+Wb063V'G.6(5S֋0E=b9Nav-:;3ON}ݰaCMη 2tjʳ&rBNスN;RTxݾ}܉'Lq76>S2Y0i.絓;;=zemV0ɀz2 [I bodb;sp.:-ȤÄ?)n\&"dc@yJ5@hF ,&GnOB,dF@H&0Idp$Crv r ]2$&Nd$vb}`?z$Sb.e1v9}[݁;?[75/}"m6 u9A PPJhH Ls;KfbɊ2rOܺu{hs lj "S, ^ߟyDM,_j9?%{ܾ' cI0w#zU xdr^#(`M~ulqW^$E|$L6`UZƤLB`r/H(1R/X0+XI)YIx߸L *<Pn5ZQӓN'y8ܟ}m`2ClU^ ~ ?eY'gc C"g3m"llwkr_)uӧν/wޅ߸_!d?Q~2 $?|'ΎzxF}ù66`/q^ؐ_2&i'zkGx*.chzXgb瞜Yy']w(hA8fEp٠/_ׯ_~|m"98s *ɋVUw:N,9$lR2(]wgsr?*jr'-qYk? c20ap饗 j G]e#n=*x)sz\n3_yNabA.C:ı&m[^y֝] : ʡe?T\as21#RF;McAn@>%-q|lTsTkdhZ~mux) !ǺPoJ}Jr-7m{>$s/&CL+*(P*U,d @_rccL3 ,Oal8kaО9NVL =sb(QX̓9w WG{bn@nA8,kL>$X`d"YUjAVE @ga&%p\،rF&pEĘN 6& oKW]- 8JS_[6=>{!\ЯYNU] .eoPǍe!6&y<$OK8' r0/M⣼ rQZ$uu% ArN>PH}x99 +f5-_P&LJtBz)Í_q=/D ~%֕[ X\~|ܳ|S+8UxޟSPkyss{r_ pʫdA%F ^q50CJrk=ͩk&O@k2- ֬}O7}ců|ҫU%~xo`+e/ :P $ч-Cx,`CrISzE9 Vo'Y7bx@ⲾZ9S Ue^btMζ/K|{;=8˓gz(b]] ^8&=N9b ́Gv%(1u`m&`ھiW࣊(r֡}!zV>(g }Q34؀˔ULxLjkhnYaL\/t̰~;_& GIYm0x܃.% Xe_nO$hdgH 'A}0eW,L>L䏸~ޯ~ܠL7R?ݽ];Cϭnwt)5u<~\!r+O@iC5$ sͧZ1rR܄<>^2?`ASJݖ/YF ?L_P}I##jGK~|z3[@2ę^vVM-[iQ>'``nY2G,\wSSL\[X2M-饓%nZMp2>¾GU lYEߟb-Qũ}1Nq22<6ѓCeF۴e۸yԉoϖey a(G*D ٣b|lDV- JxkiX%0'_&eSFLl:Bwt]^?@?W"[S(PP喉/+}/$1X]pW]]Iejy?9$ -adï4.dV\4R{܁`WܚM{~Fyn#2Y6=|qͿV-esV38㤂$y^G4`aZ]iP,B+5 Kf!NsG7bYeZUF }ds5/t?Awd0o-ۦ+R]랟z,t&aپf?Ȳ扩CF؀T#vK w> gbBP13avH5IK] (p~V Ljõ< {X[eϘ|Ɋ:"<]p~Kg]2J%w`Co.kbp5~ɥ ̳9e޳}Y3\zr-Se/a1I3fQSf8\Fs )%.Jk>L]9mKeAGenĀi+'_(8*+ d`xLȭ LȬܚUع~vfFx="jF ,} l=Rw.{‹~WPg(L[޷}u]x_6<ɟGXe Ώs1ve,Q(ˑn>`)\tRP=⢏DgnqE2-ee]LY IxVu;-ˮZtx,tpbe2ckm$eCI)MlGWŅ kbV!+:z lQQj,K>`I\*$Z,3W%i"ޔS2G& Y,(30J$9T W1 VsHJK>d֞eMС~R&9LʄGG8& d`|2a0xJw| ;k/ǵw%b%q|8pa79גwqzS-X~?v_ܷCq,|g1z1ֳBg܄>X!؃dz!uc h C)XeUnW[`іF8lVZy [}=y?:aʸ3tqf=9 2AڀCŧ<!!ma2}J)y `/+=yF3aގ;2pUe]@< X}[g̖=Ʈ948D_P'jiW `GL3p Ә$1OagH4ѲT2qϫ)e͕:H x)+'b"7Cn6v6Ezwk,B0 aٳ`dY]L 93q3>^9?$_:lIy36N*JN(! ru{#Յ7 urr!<Th%].Gf\*3~`Jd2\"P'g~)&Qg9)T8S2R[t-ʊ+c+jqln<% b^Ka<elne 䒴O|[p3tl( l|(Ӎ*& youw|4ϐ]X8qAZ+=?-os{Oo0—vu٤Mƺ|u*.@dgu^IBhkD9qU2OFVdj$1`A q,0CL⫟~p>.=Wn[÷o珻XT~aAoK |^'ǠX?$ğyRᏝՅYH[yyl԰kjKFE&HYr ƃà3p16TN)eשVn͒Q &7<گXyvroMa- [Z-):nSܟ }{#ɲeqhi :RІڈDyg'S0"oUL^,⼴sX"NbS_/e.Y|W6C u LϝQ7: nRnI>cn\V4Vh3ox؂bkǵ^)P;g9^0j%v_ l;w+?9E*K"ql2U)SiY` S)d,_"*ȃ0} b367+^b{wLz rcp߾>|JWzjb?sT:T:zgK:?&opd dO"S?om3'GBqx *{Xc,eIցλLI/lUy^WqYVvLduLFmz-,=95=1rg&}ќ=ܡ5k'Te+ H (h7Q9=\,Cc 2)?|ŒXT&oYǡHWծ1cL?[uK!H9uF|yml:1apnWkߚXMNܫ+ 䖄!yl82pDWLD<-+ + r+ι w6wz5@1X%ܖԲ9&fn#5?͖U:ݶ u\ޭs^F4K!4=Ȭb=,Ǔ2nhqMeOJtFVbQ'nL.5]}^KYxh=n]{kAk{m˟{_`3w0&)jbx N))4#ČRV~:Nr\Lc.%18OCARK9dԋ7ABr Go>t|C& ]x})Mdpc2a 8$ú`J& dDcИ0`+֗wc.2C%t.gdcYCS#ҟS]J`xx۷uvv>yvn[[WW\o~0mxK-Rp4T(} Ʈ7ц9Q.;OqN`t M ˜!SQV*mMlڐlX:q℻ލf3$]29j.$ewH{@ܮeuR&Np`P[A簶d8G{z8daerˮoCtAk)C,f9/OyV%xMt,#)ryl\ϰH]DŽ;XSZ[C& dݏQ8ʦƇò`N ?F0a0.ъ2a059)<ψv{,](x[\GOFbT\(]{Si :6Yo /iKf(kڶm[Zv^pr fjm몉YJUͶ`z/|p _ǫJ^H-DN$pBA,&dBd2{'`¡qEXAVf/s-h4*crrSe2ErbI˼1,CCMz75P%uUo8jL^DϬz7B!%E>)%o^ Z˙NwW㱀K!ȟݽ3 }_Ib_YfE)aJ8j|"hlღ0@iqBqzv$CL{ԗ|g$Qorcŗ[nEEȲqYi}h8q:) 6q=X_bR`?"2{CcI".Pa\}Fd0 Ay 0f2Q0>:*vv,_/oڥmcM&=n)y($U !3\TuF6:)C7~u9)$bl@.r& N^H[Q'yʣ!gX[(7n *y}/Wt(2m^douZS||^-c.@[?\<ƥʷnȿ?}[r/{)Vߙ"ã) 9޾~. *kkw"ÆfwZڦ+ kYd["{DߞD?Hg .q,X UX'6'OasGD@Y1áw-CҶڐ}OY:ȒWE`jH߉ їbF%$1a0xw V$SS2a'%`|f75|!&ը1D2rkn`o~_tʯ +{[w|}`%[krTz.Ӗz^*/M?|0q0vB36ęao#'ɻ?P_~YDT'18)Ԣo+NuepyXesVKq:M,:/A=% %坫y ;Rt|Aܺ+vnF/۷~ïgV3HEwc>yޥ^އ*֬ ,8zŶ+vUQ8|}  p &ε;[;g2R/AF^"<=Md~ Kƀ'ԛ>p!bR6\Ux%gd3>Q [!} 6ʄ.Jzʐï$kB摭S*k%.}d 6>67s'{W".=nЁ}>77{΋^QՇ; /$-SD5:FxUmA0ExQS*mcbcdE A472O=\LvxR%./ M@ydOю9lub0r/adV/{Nxwˆ s|||.?~r_?:x-Wj__{z e-ZGV7` j1M1a"B`;w x9V:t >xlYRh8~u]aqH"@DsYfdɋ_Tex/*l2p^g}@@a6 MbCGp5/tߦ*^Y(s*CG_|Zk6{ol:W~6{y72\SrZa. 8Jh#@x=aAoFltVNNcC{58`.IU)y*fo_|}YFH^tڵdG{&[7n\ ___u~E1\@ЙcUc o}0,C{]<(jI($y|tޱҹoa[d?ْ{S$5|*Jr- Ce-֖-lw˚:mVgң0Y^RlGGG ,ѩ⁛eT3tnbljnuO ;r-K?.FjR,g:Tt<4 (UZV&P2W+tjDDضJ,;,rыDD{غ2\b2JJG _u+Nئ%1% #y \$}Ģ1wn5o6^!ʡ2> G :T2L|=rWQ]{w~MNAt)}eqyAc}E7o>qxY6AR+gqȑ7WFtPeyxq@]%iedld/>8Għ )r)( vdˋ_KyB1ˏb|9 Q8c,A$ďi'x(C^$B&"0qu78 S3_^Ջv)M,W( 1NXQXouFR]@RȱIm*8B|J\$848O`lSFnPneEY0Q#-Iy,R}z3/{ۺm>"Ї{!u!A"IF2Tx 2o :T0%$P2/.HM"JH;u!nr5Yݔmkݸ+70?3m=u`Zϙ/_C^eA;- lz1pK3\Z+f-I+-907rBwwv__sr,ԧ>U'456V߆$Ն F *-0-KrHf`&0 .M]w]ǤAȻz: "6wnhU `k['.'?E-TΠ \'X&ޟ-WaFVzkxP`MAjYe"Pւ2M7 a/+wn\~Ͼ)q|mbEaTL(b}_ İ;&X5Ve*CݧBe9&KF}m|O rDeu ,=Oyݗ af ۍȟvqC=ОeґSz&CM7>+<~׾tE.+5RXECN^-_ã2Hb9(S!R[6mZ0]Ks[] LdQ-<5ۢ`AkkkuN<ǯ` GMTXα \(+pT,޹Rf'=vzDRĄ6uww;O_VU#Gdʘ,AiiivyM#h|ܷz t1uG>o:kɔuAoc!K2I* %ՁM/"}㐃MhǖcwelͶjӔg6S1bhɍʹ޶<`UW]_2Xd e (0ǥf]ɩ<PN,kKC98wYflݝt ӓfxJ=}\SGlklxݾ}ܡCt'N' Z ruU7NPǠCM,П{.#RW-l.Y 2aZX0'aN2LĘfXHh@ ~H떢I<+C'T$pdrKDI/ ,o d x2x[Iɡe"f,W W+| 2 z\rV{b%2OPoz-bNcNkoR My2PX,e$Vs500)A^:{KW}6Rػi6wbsg?WUݘp >8 2E)S";p^K5&CBe2g荨CewmV=i08Fgڋ&9眃_}tA֋.BaPOZM=+=&FeM[nMYMa0=5EU]Ņ@b$k>POH}}}/W>{<kh`HnA8#*x |#e꭭M+dwkP.?.0V)4dA' pK x0:bI lf'fb|BbcɆ[!Ro6XM&MG6;5/xI'_4y8_![R^y*L,unp'Y3 Y{|*mR:uNʨZʈŁ3ԡIPClAZ]c9am4X}$Maneq1FX5-#A\O^~AH-;>gI&/{'b±Q՗oQт/SRcu&oVu0`LaM 9>(Q9eĸo۶ 6k Qչ .7mڄe6̲,[|k^qgں-ێʓWa֯__803'VoivL.XglܙeJ534Zpݺ…`^#yfif%'_myXnA8 u?e#ɂA7*zru xp1$fI ![ݚns'0рˡk_5u_?yYYI)i8-:`+p^ayV{˚<"5y>G*+Yݓ[V0v u*mqճl9MAS]r࣍Af8b(Qʦ> :NU*$Xq>o9Ȫ|sc:#']C߸~ޥ׺s.AH%Z /@C|GܽweSS<$ω 2>c rL58S|a[rU}.N^z'.W=X0%TEIe5eEt(46x--ǼAf͚+iy4P{frM#vj̛dƸ\Bg,[=owbgq Çާ!YUpB& <`dtDN66/c]䂍cb~VyLeؼQ~FKW../mIrVh  'p=el~OŒȤ¤0>6daddP&#ې,uJ'=%os;.y2F&-$|W}ʼɼړ6L>?Vβ_D1xAN[U5h \ um{SQ5C\R1*,2~5TОNpbxȪ|)Hj`hGؾW?>g7&ў%u~h?nscԎ ?! 2,ĩ[Fs,(+ zP%r}Uz}"m H2Yx:ۚ#]u<GD:Hebl@cTgjblB <F 6腍Xȗ_$ÆǤh ׷s%W?s7@]L%zʇ=@CZxSpELKH,#uIX^BNx`z; x/P^DqW6B2mXOFO\{YVbnb,j?9rOU202~ɸ?ZzCE9ơҘ7wfUOMC6~Y";]72[]mtEm.}营 ) /f=έE1z ^郕p{}vC2CA}V1i#N/ツl 㱉&D V/$d\$|] qƣLJ[QEGeI*;0 $@IDAT|WG>ǼH7i7ǿS,_!/L4?BauAozLq d 0r@Jp#ex~g(Pt᧵o1{ [.:R o4ꆌ$W#T;͍A7l")`pk?~~zNLzޝM j[❥O%Mw5LK\ձWqv1z ̡B(c=aWc%^Y9@Q#?(V2 pHhImF_+X!{4hHzH;skX%jq/׵bBy$ TRVrSglu`C`c19#WcD `7YfWHMcňsOE(`2hK|2_{~|o-."{b| [x%ʗCţT iо(#Q1S3p8$׀&WZ*Pc԰b >Zz= E uR55(Qt[,yojkkdPL. ;0 F [8B%\hDG:u*V3 xFy'y-@WWzH;Kmut{vn,`1԰O,7XY a1]j <Hbu,/$,W_a͠tKJI9Y=M }\Bf Ð_(<*1)-u.sW?Wݣn|[y8}B x @ \,};.u|+5]R_~Lc 9Bx}7=vgc1J8lRxU8[_b1mijIUv1&柲"gZ --l:dCQPG@]mm}ht5igwrܵ#Kx\ΧG29-KUN_W7i+I;\ G6N˘6{wj~? >req!㝅x^)^]FE|vl9ȲVdi>EbEhkme<d5??䷽3l߹s'ki(Cj r 'm;e:? oi(,c~]s8=5k}-20&rEYu%CN[D-eR4W1P]l ;Y(!:szgo5BnHq۳c$%ߣu>  #bZ쁼^~P SǺk4Uxa\ Ҁ)^D6m' /Κmu}Iء&_ Dċl` +TiK} |e@O_3:DQfhtBU;7!-ym<owŬZ<׌f)}#tx- G1Nv`u-KRy@2x0@YV)ѥ$P]K5,&t@V\Bn5k궹DކTKc`#c-nYF*K.d 9eG6U[}eeN8nNx'sD=6mڔ &D˜&GEږm[ҾLW 7|b4{ B!)(U&M(Ő7u rvu$+6_x|ѕlhurnF?[A3xK~ Ȗi tt# S^4TGOMtdвleځ=>˯oS8x`J^ Yx- ^O?iS2l3DŽ .NJsux2y=' xe؉u_F0ᩭ/7hɦշ 85ԘgͲ56pYglq ;9y FԢ!ؓ5Ù,֯_DDHqwka< !/6#҄3 "Y^< )!u2b__$IҌX^!I_? )Z$."#eKr/*㤹sD|{/\QppNwy %P00 YA 6c;,Y"Z,h~ Uba{ta!6D[e+G\Av<>dW`ih4^2PPFW5L[WEU>N8ڑOѦmEyrSgmU}@ޏZX!w*vI˗/?gSS1< 蘂HUWBӪ*2O2[-s9HcNLZޘ!#jG*y)0~M*)0V^[s%hV=e/!\tj+>Q ڿKVGvC{}, <6@+Ca=龞G)gu)~.ȤI1mPvteپϓ0IsD1OX>c-yuu#[6G_71?M*.JU 㺰gtC#٬mBXbM^y .pv5ډO;`>  mʺ&&6߿ϻwM7L \ H`d"zjͿMψkܽblvC|bYO`N_+;c T \.FxPNgl]2t0ӳh7/ɢ/hʋA= aXLw#op?߽ŬZ7!ϟl}O纮n5mLJp<+x:d1g$4$7zcЧZ^c<@'rsɳu5pn[&MUP9{ha̖.-@=sK Ő٩w7Z")Tv"ZZpt,2sI$BÀuA&!UI,|`Kg7X󶁇3)9ó}$bAa=/ M ؞Y ɪq,8M^%aG>24 dU6}1 $P0*.aςXt{ޛ~G1xyȤǘ4)'AL'_}UZҵN^YO{ddäqB2:$ !w,c(Bb=YL#blu<2)ښKQ{=a9oU8|!4SpX;ꓯ~wpؘn1끭B[@=^;U9S㊺ՉJ<BW (c񞥙_˲lT^@^[OLgrI/CuA6(eY,Z*}e?pm٫tlg)9l4x7i2'zY9crCӫ^b٤<<)ta3}6WQC?jaHzmʙv^-hw.sΒ )I5ԇ,yڳ)%o1N<򆗸ǞuLHab菇@Xā ~#5v[DK[w}UOxyRj eTo~9/ѺU ?`)Ϝz};Nꄀa}@b ʧR~E~Ѳ|-7^ qr賘C{/=wbV~kG{͝yaNV̋xdsі ]+(.;TЌ^>*ٔUdY{ yr-ij!)c-ex6JcCG?7';QtxفK &3bZ,Re &qpW)mKbi*'*V=r-nsxMD ټQi(f!xCqEb9¤ '*";^CRU;v):t vG;`.0L9E:#1X<Ҙ+@PRj>x"yϱX`1͒]ÃzXZ_cgMT񽕿7 CXqD儒|S8[p #kX&ף:[$@p-\möWW%;n{z¼!YBܞr0 xZ1 x*.]q]ع<`jEmnFP5K—ٲc2`8噈Tѱ,m庍nڍ*&0̓~cepG{Ȫ]OC@+ FF݈:qZYcw|ֵ^+~. $_P@$:9CH{~nvmh]6k_5O~xmrvLO 2g  e'Έd)_U?a%*:"smiI"?^-ڏuA'D۠5-Y7OɣKfv[#>y?8^)`<"SU؎HNb7_rco%nĦ[Pvoe9Dβ8eYR\B=2ʳ2PjCn?S͛d$:; O8,U4=mpZfV?ԛ}snu%ҽ[I`c7 &,נA/| iK == B;%:]hX.?Bkvx³~xsasx}L6)D>^^0< κF9H=-AYUл_66ܳE{dE>  Mބ_8*+ zzK~ם}/i38&8š"~WzHA'_%9n?fm=)7KkpF+0 G?I1qr>}h@n|X2YrsdA't(}QAZ"IM&?gt$m XfJfiCy_/ŬZ;z]GkaOCBcD&bc<eO Rx/PdxwƯ۶<__]=Z>"#;LJ\SKgjƏLMe F2*?.(iȫ%e&1`Lf- 帞b,?/ `x˜pk98mxvE=v ,$> $ӽLwmjׅ`BGV`ryN2I0v-odp GEr$Ϛ >ɢȿ c/O=Y#.cS2BJ*i cXjKܺ3ϴln䧁 4!=_EW쑍 >cOi /Wҹ>OJ#pOa ں?>F{ۻ5}zVVUNZrmd)%,#\N S V6GR&P?Gx*gN:u+ICQ/?2TV,ɓo}jH);Ӯ¶`3.hݲeKXwbOójR@0Kh@[ \C"ֆ`/Lw<>!6Y)+:eV@ˑSO\z2 8Ĵijc=AηgH H۠'2ocy}Y.,W@2ѣPYMۿ y /{ܱXayO0Gm6qͺܣox;Vۈb |n||LeZZZ+E,c1Y?P$}OA#zGx5fnϪu|M`/SX?(0^zS<#CF>f" Ds?T}!C0omR؟*]UAWt#h2OQiƗY,["pĜyw@S:e%ljw<8r0g,)'j?F3T'$Qw?-O駭ۻ&=Mu[$VM߲yU0cj!rV]A 7UET]e[&yn^8052@ ɉBl3׬Jwݾ}}{[vܸ|f;uc5L@A4W J "-oe6ylBdX@@[(j@BE Xen@b}xa9DXF'O/?Hʌ+~UP91O ϛЬŽm1|wo{<Ј7&]-lmӈQKgɀy<= fC]sc(|:^ W@C0I2M,jjq;t7+eC/~3=+˾^}r1y4>z2ky4 Ѐu] |Z$h+%D&y4XhvK/hTk9iݟ2iBl DI^ mlI@3>YtJ}A`b>eT;v.Қõԯ#>#?h):*m("ٶ ;+徧m}TG w3~#]Xos9+eE$=u*g֍P.guN;oՓ]ɑLGG{][BIQa;a;LL{^W~]&P\g[ ^bVzԽO"xӿ-wݣcm\D 4X8P7eś:| :)Ќl.kqu6=+`eFkT锋tr*DScmZ&]nbE͗47~sG˽c|xny={SzӽH_rulW?'J|`;Y}d5`PGړG#ˣ؃uH0%/\"[s8ohZ:H|xAUHg[``U6c`W[OL#_ > bA`=\Y56}nZZ%7TsQv:z"<`H@^OG:rEx#0 ^ֽNR7? z;q"ᛒw)6DvHx%i-J31Gl7;Q~1/~w ^ xw%7}nAFM0~Qg`@W B&P;-$Dm{-!PZV,>g@ ?a,32elY8i! F~&7rnT)i}McYƽow{~\9>솆3(bZD7>q|.q,;;k!w"jc\l }+сrs?~ܽW^]uk~)OsD]̕j)[H:nw'KX'g6.Ų閗a ;h<,VFr4*\06Q<*=q{ݖV_nwuU5[;v{M>}}4[xúK4odjBbP(b=0!3(f3a/ &F6.:$G ?. &9*Nu7MEYTBr!}2P?ækD9iIt'OCEOH_؊lk5C4aOR ->g| XTD^0x?[n%=\xEo-x߻=9/px?=s(5n(C7x?N|n;c.|ӦMu916\Pc+du\ H̓Zw4T(W Wd>0*O]qnL`:9Pi'43ZZܤQ ,dweu.o@ ƁsEeO&>w80h2p|LV)vnXV( ˊZ+bZS*9|n`! &$dV)c=$4jt@CVhm F`pN B3h !J  ?BsO?p6͖ꓨ26UDR:=&Ev"1mna^= e׺Gpɋ鰫+Еo}𲠇"AIcY4c3HzEpLZ1Z{}ou1~q;k9n%%apy[{?f\< B\G5]Vyp|nb]Keȗܯ8_kZ?@oW9˄!'--l:dPLr PjZCn?S%\\&]-n 966oURoܥ[k7 7_~~q(c`#BM9nұ"&X@ N2V t^ʝs9*>755Kޜ@FpaUӀ3<XAʏ*WCЧ|Nc_j @8a*o*e+ n;RU-[vT6{3܅W?)\UegZXw\O*.Æq!褬5a^zT)0}QlJJaBi5yhB3CmrTpmkJG _rꚇ02X'?]*ꉀ|c-u oxtQ婁 yZc&y T8OGq pkmM^tE#t(Cj r~U.,| '8uYiȳ) ..DGw6喗+"kK `n۶mn׮]!PUsKlP @ At̫yšիܦMs^(񇥲;|/p@Bpz>_$G &$0:2*A Ŵn u=:c:w㞗p1RZb,АRX+DLN}I*n7}^VIe) Y̘ L#1")m45Y)O>= uܠ᱑}E<[(S8a}|%/K}+mAv+hէ#ū3 Mskڽu}wvصsWq1p;ra xP7bL=S T3$X/o:&s&S[:7zl淯HQ7=1욖Q4/Y?6V=Zb @ԙЁ#rB{6tn5Gbr%3mY{!5ڵտǿ (1ɶݐb= }YLJ"y SH^it"֍j|NԼAVT yRt(H#m8k2iA(~Te?F}׻.zWNxO߿ ~Sz.xŜKvb]˨c$\yJ$s?!%4ۓd[+K`,N"0$Z e Wۢ  ;L/`0jIԢbzvɖI;iڵw >!p<5/m+s+W`LPn2=;у޾^`@b02lhg>X`p _z{RֺJW,`BUhwcod@YW/'m3q&'dƄtcPY8&;c2_·>]a3'=Wn<7͐_pdz##8!J洹#{ܮbwwn֟6u| H\o23C{2%4Tc(膮>X"~YdK#:iA/ 6*$flki(dx"žh3'!|oX|tN{Wl<|{泟=|0j@,g={Mɭ;sp(gEU6#9sZH n\/iNY}_BhG!ONRACq9|1_/Kky)0`څ|$@IDAT=V!n jQ*h#t-ש,H:BtJv6sҫݽwaPj=m@rё S*m8#MH?M%+ rY.yT$([E4EA:`7ǽn8%+JK}.X_>w^,/!w<L K1Iԍ.Ř: 9_fu󾦬Fm}&^++1ݫT$gy(z*2KrS?QhT$YW, Q#S#n.?L닟h+'~HxQ.* L2c[64WK/Bg(tSC%BE;wls{H`(cx{|m)XMTLa\;;A5Y,DH<T^ۓ#0rzl/y$w1]0$=<<(crsR֞oݣ? pLIi$x^Ȁq_Oݫ]ߑr9GH_\ܟ1?^EUN6e-AeIr0s+t;˃oh}Ѷ$0C0^_TTd_Xݔ>rIҤqKU?|1_3w晛d%%ao׻>InF {: 2qQe[@<$I'zӬW%@#R<Ptkx9\pXhzr6gJ 8`oo85W&(62mX9:w>f9]IY(xc(^Oq޽(v!{uM#P0,Y i6z &&t 2lkokumd>WLJ@MxxLB !Af 6'MՓZa 1ixCp9l}8kS_{>WWb&`yI8~؍ ;g[U|Kݪ6 uV Ozz|Sc"z20[e\HCb C|P&]p[n_Wz lݠ6aJ;}H׿ǽO+wQwk4[CwM?an/J炩9%L$?sㆺ[2=5VcK(I0[(ht)ǜ9d-4 H|[\a<1դb"-|֤x42qZF3[1EͭC#D5@>&0t)wvul>ϝsyRKӲq;o(ϑ#yF%X7$^.~= 7nГUǫZZ#AE=)KA  XD`u[bR}萷c!Y"BHpiߗ]1j/xc  %yzzQv5$oq~es/]w\ lHYsV ]gmXYʘ\ʖQԡ@}PqAh3b@WK0mHO ,eD{l,Y4F>lS'<"wWG aTl߶]~U;g>—?0^tgqlY@VGVʶ+ E7I@'U?F'RV*O+zb|fR Z` ?090* V1^8穊tYDY,`)+ .2wEQ>澍cm}v;%Pp On~| m 1N,Z  Jl C#T_=)?2qB T#qltX [kox{K~םqJ|'u̯Ǎ?Ar(xiJ2$os86r?H8o :9'&ŜSE6Ң6 V]pI01]6J|-Ӡp3yֆ߅}+O'-e͢#)aYhY>&*A5$_w ZL=?6:ol7oqN&Wx!΋_¸`q@OgYw;ƒUШ\Mb̔12l:JX_s_2^˒\|鲼)F&RV*Op49Rn@]e03rA<9&Ƥ4Wt @|:|Rr(,׭=":^{Vy[V>O64ܭK`H=7x}įF£H նnEX\mXrо]qu\ñA5 1x ʢ`=`YBp?:z\'TpHVe;sӹ̳=.Sx;Iy;tp;rHV}Ë} xj:׵|{_+7w"sӴ1hۤ58[jz]_8XsZ;W~ޔ`W]? <|YU2apI]p] xKҺ1n) 1tP&-nT̴+1ڗ2}V]yv}1,?m[ebE~>Kt@b*^w֦ng#>}%U9^:fa%D| 43f%z]'Sv<yurk_(3.ez+vQ 壞;N)y4z.!?%yRy@qTOT4>P6lbqOt,nVz(uHY() yQ<2z$,\ʷ~#uVo֝]GinI@=ؽ>(uC>pDÌ8\}ܕ})/s`1q>A1хboÛݤ<0 wmF+;+tQɃN4c"s3~xV_0R.."9 DOHLZ rQ03B{aLuI!拮r/wC|1c\׾}d=gdLͦVyã1=xexjye Ƚ 8'm邲Meid Q NK9oذ!lbTGmr'W[שxHB%+ Qȼ,/`zXdFupFuǺ͡,K^x,_.ZwRK=Svo{;o|v^٣Wi= O^hyW_ $/Ȉ>{%cl'1F]pӿݲkoM_~{y}bȜ#8|e9u&DA 6 EБ~r}iy.;B|T =2}YBI> =qSL;)ן 6l y0V?ʒxe#o5AI tN,ly5.vfhۦIg̴Rőo| SKڷwap?Zr[|ό?&@48'zqdE'^: ۀ O ״':$]AILc} J2c2Ooː̂K'KUVœ)wL ϶ٔU1,mnnYʽ"^ &g3g@>z<}0es=2`]K5ym 9. /G57}qA#d~lf_?ؿG63<"{xKG;:\{w}-楮uInHD% LNʳ]~݅=B^1)8"A^wyoWO 7L~*&lD6<}y w_kgc3Hұ<&Ar~CP )Q^D:nswVdzטt`NJWF?)9%K m<`rtOU!13AInءRc\JtGadE ؈gT*r! :чq?-b`t/h+3~*zMuZwDVS =m| /Fۏ{ֳot?ꗒ52~O~(C>9(DIwtvmZ]:.>Կ`a?[Ǧo]׬Yc7,3g t*Ņ4ZPRM n?0X6БBZVu'|U%^ G3)tSgYsËMay̎PyS}nbZV$sVH5dk䬌زŠx===wx @LʹLCJ_Ҁ%:֑eW1Xsy:PO^.֩u*뇝]A;:r$(D.!/[dgڴ/Aʂl꧝>~F?d%qQ<6 + w{vlqv GFd|OK|^Z3^Ssu8q,QYF?ri".c )'AƏ/1Fi&Dl? c?gH]U̎& WHFRH1vH$_)"WA>TE&˽2u6$9 peVjn9X/к[lq'E}k>xe^AH+W*u52ᇊRY9| )㌓WP?!^?"O<[I>@.\0)?O }IZ/E{;k:? ;*F|>GdU?F6 3y ٻ)/sx dFpY{%gg1֡*H,jaT,չqW<6{ʾڛvJ.(apf7hbNh>FdDjUK&ubb?D|eWƁE< ҵÃLc,(W`g6aW>Gbx֭-Ҍ< W{R8СuSQydk6G3,kωx`YbByq\6ˣ}$<Ј?"Mpl%M[nFm#Wn<~ph >78xT_8[LJ/Di#nx{uOSwUa eJ7帮8ٯX!((qۿk; yz68MA)Oʆ}e7s/s‹ܹ]/>'tm^THkB/)}(惥4b<ۢ/'| ndO`y;g;r`[l4';v1/ Z#=lL~"d"ΕXol\0#)/Xƥ`67 dms{{AsOMh<-<' ^TcgϿk̆ٳͯuφqVRǑ/nJԩdʭBIix|o'󟶜2]Kl{7t6(N+Cl<7MXܨ:MraҙRJj]!ܧ>)|:Ԙg^c>Ǜ]  $cvE #BrhrÙ ?9S$tkI_2r5"0dUP?X&ǏD7b,)BY41e|gV{\z 2:@ҐlZY"~`vw.++ CwŏpW>s. QAG_m:I>[G)~ |(#CV( yPNR1tАF<<=53Lu 9z4ށ΂[(yҽmb.d( 4b3p([1x:tdyZVTI ”ǾTS7J^-]~H1)Ѿ4! A<@{6zJK0|3~dy\"FdRbX^l?Խ\nU'dqXLK@<đ\y'|#Pԫ$Ҽ@AWgr٣an[l'ay'F&L/-0Օ< |51Y?@'8KH~tKμʱjӭiM\Iq_'TǖBlE5ϓWG69mFY\/:<&`T`E4ЅqQ/zьE!)v M 1jMԪ.r/p3_>ɿVZzȑknZ ox6}vj@ch)4p3O?[75Qۆč {a*lݸwf.kӄpZr)>o`FǔErʿ+m$hsL\rK$ur+?y-=wOǎRc $HV,ӕ\iUݲ*KVHS6beUBh{F8LOYV]Pa'hæZ ~nlgcQ>f\dA@''uKy$>գx>cC)b.whRT49aUFxEQ$,Y-Fbх\CcF]tٳC~gY=011A,j{o:=nN"Wܚ9 Wmܸq@ILxũ-$e'Pg@ءi;PC[{ʕwk~ 1::>Ŀ1<pME:t> ԱMWe(8O6݄:P(t/_:9p2\/VmnԋD2Zt3N^„py вp!O !'k[DPPRCcN!'PK=JQ(DE|Hu7<}2S+"L/}{iWE_n4>9pWGڱ#B.=zN88b|u %U~ 2`sM7M΀_YH6re)*z?@?66b:̯YWӽ?ju_OysSoajg1f~r_22B)'͵|%WPrsi鄫WxS,i*b쪞 \=¯ D{dN VۭYԩ0 ၜo HXU^Y0~{n[G[ٴl#lH( $`ց͛G!c CǜSppzA*#] ;De,ąeA 2$+7"/ l=GYL6Prr1^/XO:pY6ʃ\E?oiJv9o5VZ$?z;-R[{GE.C x=Pz(a@/q0MǗKlE-Np  <cp 7H8 fiMRD̟! \ܰO}&J#G˯GGmn_o=c취).ϯ:-)k`r0Q=x ɩc|f_AfOUa3e[CG]jJӧSjhZcSWW=:tXdۓ+>d"Wm߾-̅2:p|Ene`av#p RV<$p9R>\lU#=~|V .rc~c*Q[}ip0 8L0f_!#q< X/s8_wcVS6,ioR =GJޗa u)`KAbT2R.K5iX oL^d, n {oؼ\ڶzt?@\{ =g% C<0쭨sS߀כk jǷq 0[VS*-_Q;k9YKgggx%ps?Re¼*|7<P9xd޼ytYgvuץFGy#7p͎6Π64'pafeff'`!fj=<놷v~[ ܺv`Xa*w4=q 㰜i~sd[tK;ԇ6׽o1+hw#$\ca[5x~xX^ ʓcITz.x / gJ,hYk)!p < lԨiG_ ƭr;wn<"M Ɂ|m]ڶK<=ĪU[V ;d`޽2 p pCtF],Ėu sCn::=yte{T@_ @,ခfjccy7sܨ=-d7zbQe#Hnj&`A7 c@:3@̘}35{d1hMuM8 Gᅴw&_x^J#=KicM4^@[heSgva:6=.<6UBGu rɣ2kJ06<ӵEʦ ޟƜCm .%P0ƣ8Xm |Al*WNPLT)FrQC%d[ʱ6J{^JR}[ߢ??~E|D x+'M)3 ;ri\o4.+BŠjSR2FS6wQ;7A0B=KrgtMYb޼ެ(# 00x$Sڭ=exM]M%<--a]xꩧd#x͡CW|8JqB¦7 #&L185#6 Ht 9>^xy>:~8u F遶vχmR7gkԑD1㚟oїO y?6m6o{44n8-YL9Z8\@o\_V>_IDn*!7fRd#S8^6٦HశnX m޵bֶEtOd;Iq$Rrч5.BFSA,4X*3k ;1.27?߿f\㙚K,/o1)\feŭ-˶Gʢ.b5ᮑos^G1vtN f0PG'ʺnݚx36,Qzmi̕'ِ.Md{ ܹ|I«h6,<D AqDc yk9L?A<0\#oJ ?k5XxqLf% H/?ׇAn^a@+(כ :*rV: rԣ+eu^W34Ώ, 焫y;V&z?n ]7Ӗk^}c][%*([B* nDpf't.!wI-20[c)@yMƗ՗ !> /")|x>'ίcqȽM*W_p2QyLyX89l鲕fgN*~ǎ7M=JC;i֭]Sq&džʲ@HuŽ_⋗^} e y;UQ<0Pn0YiPoa~ 9-u%lk/WK7u͛erAX!&z :Ć@ɡ,K.͍ʂn`s3~.{$A:XDe[o4}f6lM_qCgR֝eGJL(S]Cq H;Uʕ+3J wPrpO0iŲ1}7`Jx駟x!f~&?2$M7&csɒŲaxC;"`&; :`+|H`fD n`O;k74u دz"[GIN?dc#Cw?]bzsK'+柬 g]뎯H=C*:mzz+{ÛiŪ3 Sx\Jhgil"3ۀ7@%m)sh۸\ЙH>1^2oeM7OVrɏzVƆ˜PEq52XsP $hYv@^`4oтy MquQ4̇ݼn;|BkןK.>rZ%~%h SXJէM57^ ׫D{Z PJaHq$tX_ዓ+Sw>rP~5>KV~ʂXS|vi چ>9Z_y%wb/ZlZ16]๒x}E46$?9xZy7kُ`&_iZY98=d<}v1iN; 7'>xbϏx ~>=F ʘoc5"N9*Jqqi\Nia/9{{x]O;h=!:~[0 bSN*c 4~M+ku]]]2Gxf#&Zf+`LhY 2"/yVqk B GWtǿ|y‹܎VS9#Qyc7nuղ(WV{w>.'o5gÃЪui l:Zkhk?{,yS=Ή\9Nj+.(lkǛ20a|͍#s y"NޯxJȋ󇽋s)ʜb1y e,8ဓʐea=miZ ^=KE;kyvΫMMs,+c3S+X^;38gVk=Esf <-SW+L|'M|QKo.N\)\IE i%Җ- t\A;xmt: ~MPC3e&`DMvu[˃(C 9`AFܜn[ Uś4n̄IZ/U] }q;}=-^'+3Gygp$L+F촪-8B؞c {kZnbezvjYa<;/sDb auu zՐ:(A'X'0498?@y„Lc3X8G |OAI:缋 gU{o!1W`//=C6lHy󩧻r1]Uab4+60*a<Q=T q@;=ɬe%cyB[ ټ5pʪgZ$ zrŊ^frd 'g8A]N[.\l`$9l\}?/?nz ^ #J>^T3  6E 2E}Ϯ߼#3On|y8W,j uS]L ƣz s#0` 3{΂ (fd'=G|Tg!)^,{+e+I蓦`7RA7|ָ*`r #H9X*4,/zd{` ˌBT5?p5ied<^UMd ,1, ~i3xPIZ >8rti5k ֱ:ʶ^KylO/ߣmv{ 76gfTVpY<3ڗ+.ȕwڵzZi~ zoO"xx~`u )q8 6:8B=hչ,^c(egl!!:KWr7(sWbq)V~*e'l۶^wHdѝI~ieΙonB9irhZ<1a͵ …toŞ-/܄aLLZ0=W+y@AB?K;x];}. Y&l :ce؄a254"ICc12:"St܊*,\`:襮/1:TC q,{n:QzްLE(⩐֮Y]q3'-:z1 8/ZR-eܦpi6؝bY;"7n),Ihn-sЬn*\ɍp\=x< pVKv8h,I2ά`˟` -'rȝb_HmB6C6o0س{'z)^ 9ؿUo7Sz'+ᆰ{~@_=y睧֭[WqLb8I=81³ҲmV.X tΝA,e\}M4yŅe[º`y1~m7>tBK}cJDŎfj,.Qg;p§" _—&dsNsI|0U_\AQe;:;sΓ 2H'a3$ؿg':ǏRoOl-c9_r-'uoN^AGQUqL#42.JX} ?ǡYzG.x/~q~N^M?NT"0cT.\#D tZ<8[!rALå,56@Dg{]FXplH3rw={/\@MlVL:G8(SO+FG2r޼MĿbcS>sJ(@c\ lLbnuj: p8@r񣈁]I'7.M?Q"DOZ2W?E^58|ozI{=m<^gls 1jZr9T8XyMVN WN6ZYl*mcS9rp|_FGx [pY5?x36oLx_ӎ;䑦W ÷~c-s$(99>·HWMҰaؼ1g(sJ SgYNOۡ[+s 6~'lC %N{%i43қDE<>{|8% FaP'XGOdZNtP(|b'e!g)?Lm.N/z%]J%!$ t?vP[[{ ?]}ZmpLܸ :k1g. tqA^covl{j H9S3E:pyd! ~B{s=_Zf+$.^CRcCȵ.4>c} 6^g{;`[B.1p_[΁;kF9s>$J[\\0jxFLc߻wo=ҫ^*'>A'mњ5kd }sGGp37yde- \VC5Z[P8l.+8ʍv}hz(ji#QFʡL[i{-NX-M|= (LlXk@+ \ ֗Pq{&1 JX!8/kye56 qVLwvΣ|c XMʁ܇yO?NO=JՈGZQ9L|to|W_$;d!2xNEРl(҇˸ :ibfzjT5\׫㩈|ivPE~+_Y&9'<7ToHec΍Ih%GηKcr6r ` o~1egU&2ر|o[G.0AXeO6J6lHJ9ft̙Ccq\n;h@H  a,\9k=(eXWyvJYAh\j'@-gLf( fܹvHQ" f46o@<|a?)_<&~=)+rA/wv6Zk/b2s0Xljb/;pXD PDdʧv q@Iq 5ϔA rHL?)sEMU{!?m::;gb bP#;< vn9G'ȡA/8b']+Moy羴Oؙh|J5uv7QQf2OUpifx=h|P.}w^&_☕V^T7c0u#ų .`C=,6+CIRorjtrhn.%>HW\oN3Z-oX>Lom_= ^c\%.X/f#8p\ېbտr!6ȷ536O':qX|,o%\{!k{,zA;b"X,6eC7:Eɶ)L^/W'848LGn,=~W>"ݼ8] ʀϦj56yXW}$=섹;T2[Ǫ,:wh]sC=WMk7x)T@,uS =rg"!׳@R] #@ ]wut7ʛ.r|Y1Pyoln~@X-A~ "592-#iJVfcmTpl;tjLr7E/LF&00NhiJSinzbzkh|]U..`d1ac!Xy_t r.h:(UeoW"׶dŠ U,^~˒ftb'X}x^87yCɴU\ׅvu(" ? )GGR?YXK C}h0U>^ȹ%.DO}kwo;av" 8Hc{ DLBuPA2N-$83b:P@.0cךчJƳ6sm~GwsN: yr7 ;կ~5}4YM֍dmy3l0L+Vp[RС.3l; NI^ŋ,zШ M)D52g*8ȇ烈<8]<&zezkC'eyL7 |݅r|C~P/~Ծ"*KŢ1ضz.2T>X]"8ζ۠"uh)2¡>`hT-^.Zn#\HESC{ 3 Šnk`gKY0,yG׽?}1v'.Nڢ0, jù'c`s⼝upR7R| QJHO6sEv&+~w_?^t\ xeYo=udIڵ^ڳg!&N )f|K_/җ|/7JqU2>V: ' tx[TgE$hY᣸f&OQ OӅ v…4b@/YKTMvb E9ǁ35 nG'rP~dZN* I6s|dMd!AY&G!E>X#]azNۓsDHAy[! 4`z`mLzL&<y2oЯe_`:]6C)! z1^4ŀ#{BMc X2xl0h wv_Bz>E6]Xwz9j_ w0.QLՎsΊ).XWz+<. eVg=93퍿P6||wӿOs6mի̜~߻{g5x+^3w)yGo{Mozukw9֬YS<)﵋{` $I:`-xqFD$KYj$mJN,'!yaȧpd7Ԙv2ibgC(U?}oI\X= 9\@&΀*ͱ#jw4ˣ|E9dC-q"7tVPi9̽$8呉ê1ڇx02rC -Ɣ28)M-(d"zVM:Sdö֕[cF Ű"-BZ+@>s*X9S/\*.<:0~ip@K盬~-?c ,|ȏ%r%mmO9ylں37;>I_TXow|Zf@Y.9 xE9sW|G}m}{}%׽nϺƑ6RgF[Do5gd0|{O3?- O0_Yf@VH-6~F Ox\HywٮOCw좳6YM&Wzo.| qa^0g +@E41Ψ k?ʼmNz8F.^#8D8}"o 'M}!d;(Ѷ ,6()H ^|)5AX05֬?W6 AMccp %7& oK/7OX]<^፿{Cyn_(%Oet)NxzYNUIÂAgRm%AO(߂chll qy|aBZdlJmS\aQ \ lx+oO~ 8͝;W𲗽^_xO?V*9`b(Qky,+(e|OWX7an1l,5@ɥi] eiWj~-oQ,& #g,*ٿgn=c!4W8ʍSD:4+OC1 >$)p 8 ΁ˠ@U&e˂xB90,ETE,]k𹶅q&t(ҳƭzHNƮuz젌T\ՉÊPGBi0! §X#\PeiZ_zliPïUF|,rbIo'bV;(>X8)OIy.-6ocInoɫgm~s)*z,gRdNz"xr)218=rM5檚#JJB]+ [4-W<3 N9 ``2 % t /OpI⏴Wp,=O[s:G^x 3l.@x_~aޗS[uN0k#e]Bk~by&`.2)xMկ~U6źzڸq#z,˨FR:Cm> : ˀsɨ.gbgӐ+ cx 2vE] 0/1fj@=044DO<a>-```gFu ~ʦn:Hs1y̝#yQm<+sqJ133$Ե AXPJlJPN{m 7[KClVrSs(Y[C#٣M VZWsabC5ez>w.iH y yBQ0??`8 6.Đa!Ne:oS?:(5Pq~#&my| N e%bco? \vG|Hq%6Ύ){!0F/*T\Q Һ⑇{( XYp!䩱Bg4BsǓjN{rUaeEPc RqJVQA\ "-{e:k*Y;)FlHRF[5Sj۷onZS? ?vX5h]Qya{Wy N Mí44{v+?r۩$4嬺bilWڱʡ)%b|zioWmn}+?@|fsȅD;-o\PA12ơ0 9c2۪ x >LN.py z9*g/7ȑɦu=8L xHHW;ă:TMeA7$0q PČ T8͡B:r)l<AbXM {2}tڦAWcOmrN>˶ZNpAf0aeZx|6rE]w N!V v+x ox{K轭a98IJu8%䰇e7#TGy8 Z~}1&V{ij@NNCٲ²d1ͫחmTT@b9|Nj>hpoL>5+f/f_\D.^ܡ}1 պ`Pw(zL >23A2d^'5b[$ 8Jʽerk1&g4.n1WNy=H "[)NΙ$ K%0 ;LmD*76B[muC6o2 sE9"_,H@"zA=deef'rp ug!"sx_ze;ȔsCIȥYu" &v[P 8[lTrcZ,XȺ*V"TCm4fYiڵ$ݬ@˚+.f:C7T^mг:7K-H݁+VQ"&h*[VeP.utR @Gtzj^.&=X!e ɀq,Nx|FL`s̕Vr%![eK (smY9uNƒ-S? ˁSx884@Ibxr`&|I{i`; 0 SzEC_~t Z/{\xF~w kbP2K18PS܉6:+;  \m[;YfGU0N_LwqG}0+[;Z,Yy{ $y#BԻZid"{\LkiOR__]xĿP$Snke7SAJEk``t"%=ZheiPnli&;3 y.!XX*m}Z`#tkmh%mSI Z7pqvQm96z Ue 1 ɤvce9^Ƚ.&K%4I< bqsV V}NCAi)G_h砅6 ;o^lL2qbTS,d.87 j'*&a(:eSN }:y7UƊmPNY|)eǏ nrˍ&C6[l '24vQMd}WzcV֜i+s.PKKk<0^4cuBjW֘)= :{/-&m#=:'W"؅ru[ȵ22~2i]OۍFmOirm١f@IDAT@ mu (`Y2݄8q .&ѱѫry{`C~WO`h|Cz:E @Aa˪G(G6qz,)OZ*' ƭ4L99\_/ipyfrcp w>7x(W3FȝTzLj_ .lذ+pbNzgfPKlޟ:G8a4y Y4˳L=9L![ip$t xDct5|&W8=GP{BwϹ?\7Aȹ 8[cqIYsuFX|Õ"ʊpś2g5e>G9UP;T>gao)UͭPnX1gKpH,pTē]]Ty cX/S~xXb|ݵu*;dz )kLZo<ƫrU6C' x=w35{qz`hh~I@/0@Gjyr5k*<+-N;3VzfY_nsK:>fl!o3gN 6cϪTCaMD9p:mytxOYzK_MO?ߴpvgB-.pR-NgʔOt7d9(K28~JʜO C/Iθéʴ`s;i9 ZU+;nvADQ;daJLE 3Az  U&BZ%X'mNcDUN=_ zضm']^#A l߾˛w-g[β\gƆ2rb86st˲ݸ3g0:!>`Ӟ3i:SwsLSj`x}}-v4tlgnlv>D/7=Js`;{q|caLu. ,R̮R8+EoB82-[nAlMn1WJz@lI?_n:Qg1 $ER5{hc<{r [)Q6+orD)G1N-ˬMרϳt)70Y%\jùȂ <͉v3+ER}u-:r ?zN?J='Wka鯯ib=066F;w: `0`ʕf`@ĉ@8mW#:u>4Q#.<<0)s-l!+O,ոQR\WU+tttWEc,u}_8_,zOEkϧ}|^W?utQ7s0"v@{N1Yq*y6Z8ͅ}USe0Ʉ)%6 x= H_ CB8XHąmmݖu[e]y^!d}J],8TqvfQ tsX,f[P9B%iQ{=? mi1Z+4I40ix˴E;Rxq$Ь6y]u 8rS|pVq4,&#bLs OgKmm̖G.a'@7B: eqۘC1 س{'ڿO'%: Ͽr>221DLM6pmܸva%˵|`%FF~x`y_s{ްm .]qq!GBY$ckmI3Hڢ :eöۋs)V|j* sؠ a&t$ըim1f |XSmc|9Mcz[TSȬ [ֶy;'[uP:9"[է:ƂJ9į:)å<+NyEW&y4FRCx`]g:/^rw!'gdnV31PTN#_>묳26`igrGutp=3M؟Gj?C= 2ܐ 2\.!:a\p P[͕ClwH b z|LHq>4ޮ9hL < x*(hA%3DɅ(( X#IP)X$c4(kByc3` / |$&%#2pl=yyWLsY䑝񠀍X2W8AfMmph6ur׶`y<ЫPqe:sS<}\X`-y4Ctp>ڿwx,=y\(36r2>7 9윭ȃc)c,mjC)pWӶ냸[UT] T^8dH!bxyNʹaYNjazm^^?ptg`g`19g*9[z_??Դy]]ϝWVl|@iի{<|_HILu6*o|6 ewV9:Ӻm@u7%ϛ{>z<פ.Oѵ<_=utREn^l.QtDoţKYs`MgCF| ?b,6[A_P IULU}rTOa(k D¿dPy9ۮLrepC}=Yf>t2ȃ7%rV}3o}+}3-53*6~B93yvx[fx[= I}39FYޜm2" m\j+y@>]Kߟ8~%-kWkܽxv߿B:37OZ֜c™T/Msl WE)2tJ84>!ilKVԙs<{u@#[H #FK!L@!˶@B` 6ÆqQ-gj8^_\YkܵNޝqveZrU>{ʝ1؜;MH8vN?\2~Y<<_@b}6+aeG<c@ Ξ@DKiLNtN@Ɛ=:hƶ/ƣC/-<и}LxȦJ} <ryAǵTKio( M\xI 8׾ZR> ֝Cݔ/ǣn˦i9WSt. 4.Mb 495I=% guq~=~46' лkc=4Ƀޞٖ> ^PYx͏؏|:}]@KBpoV{4}=|r13z)¿E'\$hy1x?v:pp_υT[_fh'_PC|_ AJcS5@™7%^NѠسe`xDA }I ~:h(St~yWÆ E7)q4#5dDdБ`RR8/ 2r׷G[5~n}.6lJ*-x0?.rS1ntyhq}*?Ͽ<L_' =D# q aP>`BL,Fc''~bӧ,~#9`oR 1چ# Nݖwk]t[狾q?􌎎ʇCRuW|tIg4Gik_HܮM#+tvsӏĹP<7.eCC͇\ӭEp+JJF1Z[=z+ e2}gM_2u\_hDX~J}_2&{XЁ5cچ th%#s"!\['(~ j#Rbt=yeRkjuC2,m=6gJJj9 >RLJKl,nSLy)0`SBEnNC3U4E1خ0M y7-QmdfmKtjŪ82@W_55 X;<+ ,~ݗ%?Hڄ;7?_I#~Pɾs/Dzj  %6 ps*F < Ҏ;SUM%OZO9&Uh8?äw{[;|a9L{UKk9cZu{J\Ę@Rh k.~M&z! _|{W :}l-'Pqu6-q~#(o@xI_o8btE'-EєoBC T3$gg@7f#^_h]QE'ukltKvm[49|ޯ<)B%M*u.HxG}q;+GRx|ߐ<> ߴb<}G3387OoCvG 0N#֘siifc E/n۷M75 6 G8X@f<%Mg&؊gg3&,-]fm ,ЮQ%C|#!5 2$ǂiCCCj%-?As u;o ~Gr >z}Gӟ8Os\&ma^R1g@7cχ*勓GиE\txmv ކT˙QNz~X pBðs0X/Ζ@C.d#B p _6N;ݮ!ZZ`Aْȶ,7IxNܥmS|u tŌR)t=%k8Ű}/~xR1|#"pi> ji1n@A70[')]t/0(m}\B:] KmS)oq⃳aU3Մ^(lwߥ_~2x?X &`2%` ]y!sk//;ըyPoVqM;'|r}L`}ߏ);2$ 6/ _j3D +2I(ǍVzQO#t‹tR>tmc?DܱoO}7Sn?鏟rY19qJrZȆ9vC$FZG A9NǺ;YdDg):74g_U8#r4$1&h>iEYĆcppE@0[p[:d羡>F.Fl4gh|q-2M⇷n2 4@&ئG'vg^>ҷw'r$_|_"yp}Ug?cv7): xc+++}E=zȊDc4Q* f@ ^/7m_-.4GvقWw2l*/m˿E?W~Dw?}m#piQ:1勤mmTq[.lB2bL{·m|Vol8:{~8="SRACN`P XA? bk Br5 %e#J)b),4.yl0M_ތ4@uŀHa|.q;sN0ocHb7EU8 3m }Ɖ]'0gqB G< 4XQ .l^"bOMSeFӄ2ĺoI`VO XOKb'%uįگѷ~^Gxb,X;GUu&|#2uG(|MN"Cj&_~=uڍgi~طÃ=Vixbwoώj;o52}}w|;溇.W-ra$8L5 >;b2|fOpo3cɠ-v!n}*aK $P7_} 볰3X˰R>iVDx|"ҎFl;ةYyo17Q]6<:8ȷ+XBd ]c aM pkh` I[@;~KS<#sEFu9m{t+1ee/5gDE{4*SF߼yETa[oeaD/@@2@<}>˱nfa1Fǯ ?DlN!fiH3 = XP=Tnh4xԧ)yZwcz}}lZQMf^,=sKHm/<ѯN@x}~7928@7?Hd)Ùn,ۆP1 ͎gp:\Go?_˙"cwuETBXR D1bK7KLѵ\//X[;!{>;Kr5d@z]Z>7L8e P 9}9-8] 9[э>-fn|b]j5c*6dh |7ѧ,Tx|7ep8iG% cMN6}  Eia_F.y|G/'X`Bʵk µy l~?_nݧIݤo&*]zK34N/2/4Ѝz**]At#sfiC ϣɉ@)= Y~3|5m` 56Dqg3>@2X4l %Vi[>CKR|=|Ne 0~EGq@$5Ơmp~Ou}t!I͊brsqVXg O%2\;Zrଣ ]0c aaږ<H#5?zmTz!zwrb 34א]$sqh+KF`#<)5v? x렏Ookgf?\5_0*y _z~.D1>Nm0ܐKCXp\R_-']G;ؕ T;jqp_Dז-.-'uNl?Fk4=;(/YGPLRCVKqi X2M7LBxbWtmGW:Sj:ۖEuiY-ƂfC|Z;qNp V6DyŎ$@>!x .z c)*uW wYl0Eb`0 x'(b2m >-diH (pt!xdX[]|>\´ᴌu$i4'/<0Q?Nn`1xf_Ec4`n /2=X PG>` *[}T٭ ?9fUÀ\Wt_26.2"ʓ|+t@#TG[L.cI|€ۼ;,_J"ԬqU/GV33 &fin!y`ye6֖蹧E~499PF@.p#Ԑ7m4ܷ<Q:P|;Qa%2pRfB?av|M"t|>h_,*;_w>V e|U<_O.w|π\a8q55d&J_@eK.:L[6EEWr&st4OjفM٢`C ;}CD4M_Ũ<'z<-ezѱqzx* uRĆ`#m׿Щoh Űm9|v":{bɤh###3ћrfH@ֽwQgp?|vݣポ4pxvf^3 'ibffy=%woӛ+4?077WRrLEi3 ghMic!z_] 6m`|18_o׾;Zh@2>cGL;2>ҌV~QFb:kZBXJۆ||׷rT?.Ѧlp jK-oY :S<ɵ>a ![Z΄qccA]1;j>1$`S7VV0}q_J4nھotĮ VpxS}&'&ݮ6;<9X&Az51+do|Ҏ:KeKtp?6Z^C_Z2<<(4*};U u:gLe޿:MG_\A)f?xw^#ZT4+у9[\E^f)X٤^~>-\H3iK!K: r&fJVt(m-lHOldV~6u_i:|G!w#!}4AvAQEçMCRzG> 0rDa|~ +jHmW(l'rX%LZ8F-x32<Ȃuj(4r4q-`_1o${V!DXkeEسxB2=69o91%2]1_HY8L1f#uWͿ{=_]}}*\sehhv| 5EUHe5?B~3tt<+{;t%[}vx)* GqL[DATZǦi"/, O]_Cm'Z 7AhK6j>4<)fh\DGFd0؅}Ӵ%h_32pg >@Pdlh|/>&$Bf6jm }bÖ8^@aVVp`2>40(_bgp> Pʶ֥:Rr0<.e9: Kg~#5c9ݔ˷R7J%1%R)x0b:>۽(m͸Jt+8'X6qf:)@H{;44$?[bXB[$]_pR_t X5/ ѴMWs!cǼ U/oW~Ӕ}o"iOҽ[O'β]ʆ#plpB9z# cjyɋщY ghk+K ~*}2qb,3pa#%|qJhF& 7""VmeMEͬ}aX7-q<Jd7<;0&* ̫L4%h@'QvtGs ⠉ kC`%b^#ދK{ZʎUPd`}UrftDy񬬨S]:pN=T@ob}NibeCJR3=MG;B:mfDŒb 72 /-5ܓ$|:# sWX4E' Эɔ}g .DXѩbZoQ>Y.߲PhGGh!r aCtЌh /* XwӝF%=c $n=.Bou1jpA]e в*y1!r ݎ`SFIʴd9qRN/0$nCl=|b4C[uLN"<+ h:BPf>XyT) .hh6(__680p Rfv*՛/Z^#nڵlBZڵ!ho|_G\#.z@6}C K<.v~t.Eٛ@;ޣGiHپn;9 VFixjƧhHHl-^D37/lD37uoiMRJX.8e*С,'ކ'(m|y,G[@V>!}MCD-j3&h`}p٣xx %2؈>/<B>E3 ܉oG>+2pFrt9-kLKn}I:>V(| ) о M)H`+~Ag;Ńآy}K2NbfVU |[t:f[.#pAXZZr{&5SXIN: g9f+6ևoV>3ЋЛ$ 3/ڬpC *=_k]F5j-s`AX1;L4|,.-] >u^`wDX8h12_~i3q&trC'F5bFF˟ #,$FeGЖ]2zXM81q2h?QRAoBvi 7(0*Џ$ľ svXMmODN1_Y=7h ѝ ,iyc25xpe24d3}q2hrQ<;1вDŘmky94]}_ĆGw>۪5MkeyG`mmk5`Q/L :oVi 'xX _QW=^Cx. c *}N5 'haw>*\]6x >c&sӖʤm @r~JoU&N[uH\K@G2ڊ +\;Ԁ}@644TP$Bv> !`莇FAIנ9z 鏥-B V.j{޲\ţߝ6ڶyACZ`'>ȄΞs(ǹ>2`B3!EhsI'ctCяx$;6 "4PH==)b}H\nei CvD1RFBnF^@C+ OjQ3G! !Btm4K_J l njA5>3G~/޶f]im"^C48Fo? V,vTp.)H ? ' &Y.UCy^NǼ=;^Kgz5z1|F&yN\Kv>X]MH? O737i0mT Eη: ȩ3"k+AybLƗp]X} 볰3X˰.Ɲlj%<԰'%`=J-2җKAq'v&0I-,V8('ڃ81e0JOdLQ,҃f)X)` N~0ЗהnoXߣC,st`~{ OSlAKp2;ãc':|Vy}W_DT "5dpwlMIi1xrMHiV/o]~,wG[ըVbq`0=_vуJ4.nϿ ?+)9OT7́}ʟIN,4;,oxssVf7iÂ&Unt?ӆMj:H3Ù@IDATzBx&/]EÊiqK yKCJ(B7u̇=._\`Y{1m 4+m5Hr8\x@#x!L `3٤N}ot_ _ݫ>X  Y P(~BǼNA)8zo:.w\\/ IG2}=ǏIK%\G6 +r=n=ЀD^+O٪Jn#|D"^5xZ_  ˄:r5!eelɆ=&Y_5E'@C۸k%@-JUh )٧(ֳQxb%ǧ >:g|x"8Xàoq)L )=æo'oOKd|;/UFWHipYbf#LQ=Mp aC4_08sJ;~LLqXu[hCm*}'4o>a?9?/=?>7y:Dnj Gx1C(5 !|5у!=Y/dW2@IS I*Q0lj,hȉYz5| Xߤ m}k"''T' yv#i*:t7! Ha|忻ᅡ$q< ;mH n(3mv |~b(= O> "nj }Pi7exJ ⱜqB;894#(MmCY{9u yw129O&Q0;, Zu n:/< yL+}[κLSEJ0t}lʾ Sdp.L0@[ GIWhELocDUft;Q_NE6"wzßV:C_ o'x蕶I?dCxF0wc|- wQ-%}eL;UQVe,.tZWof rV1\iҍL'G+g"O/үL4Ԛ2"MA7 c*CխQeu:c]NG{ 6;TpoxE\m%w`pl \9| ֎G{DNn$ 't oɂ 4ymw>XE^p/NHË*/eZ ~j|(6$ +&3 x FV)7QU9b2u|!@^Č{ą@ ЯzWMO!S2 _]T Tه12GWMN,6EXPb؏ Jd#|eX];g}@Cu2s666~<NX~q/i?P?_}rrRV>v;1 8J/?wE$y@֭۾^K$]U8A@~$({%lF'oRs>ޣ:j(匂޾W &?-yN]M4aO3oe)#DI/h@3˴D+(Xq5cp7JX)$ DF>Kw8OUZj"o ؛V,>˥Y5f@z#O1@9>+MSvStR㢑C>Ze\nƖ< ex? =A^OKt|*#E`bb¬Sw# 줜Vع&b>rÙ?;:M D\@7AFpENjM'Фs[]h ^DFW_(5f>D4bj(n% NR ^֫tۼ>Q`'knybo:I` |ϻ$3 SPIv>8DT? kd>vhνqhk烹eZu xSw@_$|%RnS7:-'вM^t5v:Wt#K!;C_F[jIѕLnei ~YS"z|kIǃwߍ+)Z%2tg U'<Ctm Qu`( s Z;,oz,+m5Hr8k]h@#h!L p(wr~UI?f'T$Ub"oS2*UyVQ lΫnɗ3i!^АIu p pN=^WSS4| LM][2,,% nr&*x@}ӑZN < ~SE?Xp ZeBt:<\PƪvnPlKɐ|;mlP`a':lG s%KHULQ~k-}}](C޽P~ $ #g,~;~HԴUȩT 8 {cmTquX/\7 L>R>-38IAM0"5L +3 Y7fmB}$[ a>9VG[0ھ|\R|?<禔<`ʺ@V;-B'r6Yo{pppGGG\g/~TEN4b۽L@;/%:uO|wB{$r# ow?\ID# &%Ś45?IoLAOWD(7D((=HŰւr&; Q0 & Sjc4b5mቯ>NΈh*2eE`fFvk񿩓GdϳlUi6 è{n& ? /|.YK/e<:pEk~?Wc4їS~}C@ܕo[SHͼ 7*?{@˲\$Q>ZIK"2ztvx1CQ' w=C5!7PJ" \-9/PPXv>(:=|{uzPF8Q;Lѵy.\-Vyǃ5zg\ grsq=鳭Jvթ7(OJa+|3Q2g8VSNZ(mѥoHaf2<߬oCVOw| ɜuG{|7Oi?,N&6Pt;t V#@I/郦{0,RY ӂc+h"zY1!2icۤ$}[,‹ >8ǥo]^ֈx8^(P;fѝ[$u *)ꔮOz6lFecmq 19C07:ra`'c>tpQ꓾O0֋7m_ u8gKM*#PF,-.t)?F.:uoG]zW|V䬆ZXkWw#NJeυu}E) N,tvW# Mt#n:lZQnHT9fZ)NLԨoȉ7xF[FģQ2`\$/v:J$$ 'ՎE"/@"?\O(v>Mv>X+[$\ 7h?w?E$ڝʜXSg^H#O>#XF``!) fpbC|G.NtŎ! [S>>KK] ׏:^,ۇU!yezz ӜYB%u ʻ ?:1z311aX_:lc[>.*0J'"яv%K''mLHBm}i[N*Tr1d}%;`}N$;ܡOpǏ{GGiZʲ{Dosfa?4~4xox[$rr|r$~nk^򂆓yeZYMnXxu `)vծgӮ ޼JSza YSt0`:+[XY(#:>>6 N3n3`ttT;cjں@ޞS1z ԫy'zw=~@ލR/tm1G$,0L}R8{ZϽHotje'仆Jp YWD-^l5٭wkɎGXmyV= ,X/EbSSsb`;`!mCV‡t;t}-+ Uuw&8,l(#pv8M^ 97 ŏosLDSG` ՙ2rK1.S2$ .b(rRk<9&uehh(7%UêM^D񏀼O]"):b[p#q__@YΓе7 59oJjǃג߰ Qpjy:|J^{E`yJ95 y5g4uNy|x ^bnE (_XeQ\n+4;;\0S 坪q|C =rjeqXFcS}M| L9;Voml(#=ЩL_.YZGyǏw4ɡUhָ"mə瘋H V;>„h,m}q=:wU_%MHmAslYEN:e='4&P[7Qx;*&Rۦ-N#^5 ަ' QP;D(]frve``gu *#Eb?' N8sD[fACP2v>ؿ9"aThg, /h8cWhAO?NtRDsF9MENoSȤʄlq4r1!2QBN02^/e04eg-թE=S?{g\BW%}!S."Pa"PMm ^x`\3tyR6/OB䣕.w5dv⃏+o7"`EG څvc L(ذDk5^>{(hb}( yJ>߈򴡲YjcNEΣ\Cüf_ ~{x/|RF8ih9RGXhSז̌%lhf`z Z-rj9=NkL cS4Mр$}`_[2aCtqҪ^2mW-~ Y@w;ϋ*|~ƅ@Su[Yqzy. LD6"G M02;^ٸ`Qx=N+%eOJi1GFU]yha]g(v1slc 00գ$x9y lx(8xFA(H,㛹!o |0f"wzJN1ǃ53)-x!S Wxĕezg4?~A|)wJN.44Z,4yd+idD3FRȖ@ ۷O^halGگ@tF`c?;fl%tUЁEtv#۫@F$T >Dz)v9E$RF ?q^ ]I)َ"(t;9䗨u!_% u(.l{cxCGdF5xWu%u]q'fx@n{GcUCEb(aFEbr<:?B}",hW?2 .$;-"f2=c=X ^p|.٢NaS234РÞ^E1}9Ft2jY(#p"pDoSER)ytVi>7oJ@Z Bg( hhhB תH@gp192 l 8TkC|:KW_}!ߋhhӅ6cobOb2a>*C^5N2y3Yl T]:/e9y zm6|*O~$ 3ed/f~;UDmB1Pce^Аw>XX^p֖Y$ nShz:Yިͩȝ})k׊`C(Ie\ڭSyr‹) 3 "^b^r*X]] "t`pșSV/tDmZ2 "2RrF"֥v9I#`ā!^ɂQ^`*$j4>{tu 'O {n}=NӼeZY*=?,RQ䆾&U)#PF2EWyUS ϜJ}x FRqsĵsz8-<^_EsP>P$%pl†Ll{cVCw1vSs:?& RT>~Gb0'x&Q`oֈ (=^`]u aFA ߙ59 Q04<‰qQ0Bա1^ː/hloy]rļ8>iƱi&y~(X0=9 *z#+F~pg/$>%圊6Jb23֩©EIEdzGy!b^TdA! ]dָ=~r >JLɺ}\Սyx^䊮Mu'"E3tz?& O4濉Ib_d?z6o?~pwn2cMuF*/Elz:~ﰯ' NQ}WQ0p`<dM^Nܦ~5"ֈ^@-x,hhHG 8SRFF+֗aK4$^_6;-W虛gV\I)#PFL#ۿt||mn2up΂ο6@`J@Xn܇|b0FFy&r1cOц>R. ÔH_vb93#7oD"{(עh* 1"6(u[qw=lDdMw;G0хLX4, ΠY`(A4F8s̏nQ;Ed%EY?4m^4+1NL][ у%F#>ĉug(#_S rf|$p/W~JA&|' /:MP2Z$!4+:#tWך}G(e.m %<n(3#75.lwAy6˜(fFAgm`lRTv$u(a>=042BHQP n\#%@pG3 f "-,2m񂆼ᇞu 1$fFYhFJ4<șJG8ࡋ-~jָ"mȩ""Üw]C-%ȝpfመ^FEApy7QUK` =[W~& tϾCcxp|yAQɂIwo=" у&Oؽc243 xc;'FP^Flޮ9bġ~Af$=h :.H̋Ì; (\kK˜(-%~`68['vr{c^Çk_; h^3(+eL+.rL$()^Ce.(0>u w31G2֫$ x;.Uxl=Q/()gw-3`gѮN~ ֓aAGtA9] >.?zoEwByı[Y qeuV4Qg7x_C_Ş !o'okT;y1Z?M֣c~饗~7~CGCh~՛À}sD'F/)gԑS/89ÿ~z{~N3[E@!OhĪ||E|/,Y00NpxEfXm3|*XPXPmxt˻xZYFI Y3  ՏyFomy[$r,eLNtÏ?"%1ZǮ"M-q`(Xe3^ eQ2/w zƖh% ^C p6q~͇vm}+uyS{Y&*oTZ~?$1<#7pke@DC{~#i`8=_Q~!ɂ~/(ֈ}GPW[<ӝgKQϳ x!&@я[\CE' oxa9D?P2=~G}n1oL33Xhcu^xjoE-KG'3xoc/ h..{˜CE s! AQ 초"fffr8nr@#z~#阊:cEmɂzpfpE -j (Io /f+ޢm&͏M(GwxFSX<mXgT1,hHfAC3=@Ҡ,e$ ^rWݜ5F8Q;,oLk< =s=Y`cmfggEuYh&Ƨݷ2ЁOQ&t5[5gtOMMp?)quыFFd{Z_4 Nڕi.yj@^J^K)"`鐎3>/ !=cQ_4Q`D_ܗ)j}9; XWս7 };oFAov<(sί C8|0hH<1ɝ6QI~ ,e${yXA ;L\[Z\Z3k\KMȳ AEb,O;=<q; ߵ:}O+0fƩ,h:υ ] \ָ==c%B֨,e>u ձ/Jyd=i8iwqW3|9/hD)e`XnDoRjvvOWz6oꗱoo>g<@OkI=<PĹtmt*;@^|ɉ ۂrg`2 a+2OZܩ\vQ7_Ox8)by&,{,hZJ#-9sp(eۼn|HWivnw>X V*|L{~4<,Lj|)"?o_=Sc~%5?Nc)e^M/%Pp9桭႟F1zZJ͎7O\3xZ<*e<HV";GDΛ|&7НH,,:Nc~'}CD8LIƈB(}"Q7yk[}gO[6{J e)Rpxg< |҉:DM‚ QϏ8++ pa5y;Y<]W <'1c?n߸YNjn\ٻ;ϙc?'io4?rrk@Y|,~:̓9J@05 /yrY@*cH$@RTP˒*й(3&;}?1Ixs c/Qt@(xGzВcۯ\WȰSx4Cq8QIyhkKOJt)6&fO|"{s3h< 2ܲ-$zIZ0 qp e"JxV QN$p$36ωtsQ !<&+TƔ~ 5ҕ'5}96?*hDwE^IYnWR[}Ĕ6 #eYQ {hDk(ш{K~D┙ 'd3CGAY-]M )r Bm`%ШnSpM dcbx9b㲢9s승p{Ճ^W̩S>_ڷͻ4_.?txnz=Ҷ#OW4Y"]]yD'{ * |ԗA{G1@j$TxqeQwA2Ϳ=:٧oh 3!F}` :_R)x0 S7 פ]+P {cjMc #w>eA>evߒ} 67hDQp{]hoIpj"G$B>"P cP0aF&[ʫb())Ü*&fml]d=N>x$di~jYm=-[y L54Z1SoLy5/\0{ҥ އW!녿֋+fNA :4~64tۀL_-=n{S@^0  D@ 0CMqvnR9 ۤsNmvi fd ʛ!:w#jflrc%٣m(?gj7Ix#'h.aFVFvfdCC1 0N=bhZEVl^751Б䃰SK䨺|9) Ο?'/}ssF^I8H'l?]S4=ۿǼp=,u3ifn2U t 4o tC1lvT1*_ЦNf?uj6cDAu^[n%j. ʃ! a%23)~I8&/zI`Xn}ךX2T ؛|AG?9ໝ _G#ְ ݈U ngMlmZ6O,/S`|kkb 4ƔQ0hhS=di3{ gs+xQ ܹ#9{q|o2ģ?W橿i֢b˷gn>p1y"b3KfviŞ|pYY=bO:]I| ^za~-Fh%8&|K}|1~k0ͪ>JW1/>nyWExo-cVF~N ºv6܉n 4eۍ;]fƾ2( sZr׫܆KKKGVhL @$sYH231\A*<Ɵ1syۮ+۹1cs7g߆s(XшO= шr4"E= ш]t#D8>u"xC 3<9# DY堄چ OH&N K'?m=5x,0Sf+X&&Ly\6l_g#FY7;rFU >ver)SMY;?[3'z@)[nX^^uCT۫6P?Px?u+ &U*-..84Zc|$ dC ٌV|* ι==l>~uoɲ}r4xHgK_}KV<4Ftx! CΖqq74,O͈@[ޔ rAUN>Y* ]3)!8`ړk'n{ٸ-S>X ͱ_fﳋjފVw; >4/T<GɺSpҜ[q>IH`Ix y PRPX'kKy\״L;o_=q9$ ^=ؒ7uFd#C,$ޘi8-G$NȆreCæ׫]b#Gw-sϧ/>h=e1Lefn{4j$3&6wWWp+~-@2 @(a2n\h͛ы_ !,`HK=fSHI` P0IYl!9 MsшSp_;tiE9@ b(|R(e#kr<"^=Xш7BȑLNM&Ճ`, v]Y ސ#H XyҜ~_;W/M>V4?W-T{d+q_nS@M Qaa> `p״z%#gFґ =6ʬ4_R\Rh;#sH34̞6M{.¸\Gz0%}4ZhGP ڣ/ںm9JG#UNCh8+Ƃlhؔ_S&xG$Fr<̙ 0cms:}z#Y[+ͽmݠtXe{O8`QP. K"}VT$#' (:w"闷~&a3bEyَt/Ky5ֻ~Z>Iy1YQ1rAcE1ă QPwr{莍p#AFx!)rSzD⼼z `O[.G$PqU @Dv̂(3/ygzc;q}hڿLl:Cm-q rI⨗ч[ee$?LܬKr$;qG=S;&)  84~F <;CQاa)` zcFW{xld8+4b$x\N<}(4ă:VlO^;ї- yZْLeLȽcg6cG{_3 f?dZB se*p# .CGJtT2_An@mq7VP [{krLySr^6mq  '5'hI3 ARz &9QIo{J!Mv}p74j&-qS.o(=3Ú5(ɍ ~燐_GCbp˚j٬qt$@$@$0כ~g+W4_ Rk3iخ;ax%Yj 8ߠa,#c_a 㰢ÕƬ~njo-~BVXĪlC="qjYZh*7.+iOo^ypw[^rN:c"A +׺i,\3mVi4 dc}iL r5;Wv*SԬFWfgHG܃MOz}ꎜxaw' KGG^=,釣+?4y $״;77i{I|@1$  ܏*](Kgh9^4r<oVޤ_ᱢnlш72xV @bEldX^3] ]hV x~3r dCClf#<~Ubς(7&,L-6MߢC/OLȯtٟ@x٨'Ex=|S\8_ɽi^u9VwGmq8$&!Qwȏ&+AY |HN;"!  ȉ>ΓVI(X4_Gj,4J9|!!esNy@=ӑ5ߵƂP62񈲙QPY7rޏ+\ 5cDb3ni7JݏVU 61tuJ7=9d( |R(x?LV)@?ۋ @~8TQ(^3]ݡ[kSoξE[V݌m+ZCFlăMy`GN<غ)l*VLcW^?0Myٺ~9=Wums"7ܪ:Tf IHH2!~Mkp(1H! @h pĂicLud_''oɊVH%^62lf͑_g>\wO }{2ҝ8Z?Dw=j-uE(/zmٍIA$+C<*Cv˸ɓzQ5'ܩeHCt$@$@$@$0ݯ-1g2"eUb k0PIװ׾5d^g -Ku3* ֆzWzª_cƼ0;Mɴ3^ mp0@׋rNruEL:hA24ʵ"q s3م!SSyy9ZscHHH@QwF=Dyi ڤZ {?&M}{nRpښ[ #%1<9Q^=ш-rY_0 C߫~ hrJԚcǎ銪Wj^ /22iX$ ͍gMC]5f`#   C W*Vi:0t|8'f`CAsy}`w{C^=lTgΘ o0c4|y==Ke{%X h"tŬ'ƍmAi[ߏkZà̖uuh^76(   #E W*g5}~k8k>:Qa{)PQ`NK7x + Sr⁼z&xA 7e5f`>j#+OLw~4_˦xj]ſ0vFY_s-*y[9 푺eԐkyE*]٣5Cʂٓw76o6ҸٷEzv61Lţ@y`3+&%tK\|SyjjJ:=rM4%Sk :    ln=:V4 jAؤ]{yxsi>e'5vݟDO]QШfu4j;QݕW*ʦ5S.E3cc8lQ\6㓳<ڔo1cLKd{L䫍)rSmw#8a!/!%MNN"fDް ]Z 5tI.j :OeHHHH iX{ 5#o<أġi^f}zFA \讽4w^܅ MOOCWLeFCM"p| #R2am$'+4;$5wm H! aR?.|= ֹArTjo"G oBs#._+ŀ6wa$g<XQ-j?(M0B$@$@$@$PH1IX A)idoF YJAFfj> W@ة$'S1,79i-d .D.߬NlAG$@$@$@$p $Q,Y=x;u[zOx(*$Z/}K€Am`?ZY8i[n9m# ;@BcH$@$@$@$GWC{7`n(G_ܵٮ\@gΜQхQG:̡\~4MEŧvG[3\.') }5HW&.o/q: 끠6]47ղYv8 @ lȞo۵ ;DW^}wAKO04_@~imtwEfnB     8Է/^:?{_.IZв~Z噅YrhOGqokٮ"     84dvruB>cU3+@T !Tjn'N,Ef;E5Z %;nv+eWw}Eɂ_4*ͷZGCA<*mՊcizk}:      I`M^5__wq*<Я&[|T6 xnn.r3k\ #@իtP}Fy%_?Q- 8im'L Py1$     CGp=ݎXLmύ'm< N*~<-?==ݵcC     8tp~qh"nxt C6tDX8ۆwA͛B{ ͖ 6V)vOw,<7P4(0yF Կ+grs퉉cSHHHHHH7J}3Iz%HDw KwZOCۍ+cccZ((ܬU *I A%U Va2 QM?Mk\ô`MP\ٸ_Ȳz}3;fT6HHHHHHhOtǭ>ne`wL jQyTK7oެE'h4?+⪙RF$@$@$@$@$@$PlWOЁBgqFM .:eX|m#!BJ ŭi =b9p.->?oݘ27wʆ'     |nnY]0ocnZ֩r{tOE:nyq :~B:HulٳgL^^@z-?ఌAA,xd9,Ǔu[Yw~QawP5NeC@eP {,yWY[[9Lcb.1h}Z:#tǎS=3L| vnfE}  \//m|31ˑ'u%c&b.Y,Ǥ+9^}!gm?MHcI3n@ǒ^^gnjlEj' M"̥cȆkɓoo܁ZWYâ_k~a333 I2Aw΂m|F?yGYe{Y5e,EY̩(`yP?11a?nN:e /``q:eH4b.q8,6"8 9{'F[[[ƀzn ;:03p^kAh;Y!6[711)c:ּ~`mG7jLi6͸ wGmgfeVwSm :0A0\CX^^6w}wT{#     8fX ,$Q&!jTӢ%>Os !     k__ :_0$1$)AhKu.!HHHHHHذCKT0EU=vˠ/K5[YpP0 qPA0Mز 333[HHHHHHG`wwvy NuR mj0% { oA)#     ~fmm-Q梋:nQqJ%{.>)rc     _|| _0J%] )d0zAjVs]we`#     (q8G1fPuFQMq7*?瞳ǏG]p 7M۳s(V`3M?Heq#a59{Y\\4SSSfll,u[@$@$@$@$@$@$?<U3X7駃t _odF&RjHHHHHHA L+5dp-)n*oh {h  0Ie?֑F`HHHHHP'+'$ ahذl C WAtO]_.W( FIHHHH2'pд ki Z ?QNu#Ą2Z>M K`+fAslYb:PpMwwwMRO<ڭjt YuvHHHHHH kq㉁ ZxL,<_k55i* @;'3<ɆB OGᰧ֖5>ڕ$    H`7E&v 90lll077WK}3?     .("0Zq ci@Sqꦃ\ y$@$@$@$@$> H@0BUw;x?B#^ )*JHHHHH;hZz@`Z|C뼏JassB$@$@$@$@$u`J\̥OC{dxOճzmaېrʿ֌,MoQeJx%+'     (EVd@eHUY9'|K=Vz<1^ncMctm lu\㜹XhJ6U#HHHH"=IET6LDP~y|y#>Y7fBZoøx(;ƮyyDxyUUכ֩`q1igy    8 @U !\ />Okncc3OM?e̔fR<(&-OoH_/v/i浕ך/}iґ @^h KkQ|Uxk3_k+2!0#F9Y0#O'ŏ ,_ۢoU +v?gU#1Lj.HHHH%@. \ ˨P_'5R>./ pO*0/~V S0 uy *1l_Ypc 'woylgͬK갪ayyٌ:     ~ p`r4pIt9 r `HU>hZ3C/Fy ϊR/?QBtpUñ X #M1)F+_ٕBx^zd;ۿc~Kt9 MHHHHH'@@0;$6ΈP>鿔uR p(D?-O/oOƯOb,4aUIikl$x}5eskVɈw+: @z\Όp6͈&JjU0' P(xOK`:U@ 1,H(ψcai0n۬VрD ' j ],Df4?7GO_:Q?<$!xkFFU/"E;ne޷>{%VLOc:     4? l+M0+xd.7/g?yK'Pރ;bj(!L *z@Ox5mE0yw%FuE<`H2瞊L @B0#'.gaMmVv(X(tlwJc ?0%X,!^qRmX#Aj`74]k󖉷2Q?tԔ HHHHH 1rhaWB Y\ ~< d;cş;Gc,W.(x_uޫX>UNUʿcno}r/VKOr~م.bߐ5Q+6n z\ ڴ{Hݧ`S%e_|p"v̌X3HHHHH  l=yά 8\ ϔ>#/KaxQN?&K.xmxiLȑY0=U5ҎɎu>G]KkXȶT+0B(~ cߜlOW>m?AjfvБ $!@@8ds`8jf5̈ {Y1_ngU'Jb8&~^@=REmQėHv5 x+ /\qk8_OIKѿ8. [?HHHHH >4xDbw\PC!w}(,OOv.JK5ԏmuwZIo@0JUsG,RD$@$@$@$@G fHb,k=  md,N~S6+6٪Y}`~{*AuAZ 㫊$ּf U"]ܫI$@$@$@$@Gt9`4s 0Im9Nj _k(VBaǻ5Uy_doq7dxM wPx %ܦoJ7IX FA]Xц8A:㲝c~| >a:    'ܢ7OLDrOd[EÖa-y(-w:] (eQȡ{0`fac `7koh7?ЄfTWcQZnջ&iFqSaHHHHs(j7sVR{Dۗtkܷ!D'P'Dφq$j5Y Z b@>~è6r)0@Bw60%] IHHHH +}D?ԹyF{y ΂waYնr- QtASOҏPKkʼym@U&D`FIDvAbȃ*VY'=Ow.ǸBҷʿ|C$@$@$@$@.\4gҕ@ .G`D[qonqyLp]6\{^V?ዃ"V4xSDRm|@ ]OUXŎQ*#.`׀?IHHHH @+q{> 1W9Oxx 'y{#Kᯊ`Jz(M$)"2"q gGI9wc,_S5Q_C*N)(K%'2.MLL$2Ht$@$@$@$@$p } +" ) pUo^z?3Tim!whEO%ԣXu@I[ ݣ l__yWzLh'|?sIHHHH%-{4D\u<\~hY0maL&?9O̯?eyEq!+cu@]'YY#T 'v?Bǒ(U +ou k%/E˻Ҿx^It_A GG$@$@$@$@  >4DR 00$ 4o}DC,<ۇ_; (3R %FTB=xeuwEߖ:v?<'ψ⿥?Begfr\v(L0ob     V  p599i*(Pţݯ'm}]9 }Qޱ FQ(X-o~_7.Y6޹Nsܽh.aHHHHH@=X N@!f)x1ٱYoݗmKG^E_7,cj E>W?:7M: C a  @,]! ]#p?QIW>0s~MtoѾp^ 7pBco\ 4P u0OwW#oj xN,A$@$@$@$@>|"izyHxM.o>;kS¬֬Ž&JeQoʫXpL<3O <lckaG>g^gՅ%+ ڐXHHHH<IڑIq % k~4<6nEi߁߀(X ~J{"8Vc$x-gP;_qOoKMk#      | Έ`Hr,﮹o?Sj+0]~E7 { *$ǘ5?ט3?7o=VAq #FWW`Ըx0Yڳ0`c~O<_{^@w 51>ux@  Rs7vݪI#xŁHHHHH|kpp9v 4\\״{p 5˯1A^Ojj x8Gq(Uc(Ju 3?ϛ/\2;<^M#k #ׅ:z@sh=g40'@936c~斟1?09?jS-rgUéo7?x͝wF& Gx@a3@Es]kŊ(FFdr|Ҽ[4+桵׿nyn}bR87pIHHH|~'|'3Z]557J@Fri|_, xʕ+ܹsڧ`8]RJQ %peeDzi[k?x,, ҥKvll,P\PG?m >i82    (.-SOM^O46H݀E6D&<_(^ o|敯| B_q{ ùujH4C     | ؿ~>?ga0OAwAFJ9|FU5 Y`ڦHHHHH yG t=`w_D:%)Fn4d= EEJYC=dnVsmqw v,J$@$@$@$@$@; {V?$Ƅz%C3")4O,& ;oT*+g18jǏ+ $#p = e*WtHe\:+-< |2\~oʠ}M`ÉofnnΜ9s,--}(      HOW_pJPC %(6"4dgZ}O~WMY[)pv i;     8Dkfww;,wD:_~iha<*vTR9Bߵ}+T'NgƍWHHHHHH#0r|+ezeGNTuTWƃq5 0v*0WOR/5Hf>__ `>10M$@$@$@$@$@$p ??_Ɗ]L"NɎ*AMA)O” M?Ge{IGF2a:jmEi_Ih0NY!Sc4OC5iHcwM#4B# _rt}#     8d/oȞqR04@ G9#T9wM#DZV%r8MktIڱ0y$.4ryBqHGʻQ頸ٳgo2t$@$@$@$@$@$@G˗/]5~\ߏC JɏʳWJvUCZenP| ģ!C 8'[[-PBCG$@$@$@$@$@$P U}C~Uqx(!@dG@0g먂րʣyH U !'-Oe*#i }eTCU!xX(E@ ]2U5T#𻊾+w]@__׿?4t$@$@$@$@$@$@վ~{23_S0SE_PU|p\"u~:i-:+#i7tP5j;F\TW}nWU~GwyeUԄ" V4VR=W2~_q-ݍk!t!DZeB28M#sCr[([6 {OQtP£ ״A >h<(L=u?U;yPQ&Nrn}76<4*Go入U텕HHHHHU,Ai!gUq xqU~}#\BiZ4\P#Q8B w27P][Gn85:Vt.nK~Bq"WwXXѵK$@$@$@$@$@K w4 NݰӛU֭ʷmi}MuwyauTگmjzha^LHZLF'ʂ&TOhZϕk^PÅT;,tˣ/ (С?mK @B4 sZ&,r     ȋ@}j 䚇0CBr705z~]ʃܲAqy}2;1UQr_ղգ,B-g+t~D OB!rZ-㶣w㨧e6'     Qp7cqek UбtP-ƃx"./k-u5OC]-iy01_YM;9 v|p~Z:j] zGFqCCu>-dI K9 &J?B554t}7}y4tsi-siY_B*n-z8B8MqpQ^<(B.GY8 ׾Py4ʹrv~ڭ4u&     @Z-q .҈kP5 *P6ʣ6$;&72A鎸h9-VdLWNu~~F9]isC-qu̪rA@Fy ei$@$@$@$@$@$W? #ʣBi>t)Mk2 UWI ri9WxP9-e2 acrLk|W )*eЦ[.(}G#2?*s8rL崍2#     <#yּ Еi\"{ u~>,(m+v~hYWqOyƓ08X:_O!.2wܸse\ Aw(OZ^e"smI;_ZiΕ! r7ЕCҴ*CLH2mCݴ׺twlá:FM#_]\ ;<74ZWC! Z_FMR:7*kHSۋ+\d;YN08Wa2:-]A |:Rǡ>\۶Tu\CAچG:#wZϗ3M$@$@$@$@$@yMWܕiU_!W|[W˩/i Q&H2ɶi8 5i mIʄT gi*ZVC0(/GY8Ӹ(*Ziy?B4BU<đk N91&8i\CȵAw匓 @tOy~ii][~wC?e!sCrk*Gr iFN]4a/Sjew:1Un5\jqnG*rH!q7Uڦ[Geb,괜0./4 JY52ăC]cL˩@ShK!La9     "(Q4/+Ӹ5z҈ y*W_C4 j_4-]w!j^;g淪QI\Z c(~y\'H##OF%U5mS#j\CqJ2xhwG:7%C[#     ArWUyA +C\5Oki 5]1niȐPЗ# %?Ӗ7 iTYiy }G>ʶ2F_FD=D>shSQG(P֯m!©܏L      ΍CPu1UU5\64©mG4eEKuX??, B78T!eUv qMU ?Ѹ[Firaq wܸ[Fiٰ 5`p(IeNr87ERrxȒ:UQލk[/n\,iZnƵM=Y'`aX.mg34#c \ث^ jZt|urҝ_cy2/Y@ @婱rɯk2͚t:X3ϘCO}_b%Zhsɭ9u9}QZg6x|-9Dz:c畳f?ckyjj.!@ %ݦrUSgN4/YgmfsH|Ǿt.g5Og ̖RPql/-M3k/U=Ϧk+V= ս|o!rkKqg~l @ @`wYmq\fHKݱ5T:gj,j]>W9FyǮV<5Μ~g6𠠗|A8N?뼾-{i}?SVuurI-5oڳ{G= @ x:zߚfۗM߹ԵϹGY3{\@/Kc[}Yէ395GZ=3*85CRy=ӵ3XGy[t <@ @!>ͺwl}J9[ijZYTtZEtg(뺴#pƚ^6^['_9[i弭j|җu#Z7G @ E{j]X:V:;g;Ӝfdn69YZU|V~rm8l~ ǵN_xʅ^j4'sҥe-yG65MM|G> @ hJw65 q:lWI_32s*c}T'}k#=k.@waO[7[SHWN_ZuW.ϒ&߱ڏXz( @ l54d\-g|F˖e.g.:z fM.4dkXe^Njۗr~D|@ @"-+klu?bk^5þgT孭F6g;?~Vwr@xQH=umUW?Jg޾e=KV'g,_'koh> @~]kOεFҪnͺg~˟Վr[qt:9L?g3~-_ y]5[=by^Z}[zZ>Ygvsj]C @եsV泤YO[s;#=sl+ݧSu6=Zkz3\3ֲcͰ.J=&]n{qV|ok.y@ @8`nuykfdsQwjog͖,َgIճv: Y2~k3ԳUX_N٪>/n^`7 [52Vunu]/[j+MƝ|6@ @ԥƺnΥM=U?(55sۺױse;-[_Z~Xu;Hϔgݔ4ӹ{ge.5 @LR=f&8mJt,Sgy3v6[ыz~WZiU?yg:lj}kkڭ|' @ *[˫yWzizWMMNw[|j3ol֗3˽[dlV5etgֹas><ٛ[?@ @`/K޺gs+hn=z;޲9[}Kg-{3O=}lkl ^=y̍ @ u5gseHw]7j3_kR93ʽϚ;gؾj_qֹKQ.۷ͺٽY @ !waVXUuDz:mS,8gfvol0Eȳf=%GqկqΚTsﵣ{P@ @`Euԛz(N5;If][K?#ϛd.}AN3Pl 陫k]׳C @x'Bisf;U>k:r^/s#6osHCv4}/})ZdsVYJMC @x7+m֤RuǶM?wM)'kդmʿjmLY<ˍW{.պ @ VܬK?ߩӭٺ~W]3̏S3ϟf.}jƚZ~FIo3 @ލl|ݫqgܖ=-h>ştkY/E䬕LJ @ ,Y~;M3SO?g+Ξe={̧Vi4c!@ f"i`O=z=g4-{kfгwY556|woڭ|?^, @ w"pd|G׸QRY;9-WgeFqBTW5Y#Hh: @ w$pd =59\,+5]_jWyw]Ggnm}a4A @Ѿ<鏘9{O]Ru+M# @ ػ,^Ϝ=/?j%(@ @ ~b{?oYDzÿx@ @xB A1vjpԁzN6p\W p G@ K0ށiABZyCAP8C@&*CP=#t] 4}a ٰ;GDxJ>,_“@FXDBX$!k"EHqaYbVabJ0՘cVL6f3bձX'?v 6-V``[a;p~\2n5׌ &x*sb|! ߏƿ' Zk! $l$T4QOt"y\b)AI&NI$R$)TIj"]&=&!:dGrY@^O$ _%?P(&OJEBN9J@y@yCR nXZOD}J}/G3ɭk{%Oחw_.'_!JQ@SVF=IEbbbb5Q%O@%!BӥyҸM:e0G7ӓ e%e[(R0`3R46i^)*n*|"fLUo՝mO0j&jajj.ϧwϝ_4갺zj=U45nɚ4ǴhZ ZZ^0Tf%9->ݫ=cXgN].[7A\SwBOK/X/_Q>QG[ `Aaac#*Z;8cq>[&IIMST`ϴ kh&45ǢYYF֠9<|y+ =X_,,S-,Y)YXmĚk]c}džjcΦ浭-v};]N"&1=xtv(}'{'IߝY) Σ -rqr.d._xpUەZM׍vm=+KGǔ ^WWbj>:>>>v}/avO8 FV> 2 u/_$\BCv< 5 ]s.,4&yUx~xw-bEDCĻHGKwFGEGME{EEKX,YFZ ={$vrK .3\rϮ_Yq*©L_wד+]eD]cIIIOAu_䩔)3ѩiB%a+]3='/40CiU@ёL(sYfLH$%Y jgGeQn~5f5wugv5k֮\۹Nw]m mHFˍenQQ`hBBQ-[lllfjۗ"^bO%ܒY}WwvwXbY^Ю]WVa[q`id2JjGէ{׿m>PkAma꺿g_DHGGu;776ƱqoC{P38!9 ҝˁ^r۽Ug9];}}_~imp㭎}]/}.{^=}^?z8hc' O*?f`ϳgC/Oϩ+FFGGόzˌㅿ)ѫ~wgbk?Jި9mdwi獵ޫ?cǑOO?w| x&mf2:Y~ pHYs%%IR$@IDATx}eEy_izz'1f!IREW]\*ʪ ?&Dt1bZӮ몫DAE@A `f:[^tx ۧ:uThfBAgT40i3LKi |߿t:}0"F>:{1;'MrÍ_azB|1dT9KqqGv0tӎ~~dd3Gu W jÔȜ\L>Ґ(iJ_z{nBTPI;Q8Dܤ!qD(#D(‡ }qN4Dq6ۉ=o|:@\X1ΘX 3`& >_Y[[и+M-TCABR͖̔@(=)ܨtx^V>W`7拎QƊx_2M.ʸ|@hu%ezvhN`ZGxԱ#L|k0᧩ `>ߊlbY-[+}GeTTx(xS3j3 ̌) )r(VUϦg&k`.UwA`@`PBAA;31h݆6^ Y-;%Ё6϶O@.dxi fB3%@JU@⎁Yr;%ޗ+ PgpqȌL@vɒ%~uiiUf-'JLFRSi1RBs`@󇽿:6 R]Yّ r-]>LQɳRj`C3< tR*A!JY5%JpgHn(-@SPvr5ȃЌp&2 v+yCYK,EhP[+~/LT I]vPj23"5#uKIPt剞hGZM[C5\q}tVJ &J8i̴`@]]p6tfv1!e"D'5ԕKE٠V@h !T੫(OS[Q&2fʤ:+Yf˥Jc)Ιn&5g4)~N|| ?<&s#@̶Ē(R` @Yp$LJ TI4M`c \2Qh/+_F9Y8(k{Lac"R,kNrB +r]#fxjxb4K`TIC=i =ic}4W;霆'ep+T!LO!5( ;*0|L2oܦC"YtIkOn!wrMmrև>#_sjwcN K;~ ~UEb魈h7 ΕfRKeƛWn&qp儶g;dMK=#MH=Q$ʲ;0¢ =I0y;6yQmmzIVi#zz2JZ1qDwRzQVnYq$Diz|wa7T *(9FHFo4pd*OxiC_p$P^U:!c_y(i2RD(^)lN֬Y3 yGEP@ӌUUU`1P1?.Ꞔ|՞k.)ӮJv:h64(E};>t{^Y'dB1b| &8 8!. x |yzhWD8v.Q,A^9q(#^`*?3„[zC\ n7*Cc/ 8ԏv PY U^aqLMP$ SBG2(yEС:Rj: o8Pt{:CiNc):S󾫌Z9* 9jeoL0;2k0dτsg8ODWlq偽i=׫.g^Lk 9&gZ=M@8mv~$vGC)9;NYp@fj:DžY/x-`Մ "PQ8*F/"R/CH7sou_lg4'5݀ 4 P~)>J as#А=($_ş3!=?՚(kMљLGt!~YaCBO\p gB`/ȒnN) D:⭗`:.5 ttZl& ( a8L}ЮJ3S f)jaKGm'e E >/԰oe̤#t+8{D,Ih"2F%A?mE|?@0xIoNѪpt^ţn<Z"i7d)_hy eJ*sisSbG,SJG@R18UcuQchY"B׌жT)S&|Tx'`PkpIx@(jk%"QarV5TpC3ě]ޡ{\;Jd&n2Zӻp*(;5^J_oN " a(WM'uΓ6<wrɎ vB|~~C8DxUW](=(Fq؁kGy, ֭gC@Y4q NCc2R)bq2&^{wWZ5J /eH}H1 :f77e`!*aBzͭmnxKTiC?KZnp?HuwG =]聱QGrH%[}x4tv/0), BWㅒ7I/(')'mǻ }Y}xdt`&l/7+@ڹxہ3{́hP:Zs4g fBS .ԗn܈c ;`4,*ñ ^HPԎix56)GK<Lރ<9zn@јTy8%6n_{}!-*> nNrv*n'g {>F^&'T@!'n<5t`Qg {$1 .M<7=&+CaASq0S{xE;m۶MB0#g> r{>}ZfBi ~+\w42}ΜNz{qCt`[OFUr)Dr\Ua$o$K%̚* 1kѪp3zn|d\\r^(&x&9)?&#n"@ eӄlBAWG3UsaxH Nb2}/P7n(O=l?aΜ9WN= Š9h 2 vqg([I<P9&1Y sqΠGrBpo.U{ӏxN8c0H!& kI-p2[jO sH?ā1ՀΫx n;O^|_,58eY4e&m|ܤ|J [ CWvit_b۸;?򗿔wrYgɩ%~kРK +3ۭv56Bޙt8ڣ# LdMu呂$(kɞd0F~iP搌=O7zhÇgnڭW&(o׼5pΛj$;nN0Og?!$J L"4Cncѫ#ʇ`6URg~c~n~!GሬӺ8ݎx Q6"_ ? y*kKT@[s8ļwz0W|AA[Syq$fYr(YLzY* Ҹޛy $s`ǎ~|sitShcWіШzm?.&f

"e<'?bc\hiz ;ex ȒLr?u((;>rJ΄mdXSF]J %{(6&9: ^F|0WqݿemEpE)·I^{y8Niȃ=2M>.CoX'6; dAGE욢 5^!6 (&e 8>,CJtwaՎ#}qȇVW)r@a~ЉA^Jx {G `gk)kefnƑ6`sHi&oIPQ3 @H?O@ÝcRg0]yP@U0gW.7i"_h}_vbz u'0W?e5He#Ӳqy?Vv0|JĚ]A2уMag ?ٗ])Dfh.M4t n@n@rP3ًgrҩ4HXکht0CDh 'G֫"dYZɨ1 ͆1!h F8FG5VNϐNy0 A04 ;?v~TַMϚoVi/P./&>Y~\+c7S _}T~uw=Jr?S0G`vD,)1=fNJąm:RLT la{sye'TBxv6о3\ e0֋nݫ?ПB#XĤ_iÓw`ehI쇯qXA"=ȟCh-+GM2Go],e89'HUM/X#=[I# cݲddԸÇ?ɶ9 c^_9pϣUO_ψ704pt}gOD sKQ1ו@H &(cd̂a +{~{ե3\%*y# N. *,(dt7WPPV4E\NEB]4AI iNH.(P۟+_o>LGBZHw?zP5Zf*h*h^ LM ~3 ̟>F vVyeY[~0KwJ/=hyO΀ƃhpG =9nia|y@h1r_ےTaB8s{;7:wb(8=*0)WoݺUy]`dxtKI?z=M]g͢Qu9-1[.ԖW'߆$BME&{l 6p`~f?M²}5V>rg 9W*ƫS^󖳥^ l|T(oñhXXh7),.s'ƛx42ڦTO^޶uzrIQ6.?,7q!W3FL~ ^eŇO>A 5yp]:_2O#JC1=H8ܬ.eݔDhcw@QLY`.c>,f(V(N|JPp;[qZ 6$ Š͏xT8 pӪt8Zk@yaФiY8цj3*4-^}nR-ϧ0ձCôUfh~4 ЏQD6|R#>x1 Z/ESyB|];>>X_ #%q^;!#3s>et_,a@*߄ K WI{_ޱe@\T,oEa{ҙL@Pcp<6q8KWw.DTh~TǦl9,t>}eX9Hcl9H`ϥgb}YCIshΙ >4K} {Tz# .}^~,xɛ%rfϝ|\sŷ?.y-~l2J='_%mޙQ, = ?Q@{~S3%7{"4!vukr9f|LhaU*մ{2/EӪ#fZŻ 27nG9_!ZQ˗/؀`>dUR('ܚ`hfD&\,ϓk!,f #jPo Q^82(+qTʮ0ɏfC!Lʝ va-} W̕V;3YGv0|^CagYPnS>k҃XWAc}l~댼OW9ϙ*g|O8c:(754&pIS׳x@sp ^!g&ɍ8KRV2smvC35mXUEJ iY9|ZyM* hrM h_#E, ))mτAHW&2)SV@aY4}NB;x7 xq.h$ C;!g!Lt!0f v8 I/\?n&K v@ԒV4܆9F4 5%`2w?Ӊ4エ*g~4ZHDH!O)FwCӃ֮HɐjڙFߗS7FkeN';9kk^.ǜp/ԙ% kC4C: G 9%b7`~ÛG=L2NR(00v,m-aȎv $(v:P3J׊%MDgqz:`C qp S^@0߄> oy~ 8tEoo5xGԡ ;v{ {$Õ+UMMyQ7ğKXcĿ򰍄)ayAsOA( ܁" S•ȄOI9 d B/&A^^cBQVy 7?^FM>3q<%j1G-x\5>?tA>$'xw74j$ĭǕؾ97kD58-iQSGX[ÏYZ8`TUj[l|cP*̰=j^S2\*-S6i$f&V;,ag.Jן|pNBC0Xn@0Z|kxGoU~I_wa%KJ!N3-(aUpHހ $AMt{ibe2y-S? k gxu%? *Sɷ>|tWn@ |IB^U)#_9tú.p+ h ӵz++() R+y0Nf CKjfOWlpxuyI:=#7'}T9MznU65`ٜo ?q_|I9,in[ 9 ub`3TP|z7-+Y]3rɗ/%>"^px@Q&L퀠>FIǔE( )#d"َ9ҹ};<3΀"ܓd ]L=ih3TJ,qiNQGA ;u%J⎵G}Tm߾Cx'>ZcXw-ބgnZ؀%`4tl'藄Oii:7|rJT/}_}TΑC!N&9bUV((ȡ?K Lh's a8R_~BL5yᦠ2>^ҵD! WWJ* UfL8yh P ,\WX̤3#4~K„ LԌHƟ{9,M&hx+^]¶El<3ጆ~Pȃ_!$^F4R`"ޞEGez!4+ wE-w/7x:X{<B5~4 /OZ&ip@E G'-7y`tGIAyu Rf%$0ӰMG,!F}ɣ{kž ؘ X|~65&~1?"Xq󡽶+T3Ef'^yxߙ!x}~>]⃕&$5 ?(o(c?/g2i(w]% YoU(-B^p Ef-s帓*W?40v7?(Mnc˼QИM6M;#_>QoFQLA e#b' Q"cb Kg|LKypYI09a'&ij45 NMӚ;~tmtpfi2otHGuQcXЏI %EbigJlё|FzA\c\~ {)ۇb_ORޖO_\;?ϔeBJ"`e t(Lo(Pҩhg5ſ|x+1Ѕ-}1Jܘ.Y:`YD_NCU]Ι]fy-@ !d^vz4LJK5:'t8 NM7Qª?tL/)K3M0zso+`Υ}z '`0)ۛ |}n mظY/(YN~̙ GiMǙL O|HqxZ{2BՑ':CrS7J=ȓxOd'|L͛ Z4][eJ$nxo҂DŽkó }=]Jå<^>0$Cȭ^G\k0ď*t\%,. e`V"h*qrQ3?+_z?^ԵҵJi,vfo*𒽗ɥ-m7ڟ]/7GCwPt (4]E 9j=8h.]E|Ma[90^u+^r'-@HNF(3¢Cgi >6q@Hmro.]>x{f&Y~lU`IYazvva_롃(, ~Kg. p<#=r 8fKI>N]4Z=B DnA".җBxW_1P<&sOEE#8klЛ8>sxER`( m:o!Q{t@:]I$YH`GBYZmؓjg9հ T&1*q9%UDڇdnȬjy%wj.?ϕ>\" h3tnW.U>T6wE^Z٩3.xpaPpBЏO:7 *ON<@$vRatS*0R&͞6 LIbgYynz`g&K$t;;h9@IDAT=|`9\AshO3ԏ;x޵i x Ehn9b^ђ6(^08SΔ>Χl|`+wi2%X*^'>` {[N>)A{,LYN:oLkwK}?!YOI=]~u>ݟq_|ǝimlѲ > U aܴwld@sW##Mz7>īKw|t&ue&|Jd\ D%V3\<Œd?&⒀G`Y-pg1ďGo¤=3 XMY8uD>LHc# wBoiv)vqh|fOǴ`>+=T8naM-kaydwayfp'> 2x :F>a-D AuP,n;d[E}PKv( d(KSU;K׮]k 9l%ۏ͛޺e<O0|q]~;whS5 ,r=?FruM-(5DG /Td ;4p vܣO"}|H#X' ߿m] 2 !N aFn~3ˀ<#3҆/ q2n>\bsM'oMv𩒩-/ryMɬ3}|GWh1]uo&X0U_9(뮻Dz͇uҹiaN{9zyrڙyǧ7=+?իA}E3* z D<Ǫ8dRp_ lJ* wt]ǠK}0~(&_GtFaKCz a~Ҹ (-R{qVcVX ;| ';n^QKK a`vW0<<.t@zg2;|;=om<S] \yh hZtwgp,1ᦂD|b E qp >9 h+kE яVH Ұ? 86 é;778J"ӨFF?{TInڱDŽ&}NqPTP.0+pr\'VޟGR`oVd O7/sG~9҅-ECs}JI{{KQbR(\̟7Jx yg{4FaVBh#M@ B<̬XdяOڶG@f8V>7BPp`X:ZWqtNy txo¨#$nO[ziTª+dxYx.=իdFW">i 0v+gLC2`2!<-lO=h *sV!xH[.yD]jl13(xdi‘9m*pPsj*jgهt}ڈ᧽,t[O~&\YnK|P_o$&M(||W@K\Y0pk0/s{+Xh'>E~&nr]]Xe^bp!H&c{]mZue|G,s$m?O)7?//++VBT&H3e+0u&?s̢>#2c!^`n W"Sa̔OGgWs@H= O b+ LW0!0Ef xsI0np-5;䡇~H{dE'NjqMiE 3Vc". DE2 a#VB%ϲ NaI0^[vKY02p[|z Z+Tָ-0Ch=:EH?>( 'NEϺ{iXq?(Wˁ{ D\YH բ860:K3a5A)/-г+_Ha˧n;W|F8nw0qL e_XBՎp*I> e|ea _Y𤣿i' xX~ 22CU;6 8/:݇X8^S~Czyg9N J&m\>eWa?w4+Ec>D^k/,=;eSM'˲rMJGYsĩ.}/ ?S/Jlnаf kGO+U/Ot0p{Db@m4ĵ`:U˗`+FM7̩(b =:؋۱ű(@29m>Š%NudU 0Vt`³)!i4#. 'cm*dFdLɘQ7i`# GqG` J& K5.SB`%u(y53P%í'߿GHWHʆT<һBzFs9\V{GoR88/P(ިXΤM-"4p LكvѨ? Q0ta"[^a[Hsps@{/nt^z rPJHY$2E6 M@ i5Q:BnDc==DQGL oxx ɰHq-- q"#Mt3O^ďwE%R4FW@ʏ|i&0%~g?U*jxl|IjoI-[*ǟ|\z858K Y9|hg>;ј#s1^Ӻvj=5 ]a A P;؏-\ htb+=J3F{\ji0]`2)2{Ew7|JjIsT](#K5J O=>GXah6TR sBc5_/GxX K#ۥ bagz&Zx`xM^3Jsss1)?m]";.8q[ctE dhey 'f_C?tQZ,ti2 P@d4̏_ 38p4qw˹tE'C:-WB|\*mtO`7Wͪf~;t+2͗+|[aa'S x@S=ea\u?(eu{D/L *eL1HĻ8 %yyx 5*470=Ƹh<Xʲ5H }IOD8\#~y-++/Mqcn21{v琣垛>#k:]pcj&Sy:;KBU:Bi7Qw`((M022A .Y<=ϟl^~JZ@!X"_JKП)4LG'; fESMg0p;\gg7n}gameՇkz#xûx.qx/qƞtGK$d> ea/6}(S:5xh4*ƣ,a#Vᩫϓy a4~pIThOwS2$h25 dI@o0lp/j`/bx5nNof n&k~|jcӤč .HG&*lԙ Zduh? 0;E cs8Fܭ/~|!xzN\A\׀ppUؿJ˖Go9$OዲlkK۶O2sr\9wX~*hill^pxV"9M2!|pv/.>soeEhX)P.p.Gr%LM BwvZfu!uw~\ < ݡ$n$`lUj|Tf %hvwK~[uc{4z:~,+:V6)VsҽFZz@$/]w'DǺA9Qatn5 VO"x nOzqW"-5L\˟*6~`vE6Yifq߹1rDC xs#}Q봊)\V>QКHRZN v+vC周Lg_F25_H1ߔ _{tdB<hldah6EݎgAlR JCb-K6B_'C-9[2g }XOi\V(MضYV=T}X8RE/3Ym8w03!Z10a`^[9C'ޏ _v)6NS3,4HnY,yld;D3i,l w/&py&Վ ڿTTRWD8!<}xx ~3=58iq48LCTXBU'M(vu)1Hg4saf7]@ +2T;Oa+f| gK9kn[[79o`H>ݹ-MRUŸ?m$1wf+ktb8:3(`ɴċf.Rd9Yh#{W1l*xsm10~}r]w{S*,x%.}yTw;?J(砣[73+OǷ[5 qdRaZ疷o|SnDAKA:ʤo79 dVZUeD^aeihj_`(8„О& smC8NT`>T,].G*,u"NVonUX=g3j!se (?B?֨n7n,M…z4g4a\4 ƙs?G0#G?}]>JepY&40 T 1W#u8뀗\smGq@+ro ~{qh^–ys۪jgd0Z<@G$UA +WlrYn&mJ0bdR绋n)!LrRhŠYZZ[eNK+}9ts@Ato^Ϋ:auI7.onasGYz < Fd0d`*8{W5sa٦ez9Tsd Z{P|O9@[fz1 bˀP65a5p6@A29+I֧TБ 3-Annn]-2?AOoU]t@C10 ZDSۻ4wî){Ź혶&9<ذ9(<KѾhF>R&7dZ⋗[nYl}>Z/a`0bzRz%o}R-\.>rV᫿A9׏C|>.qs:acYߨི5ׁE !R5LOʜ`wzpS8k3o`^ 0Ʒ |Xiu PŀWU5o]#XM0`xH*G{ @c/OKyk0/cCXCrOO;M $`S{0$jfTFh.S R=uKR(hqwA\)8_5P?J1aD5lT4.jN۫ƀFm DH~(M2عx[e{pPs2܇ 7Gzq6"QP nAثizc'JӚbh`R~-?fcLktaseǂ~sd!ݽ I/I"Ѱ-1ƥ5v^aCovAcSwNE8h[u>&Tw~Ƹ6Z%6vTvyGdZ$<:|Q4  cˌ67Č>HˑH%&lT|$e|̭ |E557ΰx C]Pp37s%ٙ7[MjK\r҄W0ph>#/>dlt|e_`t񫤹v.y_8jHP>eZ,}˾,GѨ, s{h}؀Y , .4R5˰1@?O[ SQn3]AG84S@ҐO>|rxnIkM}G[&\%+B"AU2*$UAɏ?4dn9$xKA|t&_' AAP3t׏eXx^2|SbQTcm!HoG Lb" l 7OVcG$bkf/8_h,q?.,_H~OU/-å_CY31M4¯=<ߜ/uc4ܻ/Ds+u\reƮ+d:7.܃-Pj9ج~-8ۆuٯSwr x7P bLlq͍1n<8CrW4:ihzP[P4Z/7wJro|Rࡿy%)-ޢ1gJ'V~z$ E~qX|0 xi}P8 0ϘQ4l+m[S`pذ|  `xlPy X, wRXPISHEжg|,~kd&Uݥ„BfϢ,ݝX`\ۇ]}<3 jBp-0/{7#kcn.* ѭ].-vC ,|Wńt^$^+A{*? /KΔUҲ?QOx {??G/7심~D8T.g{BI-8aBFC`nk?tC^P_@/ai/NdtڬЌ|R*ŞmR H/{S_Kܬm}d yYvx2(Z(s.{dB~P}lz6-~N!JX=+Q!',"lYLgMp!(C$w` {h,:ˢEfC[J ^O7 Y)6T% ;Lp' @T168uЗFWŰ+Om?v@57D .=08x X1:GiA&C:cp,OI)֟8sBnzb)Xʁ{U@8?=97tmR5 {jxgy=:KnXUx±-{oE9 *9?Ły}> _=;B:i\>tl-RqӜ^ ̷744@k^M&杨6 n[c+]|dA7cm' mط_np){FǮVpQW)P=q!{&Wv69UY2"5S8Pa,\!*%X K@ۊ X#nN(V \5, NW!b^|h>hëF >1_lf͊JNr%OJ?n2?X<]x0[r޻dl 8Xj@ ƴvRCL=࣮̔L/ZX0>z++EYpe84@=+k:8tB#xh Wa:uudømAprihf-? }X TW{o!iS`<^QRVg! PNR|m:}}X=vIw9ev 8K#p Atb?@z˰fNs/#;^ WP ؤ%R$A]9@Ö:Yϗ>Vh0ѥRQ}A* {8(Wᡛr뀭(GA?t|t˵2n\MIFcڒs?N5ȳ)Lj8 :06qv>_IeNmܷKs/T{Pqe iasQW޲^3MgqRG ]xNu b@N 2 \---X+gր;,.7!J Ȇ ʆ =x^[2; "Q0{ 4@O`z]mu`Lþ@-3x1- {&htxRk51^qc? ʄsB=?)L“ÿ^Nyۂ=]ᑆ];2,;:M?!!6!=|% ])SQ|.WO2%"C@Y,@ {%vjS҇žn3f⃄A8̏q'$yrt 2ayӈLxWlz;~@, Aᴛ֍D& <NL\֭T'׋w'tׯ5B8m_62&7YsV%-/hسM\#֧)~o-8X%{n(މY8]X=WәM3McC=rHCr &-8\F]dz9D_0} e Hm# S 0,/8p`%Y̤JLSAN\ ,+iI'&# |C)Xq1/4F` F8ֱ31櫨]8HK@q$xonö_8"pBACSk"78c(-^BY|?bf-t(5z8, ~~}Z#s2<2̄UoVwLRqXSmܻ]~/۰y9>iq7= ¼ǵxa#~Ӏ0 ;8b6V93Q l%>,3h&0/l$d+rrހo6]w݁I`s p3%%Fc3TCx6w̒b0V)$d<3RlF@@ixF`dX[R,4ų9!~c`>qEX+]y1;g^Xq. hߥ(`'rRVL陷tljKj2+jPxO|vtq- m-dG >/g]n#`yzlQ\f"V $%0^t~ZQi =e 6¹VHN/W`9ίPjڵTJuN,ր'=cˁ~E_*oݲ}[/{χ"/[˯B֊_M:_w:KՂb0<I[US Q{!4(| `KR\}48e30{?VA"#x>u}YJŗI0fY/Vә:y4iï~B>2b=VpJ8Jzfj~.[DlLB[+RP}w#ds%q|]B )h%RMMM]qrYyG"~Ex~]w{"mz@n`Z t(( `^J\p0]YD]BCJFm)s,qIkɭĦ.?f[]p*?!`Eȹ2t'H''?i+p lXXFnl/g3];W}{va{>imftuAO|xI8@ak. @[ 4; C PV SUgvڅ_|4d]x[y 鉲&YS}M6n30z@Oi\y7^II_2A_>cbLo\|l{@xj.ٻc̮9e}w_P7unt ϺptI@׿.Ļt|>iCP:0_T[]]]s,z0[/+\qf Ԏ6Ȩ;]twr/~LrUD.aŘ f5Jumcؓh8=!fҊvb K|]LX~@w_Ltd|)`]\GLipW`SȮ-:J;U,P_>[u_JU]|/+]gf OG+Ǽ yoyOCapђP0|@ .8]c|\c_Èᐝ܋£ MH:%h!HF,lnwX.&*\ {F L% ߖ=29%56+Z!hd`u4tL|gm@Xq@jյ v`t4R} 8гO1Uf7h};Kn ]UYSP^+,lF:gE!}(1Gz[w|a=MZQh/q@-6_FQ^ؒ2>A/(/ $RV%  LХ)9&]wW{7V~m8rpt&C=1I!.^`㠂BƖZL{)CSa2)0Lzci/i#] %>}e<z07]ufHF93JܠtڻU8p .|e.v֧3<.K$o;bhjQk[7/ (8c`è .lݗҒh=Hd,>ҫP]U T5[ӝ4WD 75.)%IyQڥG/rΝ;Hwcƾx` VsxB0O={"Cnx9A.|A@Qk-h4UMZ H`؄B&riH !S !s ߭m:J7'V_7<Ư9cp`}CW~ #>d '!U_%;7=9QO76zYwE̘(SiB_Td-JƏsk9_wZjٵm\x| ;:!x=3x̫naQ ADMyJ@h.=DVj%0 cv@́cM]׎/ZeIFL`|6>At/y B.!^S^=;ddD]vR{PŌ=T!!L7p\^%AXNr0Ynp(H9)t( uT 1[QWuNǖ{k >s$9+?>0g! ҆π~ą86`\G@9|/eǝ&?~'*-Z,'~7_gݣy~>3_Gn caԆ <% SP.#ٳg+ B9"25Zf ` 7R]2e{^:[X0<lA[!"75.R !+fMnm-!00<3fN hEOrnb!A|?-XrbW^":5!ߝwd7A??t9Է1QχvąQ~,hlɪ=[7B-: q'׿L \(]ݫm@A:GYݗ.y@~#P[TցKefIZjhȈ4(rIW t떽DC; $H:9!)=,w̚4~#aO@ -RRӸ40M((!΄I~wlNK(@G8$922T{*1;Xvқw}Q5]}KM ߤ~%1H,$|'ʹ3b1 5 ٲoGnKp5}zz=3;"?ʏCXZ/ԕVwxVcޟc؇-WIdRg@U4550ks LF0HR0xAƙY7e{9~Rc 3TM(ӡQe>r U.KKEP p8H3eX k!ݍY &`PSh@rN}`P!x 0_`,wmڛHU(qoBK M+ NSWʌ *x+"σy~Hj6dUe18c0us{y!$挢*^e`> /ț/{chk~Xx8/Θ^i̓i|X8S C@EE3Ru ގYG˥.Zd1 53L嫠&(~t hƪ|F ̀F!6oPPU`ʁ#Jfɩ@BcqL=`:0QI|qٵ%P`pXN9 RAf%?|z1 B5طbt.]-{", ׾AV@k:0=Ϳ; 0p"mkD:yeѯ?4w W#3 LK~95x)On<؃M^X!P _k'T@.tOO"voLLH4Æ a*?!R/cxX?*tw€igK7 Yv<'?Wߏ_) 13MV8}z':;;UHlۺ:;d@@pR03hP QO@<+|R4ӥ:x7+hJL4b1) @4阿 ҵTz d}QU̦a+???Or.t"հY (h ]'17\u2'_7w-_)> q3O<*wⷽ+^z?ļ$79㣓|gKhU3׊eؽe*FLcSUKNPDžO$sM iE:ćquy/Zy,Ł~w9V|FS g=~2:cAw5i1՞qPVɿds M0DVYk |x ygi']Մ1)ag_*)EK}Hd/VtL͇I ~kt*̦^f.? ˠM{XiP ²QC8o1QX{yҴz?d|d=ˁ-1{;`jzebH0ۖ`qh9a#C^g,xô2ٵs^Nx0շE sh> *׀_^.T^@Ӵ2XmShL/+W]L0<9[K?t#k&~ph}qӐoc~۵ Mк߼{hhC ྀj\YdQ>B.GOH zhB%e˺^2qEzy~Z0L1ґ1o635Mr)Cw[0̒sHzgJgׯ 84@tCIAS .^|\?]R+\2f G70)bV"8@gS>)?䓑ر&+ c PpO]I@Rsɏ 3PZ4ؙ-3I^D+>-Exy |2H`8Wi@Gј\7p]'{7e˭N:Y0~O}(W/9f*$m@.v:pia/'@pMh? 񕉅,+4tϟ K$MA1p /K.yUYV04vt@m>䍍9,:7p_7N1V(4զa&4:BAPE"U>(CWG)dpjlNJ̩_:w{7osϯ!_"N d6{uR YF1BBf8KFeLy;7|˕89g =G;&^Q0/{5p~}&$bt ޚS+ . z->Z69,Q(R<@x^;W/_M* m۶Ml"{kTif\<+:Uk A6xj4?<=Y$3Y݀0! q' |fTDZL{)@\t\'MSzS#wl;^wg8T ~O|ȸ7|~2,4>Ksz-KS r/m?Xy*O?|_|Z?=Z^9Xh~&Ƭeg!pRDXa~A+ڭ$vmǣ:J/g}`ڭ۶bه;ܷ[hm9ӣýEҌK`\*g$S6Ϯ=>)hlG)Ez۠g>kq=y9Si +K>uJʼmоw\_bs=Ժ1$@L_z>xC⍁qWqHK0AWXμrNw X%[z3)ބ Z#qㅣ-H2<օ&YUUU éK5`Vn,c= FVssb/ڎǽ2D-].K,W{V~2A o"vl۷4^,0{OAͱ.(qC 8b-ȴoa<.cUE'3aJFkX$OT^}{V 3boSOfE]&ü˴6"RGy{~mxMK$18i1~Б? g1O,KKi[! ]_7<*{u NiaDx2@f~ֻa%bO$;*raZp@@BZCM*@M6<"1^pFE%XдDNB_8pb6AXlrTK@=Ap-?Xx KV95TXt9?0"?g_|A?ڏAY'}ez%L JBzx_i#|fěi]zn:7-!4q݉'ɣ<oy_Po>!<|ƾAmd b~xв`_ij; H_Z>L@fP~'?)K{T /Y8 #N酙{.3r_,67GhBO Ƙ*,m]dﮭ8hPD`y[/Zy\^Ҍ=C iIkw./V2K\޲_`h cO9L@&[әc V* zAМx !QJG#7o.c2> bwgd^ Oߋg ipA or?0KTsC@]wF]T:~'c27Z:o;~_ȀIVphh1Nπþw;X,3_vlYUƙu` eSI rapn_`Ih:pÏGnVv NDo*KIzX2|9CLTTa‚e(R͈43uy[ |Ln ֆnGm?>pύߕS^LEc3~CFB}tlōr]e ~GΘu~;1'2& 7mP <fCd<|\/͈!(q/J-:ti'f#Ĺ|mBτe\."ԀS@9V|+6SJRfG}P?Na9:8U `p2zZ+gKB2X1@ߺ]KsκS᥀1}0,\$3}?y')Lgdt>}aF-\cZiIo~u4 .nnM,XTl|ɧ(!?5rꩧȹ;2|}(Vu`sT&拮M~c#X!Z` I`^ >@_$PL'ᗓ&K,+DFea֟}[~ke|ٯTJ m~2'c+Ln伷D?|̦'.e?~gl+i1&0i} r<58l@a EV`6668p\H0ӱϛ'.`f9'`زylx~=``t7A!"G'ڸ/N@017O0X6X{.?#{?/A~Jt^ui8gC&rC---:0 8.W]u*Y\6wY䄠a!3%Yz-4c . `Q`>h }Jc{`߲_V.'EȦ$7B0!/#M!>dPGb7djqdtl024̪#^uz+Wˢ3┆D :D"!=0]F.ĸ?|\OĢf ځD~]2`M_o?"<À^/h*l6h R5VW(>˷-]~=dʥ 3<d 0ㆱf. ӂD`.Sd%>É$SPo.p*F ,LO1gZ8\ Hg=H<\`CdhBWrx>5zk>8B!^y8W=OЏx#N]6?ˡIGc]C6pNv) .F릾33墋. 07f!<e tc687(9eh._`jc.kT%ղ%gh4l7őtz4?\~yuR?GiZDh~Ǽ Xӹ̯iHOKG0K3 G],>ʷu3KAtQ TይGKHa68ߐYƓ>6H52p'2~ ؾM/h~ɸ>zpOxEro$1 לz9/TK4r¢M$f9sO3n3‹wS e7QVo- 8:ТC}P/+/؉H61!I%q+On.v J et>J[.9D#}\*7A^-81HddT-@`.,l%¾ 4E8 /P{ KW-~^<oaG^ӹ70i퍞.Ji7agJj=XZfpewޭLJ{o'觰(\t~f4=wPBL`)pB?ZUDgCD5ѻ;Ĺ' 4E R *: qŽ3MRtnl8Zw=E#ȍ_W=oK^vF]ًFg|Q&1 c0A&0x xφK:C0e"cjE Ox3u7)Kr?dwgzôX},rg,ܖN@Jˋ_wn6`| QXp'e>ڳHOy3\5n0::0wWFl\Fp9} % Xw.Q+j{ 2kqҺIlEZ./2sN̚S-u X_#4t<9z|9ji#U$3 osOKJ?iUtpR0D&42;:dtŇ #"~ޏ~Ea%`8C}V;(ֹʼ^}٦ gă0xMDO< $ ĕyf!b~s~F!]4@MŘ,)cjM#tpv>%sVKˮ 8vwkt~Z/UJ(:fTˌjc{ɂF hcX(k],3a7_f 4z #M'2/8DH|iH}:oKK/Aiox?Xo#gADRᙏdԤwtg42?HaLE72A1[nQ(µQײuoeF5`>ico4p$ȁO@{iX66MzE*!ꃽ=^e?&kF 0ZZY7NaGԔQ2ewu5  ~:,ħ`xfWh<0ыUV}P.Q;R TQ\d\??:Zt*ǥW(9 p JgH!G)%2z @q>:҉&0]znիe愼RTE9FI-䂆iZP/+.Y,0#ǗT ř#}T D2(dtqHyXN]~GfhKc}5KH2>"LbWёzfz*H;x2{阱zFiKZƸd"0D\@YvGL#4'`q8 ;<9KK yh8['^e^揸e|gx/%X^U8{[g,< iNg:OW]z)  m0|!4Sq‚X.*UWzE!D 1|aPNj+C:9n:Ϋ C/$X/,isbV-)jva|!-#T'*2<xǠ\\/;e`Kcى ę?eqQCh_j{$,_0_+ iqXRXFt 8j̕2|J3NME=Rς:HN#CaaUahf+hǏq!y Vfx1d$n'L3̤uAEF[~T̮cIP~Zx>zeFyY(2@⫐Ȕwxajo[|HEi0s/UG$xӓIf+n ̃4l1!gD ؆>1vY c\KqM.GKS~][es ;A1؃E/pjqUvDJ -O󥰠iT!EY!(ë 93eP^=.I'4KaF1O 9skuBΗ&,I*+Ҧj5Ƶ&7eG3͠ui qrGT xl=C豢+G|L5 k[xD2T?<'%Ztdʳ/#%dhI"Dvb)%ձ)8d Q@Cq=8QP*(8?ԍy3G0z(=7 :R,0wRYǹD:OE-XXy% e҆yAzloo8%qaG(c`e|!g;4cDF}9w`h~%)u]°lw8`},YJ@ܠ3p{~~.&y4@W.J2j*JyUfWK  (]˱K K ?]~eL;r=a7!:4qlhvIu<KfRsLIPdOljjLbV"R%ȑRR,[hbQ b7 t(ѮX ?\HiƊUbjKzu) ( ҼF/::|̬X5ǶFhhXl}diK:'{vɴHќ\\{b hQtOH׉T$'(_RYɗ7$5G`!R:GkO=c b_A>I='XPt7щ9 (0KY(К wl uyZ)5V΂LcԞbǚEӕXR XP:ЬAL ?`2s1U41KalSSedW1~8KuݷQB eAPI:2!V!OG(:曉{#П5;U2+2u\Е-+'))+eP3w)m6fϣ5s OaZ>LS9 Axa5=xCȕs940$0-?ly{uqNRX W..Ca9SɊ:92BhcK~ hdУKu(>K6`OH6%ո UP`7Fp:HKٲ-NW>`cmϲf͓Xi= :lr޸@ȓ.rN/X "jjjJX$@A=-}DI{$ 8AOg$U"CU`_"^)hPɪY Av@PlBLI,U$qL/&o% t s\v&m(>6mOJFQnZ#C{nHi'qɋ0DjZf&(IDAT ,Y֌̄׭[7΁%m~-=*fP9 "ɽ oF>~x\ЬU8# 7( cV#:G`E?82}?A4Ǒ`+~pGAןn>9.rHaJ٬mTص_x^4ϊc?+~t 4kZok /n/c%bJ&NrQyxyXݥF碌ӻgP!gt(Wa1ҹ_vr3X;ԷCM_@z<66#ޤu ={ k.9`_ q"-M n\fą/*^&ʸ U@${F|eqV-Zfd!˳ ^OCM)4:*С†Cщ-j}8H"aרw~Qn8JJN*Vd^Ik&/ZbO#fь,\R8D61:<&l{/j,\n=V~|l ֜*˃H_P:(֧CiߤVCe~ xPPa Z6.%#kJm\)]Qthi. ͟y6.)3# Rs!<'-0H|Gcʁ'$4,̺ V d.E5.Q Ax8(%(gILhs8%(dz?$වetOjy=#9Vc!~"Bv <#xsZƅG5FL|ϐj0d0Ϸ&ddng"uI.oI@ȹ8'?zi>0=/Y{cn? H$Dy6 f w`aVq)c<'ȷZMbzb;$` ]cjG[ T/&k*h$11 :YR-ӋF/jȷԶynZEϯY ̄໡Ac'Ћ]tX+::&fm`3sL1vl4IqqW&(͑ c>ƀt}?ka3\&?uw:@}9 ghMWtdp,#.l4s鲅&.qq .ZF\^c&Xhcq{4yo޼yB^(_ztzQi' P[⋣tp-pZ?k~!ƍ{k37gZx.x <Li. .S>\Py78-aRBt8՟D /D:yȷ@O pgݻXt+1W=[Md ={- η@(!7*9WL9#Iyȷ@L eʳV˱i0xUk ցCG]vY[ i}^>8DF̑d:5%+ `(Q | Z 's )*rݓ_:00b3C/aK%o[ ػ?J /~OOjn=2i y5r}M_-0%=ýǯ: 2"Q2bFd!yCnkK|pX| \Z`9osJK;=c~v92>=Pk)8{az|oUmWIEB&(y| `qO={np2M/+@c^Y!8E 6yK[tHOT@|i6PQ9 /帿pѬsJ /#WJڭeR! '?oz 80%p1½rˏWHa*f(qLo\[E' 7k_XB{x hd=]q' O_ƓbqH%x'OoɶN  !t #i{C :#6btu_,qL8هOo\[_sO!+s8̛eP]r|y j1(= q0"d`L"ϷK^T=-`sϑ[*ߝ ~OЎŗ'{E'oV).,VACx)=|]-/f0LsOiĊ@V8!Od Np<_FfO0UI$ϷlNOLx";r8v6:ƲoMo_m<./PjH,O?[.^|L+ VX<[ ݗS <8; #!sKyȷR p hZ*5k HͻȷZO:::{/Y_ZѰ3\%`ԯSyh7{"|-o)om ~GA!oO Q ;-=_ @.!8-v7믿n| 7ʯϴ構4zQ@6:vi_ pan'*\8q`BZZ`:ˇyZ!q&Pr GCM/JcbxY>̗nR ]f@^\bb*!oqFa`Gx~Z˃( _iKl)kOf =J-{ C]a~ ?yȷ@2x}ٍ|~7ayX2>SfD `q33g~/?Co(KgzIgol܌6ƈ~2!@7zY< ba| !@I-l37EZtM}? Q4x.h-<[b5 "gro4 0`tbQ'h~o| $ϴO0Oqg㉣3]3q!ȭ|5́~ Cf@f LmdQFw-oȾDI'ʠc+>2yd-O0VObԩgT| [ 9#-o| [ ȷ@-o| [ xYA!DиpIENDB`ic09'wPNG  IHDRx AiCCPICC ProfileH wTSϽ7" %z ;HQIP&vDF)VdTG"cE b PQDE݌k 5ޚYg}׺PtX4X\XffGD=HƳ.d,P&s"7C$ E6<~&S2)212 "įl+ɘ&Y4Pޚ%ᣌ\%g|eTI(L0_&l2E9r9hxgIbטifSb1+MxL 0oE%YmhYh~S=zU&ϞAYl/$ZUm@O ޜl^ ' lsk.+7oʿ9V;?#I3eE妧KD d9i,UQ h A1vjpԁzN6p\W p G@ K0ށiABZyCAP8C@&*CP=#t] 4}a ٰ;GDxJ>,_“@FXDBX$!k"EHqaYbVabJ0՘cVL6f3bձX'?v 6-V``[a;p~\2n5׌ &x*sb|! ߏƿ' Zk! $l$T4QOt"y\b)AI&NI$R$)TIj"]&=&!:dGrY@^O$ _%?P(&OJEBN9J@y@yCR nXZOD}J}/G3ɭk{%Oחw_.'_!JQ@SVF=IEbbbb5Q%O@%!BӥyҸM:e0G7ӓ e%e[(R0`3R46i^)*n*|"fLUo՝mO0j&jajj.ϧwϝ_4갺zj=U45nɚ4ǴhZ ZZ^0Tf%9->ݫ=cXgN].[7A\SwBOK/X/_Q>QG[ `Aaac#*Z;8cq>[&IIMST`ϴ kh&45ǢYYF֠9<|y+ =X_,,S-,Y)YXmĚk]c}džjcΦ浭-v};]N"&1=xtv(}'{'IߝY) Σ -rqr.d._xpUەZM׍vm=+KGǔ ^WWbj>:>>>v}/avO8 FV> 2 u/_$\BCv< 5 ]s.,4&yUx~xw-bEDCĻHGKwFGEGME{EEKX,YFZ ={$vrK .3\rϮ_Yq*©L_wד+]eD]cIIIOAu_䩔)3ѩiB%a+]3='/40CiU@ёL(sYfLH$%Y jgGeQn~5f5wugv5k֮\۹Nw]m mHFˍenQQ`hBBQ-[lllfjۗ"^bO%ܒY}WwvwXbY^Ю]WVa[q`id2JjGէ{׿m>PkAma꺿g_DHGGu;776ƱqoC{P38!9 ҝˁ^r۽Ug9];}}_~imp㭎}]/}.{^=}^?z8hc' O*?f`ϳgC/Oϩ+FFGGόzˌㅿ)ѫ~wgbk?Jި9mdwi獵ޫ?cǑOO?w| x&mf2:Y~ pHYs  @IDATx $Gu&}L܃4FK`a%ˀX-X/x `l67^č! c0!.s]}^2*j'c&;^+"^dƋ̊p (,PX@a (,PX@a (,PX@a (,PX@a (,PX@a (,PX@a (,PX@a (,PX@a (,PX@a (,PXY~Ym [n&.*XX@X`A(V~ɷMA),PX@3Y0dVvȸ9 Ta6NA֣&~6(,PX X`=z*䤎"\@a'šlDplֱzx( ZX@a&@=κ^^&2sفSj1-N7U-,PX&@㴭z5\o,۰jW-(,PX@5'M$yxW oxx9ZCc6\,L".,PX@auf bӌɇ8 g2 Lltl0,|V (,ps1i6+m̟Vf"g؆pa ? d9a#wyq ԗEk fp\Ӑ8CcZMf E\X@akk,K\#gb|.EI*-ـfwXoibJ_/|Zkk/JՇZ^n<|5E[Mo-. |+ |mg6cZ|F_-2kjYkG/ƝCZ]T0yrOu3mcCzg---bu3OxV :Br%q-z[-^+=yyoy֋orƝlZ/]ε4zjY j:֓WXM7zϹ+8p^C8N!6t!3 WܖN&w{Cdx:zt/jzk><ې^kVzl~C_ eœ9wYGJgzj_XdךVH5߶,jES,:zt WN7:utp5mhG[!UX@a@Rɹewxr-Ύ}}* ǵ$W^`eyxPp3 h}(`^E"G2<<"# `F$]v "(,PX@S[:¨sS+;>||W!Xf tg?{8N.Nw+Ba6:e;j_v>>1 b WÑp1+p;(ʺ!:38c'O-td(,PX&zLpuYr?З 0i>4+>G6ahD4²tn}\r E(,PX@af`sYvgΕmٲv@>[<`.[Xp5TLjc >Hc;xnݽ%f (,[=%^ۥ.z1} 8 hzo,4DC <'_xZ;;;uL[ c@a` ||?|?`AC`: 8h?+hR^7+3F _p[ E(,PX@amrNmRj`<Ǟohc6F18 B1( lZ P|Awǁ1028 kiq3?l e)@a6&ғ:Cr!qVi SP6bco_x/T K~2wžFj*g!mڸi:x6 JJ1/4n{{{a:V7> r (,PX`3[{e0 uN Ig OFtټ^il0KF P5`3YQą (,,pD%{'<db MH}P1-=pl@i~꓍fi`PX@aM-0 @_aGWh{ZxbuKbhT[ fczܹs?R;R >(\X1Y wc|CO/ UDGx>c,,l*B3~ex.6jXDck@LSą 8hǼjmcwޭ 'GK^?ϿXiuY\@tq___ `sܟE) judTMM}m~~ P&UX0x qpo#/aǍӳŶ”. 4⾵X,`ۖ]iWjWr ?9֗Fvm%Zy`dk f4z( 4dQX|ez-BI|`ۤnu=ncN9ݶ;]Oj]r}ˮcuI7z;huruwv[97;<L9#vo?Z̝`wYdž6~&GLBӌmlmE,OCaP6]FZ(n{(ԚY51+Z#G{h)- ۖ8jĽm[I͋^t /e)zʭGuWGiwnkuSxvs\/ctO( -^I#ZOw[rN-v\F7$jq V$P|VR~§Yx^,0h4p m` Ɇ 8 Zjxsac-4}Ap-n-le͸yM<'EqeqYے Q/묺WGh+ƌ͵'-8j:$I ~{c~}w7#]{+ľ' #`k_Z]â9'|Ș#0>5|G,ظLg5ppLkv ʲlrqZ៿7mS;t{Qcɻͺnqme!Yo^4SjYu,WԲ'"̬qɻj\pg͸SGLş-p{ݛEz{G7{]۶ \|ѵ6}n,[@@No̐ ؇(s4pY0 l,~du`P[MϷ室' +|F75]h@l<|Hgˇ)o6u:ѣrur9IqQ/oe eYlZfmN̮1l(3%bcF/r:v2<S{ 74>ӥoUcF|4&K?'MGe2'=5=f嚔Ę8珞a&&NN]t.w%K߽LGlI}0,qʲ`.wow~)A+W~w}p~wi'U-=Rw_{E7gɃ%~|UU8idoO%- 90vy9W791iYtJ4z߃6wZר}qB^,KQ-MSNf2nw;fՂk-i/^',i,M6e+[7wVEyI/'K߲%+3fֳ갗u=+Kt |^pps31)'"m~炙c1̤;1q2{{z) #'lv}]n,w15sh:ni\PP g}{C3_]3}} `Wց]΋f_09>} Tg <|`hو I壙 S Ԝ!~35M5f]G<:'Kx_=#qYnYXfp-ewFNe툓<]'M`Ӂ-cO2./G^.'Oʲ ._i['˻IY>,&._w|-NϤ{c{p`@Qۺ܈|,֋%nAo4Gd{T̺,jc5ECcV0iAZaO£įZaC,_<\{>!. x_=ܡ+yya֍}J7oWD@oļ,[Lfh6\Ecɞxϣ> M=.X,Oqm .ne6Yi,LZf-2nO'wب,l*qn*m*eVfm$^iaQN1YÉd dfZQnJ8E\`qqcu=,iOdɻu$_wIa[>GdC2{SJeVuD`̰!oIƲ7ftڧ+/ Y5mykVy HLFz|E W.p;Q=5DG\}['ű; /sL; j(RfL hl$O RL]|<Ńngܭwd-N!gEIҡ7qI`8d\He[&:KBRZfSԍeQ7s⤧'ϰΤ1ve '%_vw{hu2S8-˗t8[ř|=*?i>,$zƱxc1P']=V8.3 1%V?!M[" >WٜX"X ƥ뮿=b~K{w30|O\7K[ ` [C.!f>4ƴ,CWMK3}:s;{ܶٛt:kYPX P:i g G='- JJe4IIˌzZ'8鮕LvD~%tt;iImqGz7soOΠwn,{ɵgǰ\+^ӱOs553<`Vl'E9\@>"1rkT<6m‰fu<ҨOiFH8Cce6 X ~ww9LĽO\M7pCO nh|EY5MnXG8pCn!zYיtV!2c;i|[4fԃI#Ik |JՄ{ t@ayESNbGJ詠UC$IqY馊e@øf3&u~-9;>N;ɒ{pk, يz|R66ei)ꞗ+qVGNgCvwӲ-|D6 kv17fp ñE7~/woNv*]BD}A瑁.LCnC)ղ,t,+c` '|A!NīP9Ji1WSe#ҴI] EO W("? \e#{<1R} v ۷K"HfLM)=fb9x```  g˫5KܻE:fW3C?/}Q5]shJV sSJ@Ė1Ltfp.:|1_Gy=]H<VgЗkS: I>tǺ|*+* GfO{֋_^smHxP wDH{]LoP!ft+?: U;,Qy|ZdR: A@OZ@Y:,{dK>MK]SifW,`| eC `.oA/YUv 'J떰~F x2 iqflŲpް{5mN1il/YV_ Ǻ~u-lОt6}ni:^mX9oK31YyB4o,t<=9?틐ǼSt&L`eu'W?_*aiNēUiiPRt} ]3O=ar;6 ]b*C|OJ`=8A,$;=8mxi3r_o?=z>/w scV8}O4F'VPGY>a `i!لJRHƈWai<'Ґ2UE8GHZ‚~׶~!ϋi *2< wh,~rϽnʓq 1;=R4jKxOVjXtbb^q5kXְqUc!64SX >k]Ϣlr5[{ܵo|O[-ۂ^1]].`v>xy]io:ѩ 7`p^i)J( Y5/*$Vt1216:%fbQe+!TZxB^?0x,_ //zE6yiS;89}޳܏oFJ}tdt |GSڀ4q-)fT3m 4ӔA@opфm׻2Ehw_Ի3iYȶ'>wC CT쨔rGYh\-m<2:qWL+#Ͳ)l Qy!\ˌ͌w3(HŪ/ҙbX%Ajl2OTZSiĦY7Q J(`Y@'piO3_(E:2> f L.sJ`&^Lx}[ 1/i;u`T6@L#V鉣;}ƷypC{ c{:KMv)X_S-:r!ͧN;ww(4g*U^o::( pTPN5,C$6<]𖇼>ODeJ,<wʙ2 mx|+Ci0xai=Fò^-^=x= n`dT CI _- <쫔eTo'U۶mGL7,1>+SV9P-I6| Mf  ie̸q/asܡ:wW[ IuL_׸\qYMLx=fHEx'NS/b:b/xWb>S/b~XqT D_`;8|PgQ/e:g8~6R## <ɏ|^q0xNIk&/#۪"6[&qX9rGd_0Ж8? DM :`64 1>NF)ٳ',m=h*wztVA Kma)ukjc>1чjoaoݤG^<88HDyt%/,~+𥄐iGN9Ptg>*AzYy* ׫ NcM o/Ĕim{~("ԓ$V.H.+yjz˙0ne6(+PzaAzIߑD5Vo*'Ki#r @*ZpnL'lriXdo*eTe7iM-y>e^Ye숊-+-C}w LTmݺMa4q"4 Ϩ#FdY}<1eiu,ʆ?Qm?0Փ{Wg:xz4.8'-t Ğ2WmME+rzyfrPt^k,&X>JByaç#%PC7 q>N:Y{OK"խ4CEQOI>V/6aNAm pdr3[^uo4oX9aO e7`-&!馌ue|6c6?ɜob ֯T!ϯF>ix"V G -}V:|l9T#% A1<>!,LcV$ /pDZ7+ +R^Q.dԓK>`SĠ1oW^hP2J=З|$?{OZ6 = y=5lҟ[͖䧀 09Zsp+fycMϷEo hkD [xp|XC?쟽 bph&thwxePNl;?X0b@ E鐡iZ:iOAP4d<7~ f6 U^* }>R+!BwFEuīɫC3h, zXWU Si/|YZ~KL12&0 ~C|<ꐘn0Y{YX, Yg`x7@TiDևG~7@Pd//W$<yoӍ6l<K/I>w=;+pzNoƿi(!'G^!O]" ! '<&my`YhjEҲp,d`d$iJy9SJsUeҖ2>#`W6R?pnpAW[m0Nˇ<4/Nnҕ2W "I}ȃYfA|>F@@rr T +7?VFLpp5z`lD֞lPZGG]Ou,MU8W#P4tz H )?>㳸\A<} +:OIyLc}Zn/hPE4 Wp ރ!,@7ˣyMga9ԠzPAWuL1iHCȖ`!L [^$MyRYS8xZ<RBz|>@)o7#"P/󂰝 sɶ 0%0ؐ M4qIkʸ44,C t”)Q`,W1r~oj[3fedK:60aĚ8#>e<rHZȦNPZO`ơPOʛ4iW*$hCWi%vpHG#1Alkƣ#8v4(E|IR8 VVe8OTi 3ՙ,k(qt^/ll#_*-yt 9c;p@"+^=JC@Ac>^'h?{VrdX3PQņǗϲRe7775??K#F>&ֹC,NSi2V})?޽/ Z*s%RlQ*sn~ݵ:W۷nò*lXofqpN M;]Z[Cɍ ;X1uScp@H@h爴 $Ё-C) y!NF#,D "+YR?}  !_Xґd<^A5:B6)BV)>xPDYAT^<fml|3f4 7 ϘYpIv\1D˴i1o`z jvnܶ2iQ^0}-ˆ|Քny|K:x=]J 4Sx H)N)i=q!/gӈT^%,H3Ux *N-M8ˬ.;ϗ%-z" ,I/) ~YZÊ<۰Ȼŵʲ2fX^Κ",|kwfds.mPo8vCci{cR2zA!/EHYvC^_pUl wZ @Tre;`5]]8+Tp# j5fpb#(?LyM5_yDjZ;eyVt}? .Z?5trɃk,c`zã:HC,Qm=M&?ݻѼ~#Õ-9sVl&JO;j6€k1ͦ[kC}pg4ct`C?\\w m=EzD,d(,`ƤiZ( 8%FɶnZ|Y8l^bsNuF!J%De5sms4NN}]cH8Lml4J~w}k2y7 :6cZ-<f@Zc=2ɣʑpcުz#L ܉ﰤ={Wqxd?}'//ܶmCvd7}.׈liv{Rx~Ÿ4($r{0| w4Fˋ K1JNͧ{߾Pd5+0 靈mX^zɟ733{BĄv,+ω#G NOVYY_*̳u%K%pV)??*±Y_W N|a)_=:q.3{rӢ;VK' :f goO~njz}{#ǹ{n3#A[[}.Yl? 7sV#(7f7dLMV,=Sc!iq3gܑ#Gؘ U Y@IDAT p^xNj(1#9[;Gi[F IS$/,@&koPWp&:0"*p>鈅1k*PF}.*˻zp-:,ܔj7SMon7pao~ӽpԧBiv^Wv~O`MIw@=_n٤itq}pG3*h@'Lvv Xؤ틕[NS5` >C Ǎaáek8tw±thu` p3DU¢t=}P878.總vtݶӍlYO (1:nx| KP`ʩIup`,@ "F-۴\(d[}n}n 3S9>஽*g^W=iGX@W$/@!KgUʷmѐ0Z5FVe/` :l mMe@5!w!K1S&ac '3p:qξḭ#'0HCҲ䬞t{%x' |rU'A~%zT7.QPVxGY)W|؈o]{G$e zoW|= gNfc|>ǎjun'^~Ot?b}*_zh:Sۤ鼕Oh[9h%ldh< &gwyྻOoٽ7$z{ޣN% yk _ Odzށ7M hZ^ |b߆AŇjixA`e.j@s= zk]J F)T -n޽X.Fi -12|,&q 'HѠyr1?myi͂/мӮ~`(G˦.P#HV;:?$nRg+N2SMgrj};s-`t8 Oݥ\~!1!i";!ӛ}V xvT>?HʂPVeyladec>sX{{3~򓟤2袋>w&?yTY^sK59zg|͛z;fD@ldO&@ `f C-D=b΋Ny$Zy\ -G @-BkxS||f/ч4ubiA/ ϝѥ[e o}y]y>J7wݿ&XQy5׺+"] pڌxAH|t[,S eY؁-Uo& dy܍_;i`0++pz׻W5+؍fs(=`wXC8WM yfL <q,vܙ;O [p@/VgA ҡFJ7= bie^ 8#/bPp1lbP<%  ҡ|.J&W\C>םOn}rۏdӆ9Οe֡>.Jjd?$AhmRKTַ:wnuGIh=\^pԭt@'wqG>7Cf;D1][woe07ϝ#G|j:KciC?Ȁ BZ!eX'|6/n8sꀀC€ۀ;=~C+l8{쿾}B EM'p6 v92:m4I Oef)K[ب@N/c/GGsq5BGbC<#83 4E葬$+GO}Ni~i#kAXc3:䁧IDCW>&Xa6oI78=幯qtj\"=IˏOٛ6v>؁mhGZ`IN ^m( ci՗zɫϊ>WQNz|\VR-pI|,Ji <ApL#Sqq^ז:;{/k7\)" ܱ{ۻ"ꨶ [yT08>mc Lz/6HYV'>%?Vp>uTz#r\:CGd8,<|ԗkD9&;1SbqJ3 6Flh7Eww=S]TG<1ƒ M$ZEy4h%AA /oM]N0E@G@8̗8Z A׾)ꙞmёN߲〟D7' )`|i|ya]OMUPE٣Qp4V[cKl<>`>T.hSP-dl6mP $PWZAZ`7>@yXSgp`ϑHm̳H+#\&cJnyaPoIv/ߕvg*Q8#<  WV8I%-n@AnrܹXyPרYnώBDۺ1 a VFz '$~ϧt^f>'Mz szXΚ_ aㄽeE&R 4F?T +nٱ$RlMWtܽ/FѪ'lF:w)TJ #{׺nAmİwT-VJP -@("V``{A\J8q~dtE E Gp8j߽M7T߼Bm7 l4cڦB: F45v>ZjWtgȒpvg.ũۅ)q"o`sj|m :x# YF ;"(/;&ተp}p9ʂb^d!-7-368#&GW@'#dy74 {OɮtR9C`rbaS.a@=16sy~QΣ_Ǎ,iZdi3j\tcM|2rTo+{cQ~V붾-RwXBb޸ir]`8Yy%+XtuɉsMlӓC:||صm;Or'G?oC0;ٵϝ~܏nzyܷlۃR71Ӄϔ %U 9μ>3u(5nyL,x>,<|j?˼>7ÖCaFb8Hꅪw~/`7NJ=+c-nF~ 2KYg5o|{"0>4m,;SR{.6e/zBW߰:h8aD g 1Xٶuv&m(;,&"N;TkMy|s]̧ا{t?=769DyxoT}dݳrW6A9ז-OL烮iTvu^Lyey4ʐQRg>OVAKe/|qbw t ntrAݧ{~Tq7?eNݢU<3&qӄF YpK۷?. ϪqRԑ?s(`K;8e]Ҩ9:qyZxnv6<4ov^GfȨ#8zZ]L_ye<L>A5e)m䋯rUIwb4; 1_ԗ]z?[[r/˞JGXtDlIh =SNcIse阎BPo*?QuK{CIuzyd"L 4F?~~zz{ݛbdph&Ĵq,wˁ@214XYݱcFyUxŒQ0 Lo:* l/Ee,/`=.IrvF܅xCo.1iU^#:^(tKyK*c(ꤜx!K'4(ԗ[~+\E^,/2`鴇< +oRAm #OX^l;Zۣj7~v1)v4q6 vțB<`y8?7u[,cA| 3%#ȳ/ܵu*`9OzjUuĘIY ĴqdM4\JG,u^>_ .Q}z Z= l?3^ #T~%F]w`ШJ/;Vمm||z^,Jȯ $"9E,l toooj=5_j[KNKUΫF\P!v<<:˓ӫ$: \FOHp4CGf? oh% ݁+2p\}~j $$h]>K=i!4F/}}(_SGIeT/Ws>N9 p:KJkcަq' fEй/ZzRF1jWt#ï:-NzWj.ac+cnvjLPY-Ye9@>D 礓_pmivA"S aoVAvt$]64v[K%=~S>W6MZ(iƸ=wM+Y ቁξjwoXg̖^w%v_᷿]gѝ0R1uIcYizX'&}}"'Rږͷ{?BrxˈzfiY9ծpΣ{k& C֦cMCئ)7/)ٲM98nwfzZ,cx0(OAHC Jz :V%o8hfɏ=|/;jEĴ]CC0 /V6 *"o9_W@:Y1sݮϭ ݻEwJ/O1pMqc2dY83.aڍrA-y` dLc|i7-fs&ݜ̦r*ݼ8ezր̞xCY}xDqY;8qq]U ?t%LxC w4dD(}N)AO`VVxapʕ(H,ʩr5`=nh1*W^g׾YԒygZoڴ! ɩ}S#WKS+yӃ پ O1úN0Lb kJT^nws yV u C PlE'}{G!@خ Cpa0.8ؑZo,[: :jyY}?׹׼ꚪx_ι2ZY:Qs7_ 72tW=bz:wO.S};8o@+Jh:J |2 IY-tR>8L _EBf7rW u(sӟ}C2d('mC!m PuaB6Z *w|~<c`2ކa >˲^*Rqe4.l45lܖqXId!GKYܩ(`+-♙YhnQ :> ^CB/P1U2hYw'O3y[xI_h4-PE,?UUF-2iA/e1/xcbrDd $Iϊ#Al)OVmnxտ7\]}SnonWzA۷v{[RTryaқH AD #`Ā]װu,bӺ5T,&\Paii=ݷw |nߪ:{NU]]0zSxf{ C6[or)'Ɏ_MG-eشƟ_\P􊕫ZЙC @:J+ ۴9\͌|jZFL3K PqAiT芹(~j%)SF <$AHl=`ͮؕL!;D+^R "1]ST~vu8/c|Bzfvi@2`~ (vݕ|w0V&TstԀ[CШc3%df5gnRm0j6|F|, |ŸA\>uo}oXi2lY>sƧA+^(Q1E?2:^_]qZ"ƚ@k+\"O#]cxE MIF6,AiҲ,Vm 7^SFQMm-aSQWLuذf ~5Ͼ;z˫2&>ʭZ4)uKf6`Q\d:҃H8"Qˀ2oG/՞aGg2_Vgh GBhb*塵;>ioc|+RUxU>q Nfw!OZ +.d:v*s9 *\1_.,ya( .uLtE>xLAz`;^.mQĆ ɥ<1>]wSOPCx瘓lj'rOQX(q+?x/YO LA}mcl1.]K!")wqc{?kykwDHΗyK vE\ NahA%cfG %Ӛ0NcziJgLK3zOՠ*ˌwZ/Ojk>Ctq3Q O+>-ܮ烷]˟xq EXꋈ59x̃6/ʞɜ:y#G,SP/KiA{uKVa–> =W?nӕ\~_U%ˌL'gۯcS=6nY_I7bO~ΗO3m߇>$wrӞpQ2K t$SEz8ꓪxpŔ Zc5;;<-P7t8f,Z\ Gi#_񤃝nyxƪ-p3D5KɍfUv2VB\ihz~4Bɋ Rl̯hi^lu!Dy.1.œnIR3y3OsqGAzWFiJRYe^nmA 3-& w{b>A ??fX9XW,&$Mm:!2R]Kc&l'9}[ Hp,I, `=Rqؖ͘kk`Wb^2EK7ߢWUQŐ'O{W/9'9 P|W.}fBWHr';qaN f. uҧ,診Sy=^hu!ECyb/^?s{}ӡ,MeyJV!_9;&_'=,ĕwa] G?,.-9 ͏~dlO\=XUv`:^ lt2l(yIWQ3Sae'fY m߾#o?}_'X&WV cL`*xeC)+Jtw?J M3̩нaÆS raaAeq],wV*Oᡇ*hz,VwR<\uRyY)v58_.ȥ_zAh}qyeA#PoK7g2Sci '#۷"3Q7#XEr?Nm<69q>M `eh,wi^ܽ#eoز%\x71 c9a49t?P9hSxZ<zC_=ٴig36+{ -+QT+XrI/Nݨt ]XKHgJ8IZXxQnz\Qn6ф+C9)N>tQx .33޾ 8{+,lmk7H {g.Ҩ6|}FKFZ.mA4؛ (A<8`Y).ZD>x_:pG?wIUq%}2\x3_< >1,mr3"@=0YG<)Iez,CmT7E(VɀlCCCKe+ϸ6S))S\E ZيPū-ߟ{QS|s5}Gf5K\iJ]S;F/qNI0+Yfx [ EnKfwvv5slaQn Ag b@=z`n]c {{*knU#*\U[/ڃKN:pG+uC߾wc?=tM}YSw9}^xYi]o|=|cCmy3A'q3B>%q=K PM3J*k~.~2t^lcNק4<Z}|,9~g>XeoІ]3XS3c'6GZ>&6=P`_e߂Y;?(S*:,N Tuh*i5mXjrr:>|FpG"?sMNJcF`$UđIB]/~m9Ă@4bp8 =]HH=NeU!uY']W,^B@=CprŚ6;{N8+ !@G /cxToFCAE{X-̢OHrL3N['qf2_0-SaȞd6{{i 8q`oמ.7t /}->s~u~{i8q)kjNz!yv BF#FW# zͮw#,3>'ry"_gW;u#}yb>t٠@ՅOK7Ցɸ(mWGƪƮ߸w' `T:c4q#)q|KgQ/ J`>*|)jgnt u8ASm?S T N{bG0Vt}>OE38/op(òʳx!,29>ozz2@цq}&Y!WxwoxNHہ? ֆ[!؁!e 3;-,fc29y:1 O|:⫓Z'wYo)W+~'˴cp3 o6`[¾Šћ:p7$FhǏ=ͯugeޗ>sbKQδ {M=n|*'} !ЎM4ۮ0s>9PI G<vc_;|67TXv4y oCy*t}C?׫Xc=J"BalxO+Qr;\PYu7ؑ֐(ˡǓN*'R1Ĉ0CȧzMi]: 8BgNWo͞ oN5ob"'+J$gU,}@Ö|F%lNk@IDAT4glbTYYo֖CD 03|Z0ej<_A0s㥩S{4N{ɫg=2?_kxO5 :BuZg#OTf(}6gP"2}Ӊm\؅?o_T?Cs#d.b ; `H l(+L;3:b6̧.fMF3R3DzékSG+w3Z@Y UgS7򓍌pd.dqY'X+60O0;cȌ<; Q +%:SA:>..ޟp^<-Ŗ*"˧ xš/Po I9_dGƼ)g*N!/I\̱_+E?̌A& 6t4Ɵ~'̊>%ܸGDQ=z&vmpȅ>pG<#tucBԛ5X,5cS#RP*}h7ǣ-S,/ɦ'ú+m z: +92I<~pgE>_a(GeC-1:֝wLWUO1áE,J8B}/$61L8yHӨ}RX+,_Ok Xh^qĸth(M-:q(twѮE{J)o>>6´Uڇ]~I_|@/x+:-T>kڬ./xlc0Q_-5VVY:ovs\~1lzx*4\:9qUZzCt#Y #꿳W`VBXR]ȰO͑ܧ8l6Bv)uFiɊS_h =/Il3V/v{j"h:P:3x,4Èa-z !J8x`xfA~opڠZ1,ʰh}C󡾷A5ŝIF_9f?M43bjuM~FX1M;΀3#~>džoѾ5hl\XܾBuauT'#7n,y{kyunC{Lo=|f׾0IhfkBX:R](/VJI?@HrϓPE 6L?:>@ftZ]{̒S:ŠK_>7Ц^PX pv " uq;tBDi!m'Jj'd<O*8E]8lgy7]:^#5|b.9}r5,7jFRϴFԗLX'O~P7ڐl/O' qq#aSKg iv "Y+S׫t=/Օ: +yIj8LJ?RNxN1ǥgO Գe_f/؈reשNn&>F OZBޓb>SL{%_J`U S6:ӡ3lor֝SأvnJPNv~ĄN %ɒXVt}H5.&܅U^W,'}D7.-~ .ڌt|H}kL Xu<(+{}VV9{W%CZ+ o-yX`45|w &ZsiБ_| ẫ/ WVHgSOLm/w+~U;iH?߻=tKB:rfpxLu"kԥ^Lx-_\H @u`Q3r)"i1z$J+qm/jX{ɱn,(sU*Nv̛[ Y pp# <'GN ;v"#YM1+OKmtʖ"NlC屐~0Ü \:bX2}ܱa0]|M 9C¾!~s1L.kq҈s>?}䴥P~0AKX%pih<7M+ n.W 2z/ '9Q_QN9ٞL.>6\tPn,W}]xG~;ϛo? ~.G1H ޿Wޱ&κSIg#}ɧ"έ/ Kሇ?#;M_H<`XE|:ܡx G>:НHKxʎmi~ AOGPjPÔDQbfPW,P #3@OXš:["H6]]Ƨ~gWW8Bw9HR^.ށyۗ[ޱ:'a 㶊 fޡ _^o#]Ųq Vn0[X჏O8KmtO)'['+58,N-yIi};orb1H<Wr<&n" u[n ?|,Nw O>;ߨ$\jiHaZC6.pVԣ˷!RS}'FI#7a``7n&] Z0X(.VʂU!u(mn f^\β(OzeWL<֭[MsOwzm74S—2/xǰi.r6c;]f=^nGC݃,hQ,̍F wŮ7{ƆVkzH9=p;Bcͳc<|:h6F 8 .bD;p+Pawvq:`wsI&#( pwGB`>e,V(u-I?#)=*1I# ĻfiP+.t7[o5x[n 7rs馛6kȹ.}Xz֠kя?ᒋgY^s U6[J$wJM%'Wڇl;;|ΈG1?ޮƟ|geTEa~yQN{Kh[xAgE<K*}O+Mr1'RDvLoǻ:AFWdKsF~ wV }x_qF;)5,ǟ.~/'L :G~xᓠNqxߙ:~s O͹^mNjH$tJ :L^AhV|KVܨ~8}}DE\QNxXɢd !^: EO'Bpme5Za4;Vjbہ%WM,R*|#n4 'Y:e+bXtmZ]'QS#rJ1F|1\%pcGɡ>;q|??ĤiJǸ^xwrz#N \vWο ^2o˘.,-JVڇ,MfD p PQSl)!z7a=⑵ţ+ƀ Cd )[TZJV(.$a%k9CѠ2`M¶:ȶz,!ux؉M6JKtTaR鈩µwtU]fmue!EȨ1Elx~#{Ms d`?~gs2 97+eHY0cvN|֢-h1b`cb'@ GseMfay3{2uAlwca:ԡcC֟Xc]>v8|Cx{B`Z<>بQŤERA2:v9>\d%oXhc~p,t 8ɕ-E:A2t-%_:)C+#^1!_64kh*fj՚/otmd89䐁/ =xb)(P*r\f@m^S7l[,텅O3xkr9W03;㉇N ȓX#4(R^63H?C>T.O4}A,ْBEy# hkNrt(oN&Qy% ?LWry\ue'%CR0lgQAii2F|̬hm -Ӑ9 mEj|pHd:$ٓ?aG>upGqk'$fOh4?<>\}ٷÕ?f8'f :X YU0&9CLz絨u*{pwb+ 85q lSM3.Ei˄1~%x ,F m' G֬uW|9;z{h]_thCvn1܆(]Ţ*K&ok+64QwPLNw-ж75/^0tjeLd:)fc /]B//2x[̗'@^8˫D/▇fƗN*%=SY)K: ?cIζ-OІ3D1l[h,Ү|GH/k&oCN7ݎ9a>?mׇ̾|,> b]xԝ=u/qume=ƊL:7oӛ*7*?ҋuvl0o}1VU~()Xu5_nc zf:/}b9?U+*8@t>: ;-逫kb&/ƙ.8KZ*` OxUA37K=xL9b'sd0ΨNpK9KP0`Tb 3\dL<Ol0ٕBy;nJ*目k}41lʰTɜ\e+Ύ+~ ăϥ(A0FaJ1>޶! ZRn_N}k+Ͼ|H6Gu0i 0=|kgϸyF-a͖͆Uܔ΅Ob|9j02F҉fr# C]|5yİ_3ʿiUʁ eTn.>nkSG)J+d(¥hT`K:#Sxf2XO Y gya'?Wtcc9N{۪2V2]g͝)_Jyĺl0464FUv߰kt/[ŒIxd*yY"Qdeb&N!/f6̬=aA^޹~ad۝IJY[}8_dH wvkڍ^_|*U[q)ufcr 播N1/J0Ve!N"L5)Sw3Ha3qt!y__.>ḿ{-@B}eUtK)BV,.l'V:M/QNkH6aɴȳ4X D3-bd"6l/IG6]htJlE\Z:E?83wF4l1&RZɽ=@䑟2/7_{F[勬%Ny—ac; {S}xW=HLrYش^CG-7}>jRj)$B2,#+\IudSb l`o׆.M{{Ĥ,a:a!BDz H y+WOF9#txXqG)+ʋi_x{g\PׅΛOgw6OZnI͔rs5&BKE0*Q_| #^DdʇJ OPI’ϬRdW(r`GxGt림XNEX>SBJ&]$mqW'@84Ʋ*2;7KQ&pWbr,;guh4 1棤fO 4kA9}']8I+7`*%6TTn` g5׷ G4$ߝ[NG=DyK\ٻwLrt6EwXe[z #< $bm'+Ӱa#l2BhQg +aVmeΗGV**n1:gį C4SLm! uOՏY@6B1,)F2$G|.\O|zF $bHJ}K$SR*őP,̬4fv PF,ᅡ,6Øiʰ?a:ΓЙD3d+a bCS'5SGDm5?8"8(s0LcA |>a'qc$Rq㯽7 Vm "U-RCr)ጷUwX7sxQ/7؏Xk[a`CyB\_O[cND98SHVxHNjO Cd,ZXzfGIi3?ĉIo2;m1GfVdtzDW,bYh0ĕ '/ݓǮZ-V$ms`x,uMR25SY'`w͸)l5@7+S9Y~.}QL)$7d#{ lj5l%]~w\pÑ8yűsGn|2%YG>`3iq 3O;oi*ЊUCwov)aV/˖/2~ް{ƞn,tuE\Ԉ3g[8"E:vs,S:sXPE?. Oy٨F_>+wL^-_srE@3Zޛ-ێ:7 =nBX*DXrBDmՐ!',ylf sB1ka;dsAMtV5 s~w糞p W ?< hc lkn1'=a}o/q``.c<]yGmIh.:/zޒ*,z|*`z*V҆Yn?H43,E& m\RTeCU8)C.M8DG[&c KA j'[@;{Dc!mMa:WBgdp&iL alaFH1.\pOTMré]adxl(&i yhCz>qk|.o=4;34ːc?.bd[$Nz;>FYú]w=?Pɯ::۬԰僱b=JX +EK041N/$[]QFćF %ySqª*Z9 v.ʛKwڹ&zU7*ӮXKbEdQf\=u:ca޹g_4[ ĹΔ? GwԘOy*qsKaÏmL̔%a,) pzX3A| SE"MVlY4SFX*4ؼ͙dCȭ6&(+ʋ2=_ >>߂Kan+xUWf(Vb~!\I:H-4\L .ݍ' eÒ^7ڋF^NHvO>EC'=l:L*Q.ci*r)%$cLyzN?_PЭ|]|'3=2XVgX;B&GA I:\b*dw6c;2àSS@<w2NG>QZ( mxVߗC+O=5|_([Q >VVɨ6}7#,[Ɵ\۫O.XRٮ6cƹ2GJv >Olz{멇.qh2b,)Ux]6i">)c"΢d_đыU4_Fn.f \nx3FХP5׊>^$MvV*rm;7`!a>usg#&E;p|汫8A%cw'Uذp_H#4) \6 0+a~Ѿd1|1lF<9ti69YPvd! CJc^x3FdAbW{K_Ѕm)k#Jqǻot_uIe_/%InoEèA^:/P'˴Q OD+&e\dgR a۩`2逇'm逛o\E.b0k.?蘬zמ;DrB6V8qJJ'<$s&IxF=tLB%ږc @y[gt/ѕo>Υ IlH8N *[WO}d3hg@̛8mf|ǣMm O?(t OkK~!a`Ew޹~}a[;nnZMŷxk'>Xpš'7TH|dI-S EE$;ٵ%&gs2htYl ab6N>81qW_ŀrOhk7˜Pd*_Kf!,hj=lho3uK.3 x|@OvA>K NXn|wi}&!g,+?extzYa* MӦp uȚFĐ|&,XLaȣұ4)Ma!$,H:o G>=Y}EG6e{U䕯筕qċ/;'v%RLŤ?[& 0 {`?)Jȳ| 2FL=]ɽm2sl^oy:7'39oW׮QinQf;Óm υ񄘓Y6箻*"6Ÿ'gЃd|)tX^_1>]Urݏ{_0:ۃItN? '/<p'N7~<48 mt}n6&zQ6ɘG.U91RQ\O$1#Xof' &PLsBN۪<}B.;u`z-$m +1. W"C6'**";1s h,w`= v,rJt8qg}6ƮҜ`xܝMDL-?aepУ_Ydžpk'D }6xr.w)rB^ ?wAm{_η$:@r]2ENL6KvpHou|e6<Ÿ̂k&0u* 7?)ƿf8s݄ g3Vuo7 i@:aIm kܗ;[{Ic/ZE2(B\ztJ F I){Oi1Md&ѐ5K;,5aYEٵXq]'rR_˜-)Y~x?|ti+!;3Y;W: p;F<4G6lʥhvAl6|{L\ۼy3;77f-)ZU*,xCCC?SlG,#lK6K~}j<&B#m׆?r6 8A\ߦr`H6%y\[~6`?kGCHbﶰmx-YrM|z;T\uAB2Fb*Z˪Š4[fU$C.XIFvic'ދsOmRq|;oV;QR:ds\gѐ0<=^WdW~΄:@ |q 㺟{8 o {i{~PwO ?yxih>QWɦCv?.cQ=5 ZLI<^xZ Y 5(M ⑝l]f6<$ُ, h 1Ty,/g(ї&l8 75T9ZO/%kVuI1q}K; r[[V7+ʆ @IDATm'K%2 `ŪqXzɶN"s|+aE%Yg8W䊀mFOsӸA>RHs|c[tKuƗd1"aǃ-ҫ1x zc:#'^:'ν-񳍅PLσqHNmG4[YI^oe ,O&*pޞ'[vi>W\ C2 i'?eљN,>om?_d`>H0f\u&nʍmIG5W{O'KeG(QNpW"vԱ,9uFUS>ρ7oOBjd2%*͓ZO$N+1$u#M[+M&[OxfǥakM1:$J;AW%1d'+#%mu?WvَC\DgÞlxpe7i;x?pjF/"鿆U>]m_>ȾQMz—7N9)hxp.οpǭ+. =o(AxK1. } <؉D^vl1ֆ6v6OG 'SXa);xt``زUyt.|сN?+\Ӊ/% .lxх`>QO %5};[u`!-+VOk|gX1 7>{٩.|/|_HoC]`ǫ18qKi#<֣(5&+9xo &e#{l4Sac[lF`: )e/U;!8Bn PnzJvgƋ_ =nIėrW*).hIz(AKLǓꋅ|7jrXV6NYF2zt0_tNpgicc6t iGO3zpEhG w p{o@߱L㟲HyΑn'l\SoOټ9S|^?8s'V7Ki4Qu2a-ؠ-ZEZOy4IMʟh+3UĺzO QFWBʐO pSϳ:&#FdUR1TebqÆ zx5}91ۉYe.:mBNJ.nv) DxCVdɤc;z,8Փ;\;)o,uKW;[o*C;5_bv>W}/t!|2,"6&3,`S4D6F3vĥE1 GC]|aP_? Aԍ0Ø޲a? y׆:[ ?51fKT=PCATԃŔF<^HN)iУ!e>N-j5YϗE{?I?_ʔ>e@&c~嘍4$7p(o*7o0=['}\, dxOfY F [;cxnfybxO+уiR'Y)S\XqeH(g.?c(%e+I2@|dCX/KX/Q[L4aN簦eZR٤[}>^1]3Nq+#Q¨yO9=D3W ''cք-cM ͥFcc|w[|ƃIX'Y>IGB#ԏLW2%I8Ӵp’xe6hdG'Rn0vZ`,q z13j-zʍf䜑0>|t&gCaâҧ^tn/@Y!U kMYꙪ3Z)=1W`vo/):rE;Ej'Wb$0 pf_K&&_2 H>rYa)^v 5,e /Qkvr0H(VVRJ_ 05> &Ⅵ-̆xLPM$SyzVG?V~+ +dYO>3BflJY־ɐNu2˝C8|Q3f lE!FL1„g\1ii } m|`}g(ΐTLg%دʪA'Y1M~i`= Zc0|K1| Nd(A S!8T,CNk }`eG!l, +[<:+>ab~Əyx=4]RqgLؤGtxH]ض>~YٞƧY SI{y0*'X50GČ7=kT,>ō~FXͧ}}n2=[ K]~i׿:+IK:VCFiQ&`6y[>dp`ev73"RLfl{TV*,OFh1K+Ny Ft%zhXZa:?ʱclp]vf &| ͕i/Rl1;r|U)0aAj,S3F5Ulv&b:1XE3 bgaLQH 'la]׍;276I~m}0 0OQl MJ>ƗR5'{?ac{QcH4B)mr.J8DR`Zfy-lL ar [7.כD4W9=.1=56?V/X7~VkۇBAP o𒌅(XP "ëJN3;*,^h+LV31PE8%pvTǕ|>);F_u3ȑ- ,mχǗyBS|@P<SG֞ l U }}xhxj~;ԩXtw؇E:1EKUW_pUUW>~[s ({{n pXG>çJ@}}6C m0z)~w/լNoK&7I(s(~'j#۰dpo^faYL+`CO5;ap+,qt@W{Xio6s:w2ȇiڙ1R~zIWBŁ"颤>5,uVBWDjݺ<}~%8?OYj+s7uVXO,lg #.-]{|as/CCkbI\߳w֞)J_m:`mOEK6\jb1-B[ adjaEj_ p- ap%_?W_uUr喝0/U݃oOm7%.ŵ gt7fㅦ.!=ǚU6W|w^LG^Gg -$~NӟrI\6l5,'8[I0nՔh\DKy2~ZEqĵ`-'+$c\.?Ҹq̃nˆ>@E=SpOyS{@˒N^뜧gzr0$ D"(Ĝ*`^Ytt] Lf3 L_iW;uw~aKNSߩSU/10=z=vG9oh7؄$Gֽ8y[mZVe,ů~…YRE9Y[\8ˊhUIy.ӝ* Z. ^Y%'uRHS3ş^|$:j /~jYՊcW$oV!~4s3u:j.+t  %\*+T2'>Zމq?[,<[ӎ<և" JͶZ%' Sq叻u8˃,.}|_;yOA:.fiV2)̟4) a0"o:|vN)_>ExR!.JMdGg%@1{ :%Η iei,ex,ar](oS9nSWkشi۷ۋhϳ -ygzold )xo30&FKഛ@~t7LC"sس3&AxLm k۷rAwo{_NmXGNJZVxIW[__¿lwVN~瓊< H0O#l$/J|˜2%?X],+#PF<xmKyQ~2Ԩe:+9KZ˜? PG#4RMNlj0N1M `dU&mff>7%m8H ?6ĸsccI@oob 1;13g1[AÈAV(] {O[ 'X/k=@LoʕÃ:SzL~ꯠSxdzS|ِq[nG̳~3 Ik<8cdS•pM v'0Oal7 ȼyhyC7.Lݖ+3^3Ag;Wd `Ï<eFc}XiH(Ag^V&+ᯑM 3qޕ,3gx{zֻ ;a ںfxQLFH O5ypYǞ{v?c r ?3^ ,+ivq\T\{g4XlS'k_y==JqDr`F({UӠӫ:y,i!/ST%ô-Ic=#P#Z;)8SѱE4Au悢 4/8~ĐkqhE ˜FpC7mM0.轏:8k#,:#@!~Z7zѢSn WG4Ѻ=}[=g <1=TXh\u OBx B@+~0)xE<)%a5Cš˒'I] tB$ɳ/Jzp "O< p/c:V 4R q\ι 6RUdtb_gʦu-G~ɮ'lߒmJ`אzYK0֘xsxTmeSYu2R:}!|98ZM|GOQ-V&8Ao<^Ph~G1b4IFaPL^t4NW-G㢫Fxqw~׽izA>)7o.+*2|YlBgn_AσQMT\GF m9I5naS5cX<[D5Ḥ86I {Gl|#{SǣU䶄# | jfVبn ն\D9()X3:-zRz,UɐWB^ l 4-i>9~P y>e >2bh(pT+_%?1@^d.^"3(+s ;AY\#f*[?kN N>(O.0|A+̾ʚU3 \Nkpx_->}/?gTĠ/3EmP[TO`13f KUјT WT(tN5+H:6=xckլw9t56rN\VxTG!PlCNwPTY>%ԣߋ2etWY* {^͂*W!R\HXd|,<Ny,"?OF0,B( *'iHӽW[&GCHdPE8W?C%)Foyw[g&azb7?;"/_ Ē'Zѓ{Wu=RynՖQlZi1{73z4\oK;t(^ *!OD+~}tҗe,0lXV0k״X '5G19Ѯ:>%{WT,% G߇{ݡC:E(1Lq)&}-{S:p@l01h--EZCZx0FUPմ]iIrFGp$\!(FEK&CF)D:a}G DJ<·3'HA&Br ẻ^q+kg-0Kq ER\%ܘ5C#gP 4l uRf6m Z wNо8Ѕ%qO<Q77r rg}oe=2rɾdaXuwGUSIYC 'r8E{$=f~ T3B"ӬCSKh`zSsC$\v-*7fkj#Ѽ$~`+OZ1":=%={o-/QֳYXM^ 9ޕLmز;da1-|;1ZA+^/ϔ䁎LZi99gYѧc^}t#9/.Q[~m]֬-ph*L}M\;q+[iRd#iZdyʦc`T^SҩN`"vN淾ͽrtt=vԍ1>q98[{FGGxW58+0s؇|pA}jqVW2)p )IW,iCU2ୖjWpџz{;hz*uf'>!wd4ux6c\}Ίx'Bl l i}, ^@ ! xNd0 t( S|;(uQu&MxRa>bhGh%ןjӊטt6Ɋ2Xi @1.kq\Ћ?8ON.6$e'ZC..GՙIMO r`8{ph<輇ذxWIg@5(8I jg™X;q^>EU oseq]:?oe/wW]VY.wOL{as7~UӦݭpn[?w~ЭYU{UHr/D0x-, TX?[QRՔ/%pZ=v\`bg t0y XKVs .q [%P !Ktj\:zf)@PLraqgr:kM >` ^q yqyѸ5ZIi {^ٻэ+u^YW '/*gƞyy%y]a[ ;5?e=Ge)da-*rrV#IZs&mrr/l  agޅ-ci[q 0;Ɗiűcأ6Z FRqN &jimssx5l٘PBAD(eh%6x =^,K yM^ Zނ"+kv=SNNYJkAנ [ sSsc ,9aPАs8 Lèp\ks0`͌Ø \ hT|θ\rsk~ yIֻb>[i;y<]𲷇y4MLSJ,RhhT~J$[@u@^+# FT"omMǃR} w烜(LqYCZ2V WjmH$#s=a.[ئ7§|MjZm0 +ƁZہ "k(UQQedU׵*ey{8mtԅ,91=r^?6m+SڲKmJZV0kZceZz>aܒoj: uHy֌BC t:,'\!ʫZgyt<-YlyspL|(k5ƂQ^(f9, KU'h^F 46B0TQ&dA^ɣn~ S3n^yz7FcG0{1?=,ƅsXك2>f?$EpVg> 'q܀ܚ Oolp7|Ϻ]/qO=|oa˽ juN)I-.j?Ktl-~6*(2OyTh5.%=4(k?-M*IxyƁ|pwRMNY)+ +Scfx0lhhnw=]،p5-P1.at|-*[8p_TkMq+pD/B(W嵗+WBޚWH9e/@X=a X!?5o"Ƚ41X \.ܡQeNZFZJ,l\f^Mpܘe44|p0: i(8!nc9HtVVoe|lPMUlt)_ޘerQ^N]Y0m5Q; ܚOhs/i/ Ӫ”@m%VO(7.td HDSskǩOa!S>˫zT/iZۻ>7螗:~+E[f` :L~NvѦ* 1U]9*K>pNKozCk:|+:S!ikfA Cd.Jht MtoS3}2+)?5 r<07G</-+]p;ιB~%Ƌu%.*۽FDkaL*T X.E]8qL‘̀ͬ?ӊטt,Jm5͘ml-)z B[QSޕuqC gZ?N pv)T moyȠxfUи-oV7p`ay]w,:"Cר[|TQ fCT]3p<7 t?$| 㔇5b-j pk9s"Nja)ǵwJw&77!Fĉ8vfS8x4>:  f;rET7绌iH`z>G\t w>kB3o)MycZ@cU Sǘ$#ZCݘ?֧/(/籗!%W҇*~|R @h,)Oە+Yy, !gzU |#ѯA Mr*O(>MucǟTx~׷{Īi>w =svEu'x[`NFMr,9ҶgVgqӦMg >̏^ ո!S?1&^IQI ^WE[~1>Ng6kc G3MWyx~me}Q_C]KXi HG翓'"H1:<=pG=e`<>.iDC?fq/Ζ1T+Q/+4z|=l0v؍=b* {>7[M{}hUChQ3 ؾxEC]M4i=o:+ B1-N[u @L[Q#Ny"]i\ŸawǞ;*Y,n54߅t?5?p=V#eMˣSnk]05< t01lBbML-tJE0揦WxUJ(2ĕ9O_iѬFm@&is<IO_ձu\I7ݓ^whRF?^u?ѿu_XREՈ`hx0CbtcwM>!A2s <#8;k$LX}-пRw;k]m~'iģM+|ųcDZ\ 7uǙ<VnXwZ!P_0^bm{cpҠƊ*nY4l,l+51y ]o l|=Yqtba} Ck)N}gIU9D.7 C.}[t>aHI1NbIxpS0"h<|<0xq!GbF"(-rKT-еf;W %][g 0hM>_l k t?{wJ 5m {B6/<+ '˘L3Jۺʴdj0s:::tcXy,1)` Ep|pmNaO]kظ>["-:hת4RSM욫cvs-)qFf' UCwQ>&gİq L;0q1;z&u{dKv~Mo ?}M>? {(|.w]m7^e@IDAT26dm5"%+)]ٔ2et [!P*  mxQEB.*S2K[-6Lc3/(0uGQcRueUH?K >&tY%EtDpժepmY ^6f^j,PDa.yqq;=r{wP 98z/G[Y\/-X'| 4t7ܮWh7{Ʋ!:>ikhgwmy ڵϲFuˀU%ˊTB@8?~52LNqL+N*sYz|->?mS9?,kbp-4: lPyƻTUd]5KD(#`"CWЛb򲼄9.׺]LHx^f˜8f~Hu(x^o^t;=u,'FĬ,\Tΰ$AK#doA)&~P/ڤ嵰1-;\A 0x-,jU!DU͙̓#YXX; n}9;/+7>\Dk8 G]\.L`I#bg3=k]Sk ?aCIօ8ƯMbEq7#9rC'=tͅ}~xF,"*ky-t[.ka+g)tVrԩPy+`8lWp16xM\``V=p6nv y /F](Л[ [&4U==[ܝ*yo ^x?e[!@::%]͏Au+(-[Z} +N!O1 FK ?9qckC6*h:݌.?ԅNcn0CA`` ĈxObg^!r:@$wY3h=zy 4͇{T!t~a@BQ晷Css( ( fqbкv;zK\jyagV}7{uKC;5%^k\#1(!z군 \Ir/7Ds0RÀ10-:C-B1-ȯ6F\Okm'.[L5VM/`Z,4$+`vԡ!w`[ݝGpP[ ʳ։Knk|0pnC 6[`5nD^M~܎ȐgkDG'5`ޖ=MX0'LY I#U܇{a 'y.#b;Ƞ8O-ir<68I9p=;'p e/|#Qb^ ضOhhEgk!)Nj,*_^+>S^$+Ao@Wwš3;g\\XKC9_(~*GۦU*-S|钇GS$mV&^iED6ޏ 9Yl*#mpp݊mЃx|Z v@c WtlϜ ɍVoV޷9[f 7a;v}d oo+goԄ[#Fس<6/UJ#سv Eهtw} _"m tVv|1\[!/]c2k ^4͘*/V I|2f}9ƚe*/kX)QRpC| X><~wa~}ep_|Ycpғyi8zv!o|`qg /f,ÛSKwP wm'/>.z[9;@4ڰc8 "L.K2+'8F\ dDYH۹;O }Bkcl`N$5jxƫ",`+\)>O lt{$2VskU/нn [aiZ1ǎw Þp< `|lD<}0YW5b*B`oLW@n-=ѫ<.i[qa]񣐲V <\kSO T~|S)Wʄ)tz, rS(-wtK9lbiZ _8a9[X\<077/@}[^!ҽ1 l7=?qJx?lZgC?/+unsQxAwꝿ5di06I " QNF^|N*L9^ڽ=]v|36?_NYS{SC Q;a [Ȣ xMkL@fCT>M,*-ɒc瀸~& $A" ʨ!O8N?OwҍÝ 8)>q;?Feħ-H)q Ҵt2 k|*ӡC:L̛Q=%[f{@ߒ?R(bPF۷O](aeiӳݥB ܆)7}īƵpG$~ٵx>/$׉dPY-. /-0Q(\98!gQVuNN =bL<Լ+f'X=r8ݟ0?@)#YS&Ɓ|)|Wwz9 Ug )V$Mx񯵆^j t:by[[j J<%0o Љ#8(~`<2x DžLO73.x%:`3w¼61NiZBDZSŭݰ ,ah ?_ٚY3v5zaSV6ӓc^Cˮt}SatO7C{]gcKaz=L%8֡8;[zQk,9"z]aht g >eE^VԢ?^4wM.FKVR XY"w*3v V Q3᫄R)Iu7V EpNf^6\*lq+u 5*5*UØ}8 Ǽ`8{ ُ'38DPh678 ww޳_9]7>&LB8{e8[q;8ֻrGl̶i{/LO vv`ްn G1^glAoEpN.Ŵ:kA]oTS!P+f{S.4Յxrz5N2i#]aٺuk 'LcfS9mh'Y,l5cg";'o" {TFHNF \hdZdU8,BܞaGv6Ťy|v4Ϧݓ,56napr⏍X]c%d{zw_L2}叹;.<6}ۇɇqзZ谻WOOSN4 7oW >ۗ9X->ZzA# :D ,=8ky2ilTxW^be17s nЩ!AB$ qaFO,goy:LM0p}AkŘ 4=9\'+pJg%ez6,O gcwO'IByQ) >zr/wfm^ kt6\l+AF*WEod%vԷ/{)6X228a#h1N?mF(T@F Ν;u虘k#j wXAWTB ]>{'Qᅩϗ<4,_S>Kp Q>^0ل (]`֗I::d5g~Q<=U(,nj(x1, @[2ԋMġo#'k7[^sI%^$al;HZlwG^wÛ? =W?G`ϻX}W 4yiطw H+1?iX0j穄\>Dl̴BDOtES'yu apϵpYgqz?$ǚI˗^ 66l8E'4?S&i vH+…r`Pc?Wam̄秆`<t,Z̎qsƜ?XppqN*hظ|wݺ v8w7m^2@L\7Nilk,{\!Mμ_ڋ KQaФezVqs}޿S~3R-ԋ 660vac`<^ ^Mh2*< Y\Y9 ?輯]il9x.ZZ;كh1ŵ?Ʃ*Yç0ưfԀ >Le*?RДy+#TD4-Cب ;ؘx7nɍh]zkw K߂}%#/=kB7⁋_͋0\E}L3t[!LrT'+ ղ' ˝f3u2u#s 'b|RFϧ; Sy0˴"|bpy}T!*g|Dzʖ#hYD+CP{Nj\ ܉﫵K?3*㻣#^ιB m6ƏS OeƂ0WBJʒ'_qSSB7(,T8%4:fF-ϲKaT[q "8 3|00NsPxaj m=pˣdoo&e tQ_Mt'Fw>wzWļ/ &pBŸ60ʧCl:h1szޅih0CugƼZi_J89Z`NF)5$at@P>A^e }t`J`y٘oC|#IixX|T'u͝+WQLt?co@fhIy6wMJ^_um]Y,ew߀=Ɍ962y ?O5ms^l;8^>F@JS蠓$B eC"S&롤>E"Q[6j<]u`fik1L>i xe]Ti aqGdb$08,Hv1r3*17or|3OeP)Te̅M0(4iJODZX!3!U0L~u=zQWCsVu9 "0rǁBbؤY\-<\A C^cY Iz}A痓kw^G$OOcފ2zvz躤ΕB}uv"<Ƚ{%z K:]٢`H]'OMd#p~逨nF|46ָ4wVOQ> 0  M-~6\=nEoa}՛q?x]d:x*E<'1Scp ΧI2aw_Qw nb^wdzISZg6LJVS}*:mި,{B{c6,'jH$ZFKXa‹ѕo6RK5u%rvFJQ%Enj mk7zgqqzxtt9zDMXXP&"<@I@P;.xۇfW`'R7>-00=wÚw$>tC -?>k]Mm]kݽ7>ɺ%?}+OO`XӆnZ=uL^)guq}'W_~=ަ Dx\+Pe/- VVQE8FO x)p%p9grv"@_ [ 3FEcZqWR,6*U\Hyr`0 'fO 7e}IYX2Ƈ18y o'w U0Q1Fp]&83}y/|⥤-dy#,zqq{5a=[AX # 4xF8BT<| A4mM288? h1hIKx Cꗞ#ou'u$fp7S_›P%Txᦎܟ!K'-"|'c@|}O~Q~)+=7۴m4֟4HH!0Wd.Ա,mQҙCRU62S^ziGZhHhpBN 1xԥ鲗4xm;KaE6m/d! rCgfD£b s{ gb:7pۯ1QWXR/@mLk[ݟKJ]:z7Ւ*;,C[~ٻ?[dY5ء_y2O{{>ʑmnGV_^dC20 O ē/cxLD34tFz+&‡rRTn  eb'Uci<9saă-24aٌ/iX.R%lC(6Fq psLη:Oxz<1U;&K2F+= Hgv#lܺmزSR 2A #0p܍rxk[)j; jZN34qԴ;7va}A/DNDds;oLJnНϞ>cK(VE1}ˋ~={߸с#ʲ*ƹI%3 tύK寒^):K3Œ \}ޠӨ!3kѹdOԠny.Ceg<9]:#=<;p jP0 t.G`< %0 ~.a0xFYpτ(-|K7 ^?}0;qzoO=Tseaa̺RzR|^>w?x/|+o=uY? ,GS&rݘ3|*9yMxD;C8z2+ Ӂlt#x&PF%;dYMVb@ s,[aOie` N`ZU!Lη:6~ϵc@ P~ː+;c ^82V#U\fCI uU.7%&<Nf&~0Ƈkq<16'0si4E4΄\}gcog\;(dfk):Av{ wM缲|}83_h,|UoÏe ౧đfs?nܟo{˻C+uME}B}H#H(]&x!S iR:Sz<Ԭ(,̧#0 m"?1AU|+4%x5&a֌4]Rm-#skVx1a2u!^oG}9#:viNt< WCG 8~'o[aLCz@>d30 xcsWxg^Ⱦ?,)\LG&# ܱ.yB̛Ib +,啲7]xGܭ?tUmwv}ӟ~н߃÷x"h& , }YC'$&9@!L1}CIm˸ ?eX:tֿ7s ȾӣcKg2 E[rJZAm$S O!9~Ɵ-c] 6: ,9{=3}ޔW) EIBuM. yD|, 0hDp`+tݲ_X8$NÏgÌw˙zGEY{X|ߞFk]ʬ-xJhK]'ხs6ɒe`7 ́?Xfѽ"i ~ymrG=U>_qxfg'P-_BkNe7ymSES6:eIaYӫJGh0V1cmRy\ny>@*#^fr`.U,cm2+ l0xC^ώy$ңԓYAAyy2qHL/[h|= iAXKR|h˛ <=ϑN HT+ ca1 DZhtMgĈx׿:5&.&6mؚ;uۮn۷kŞg{75|(#}uYX2,m[ _㞺\3ƶ.s9bцQ,9OoWDž*JvR7CAc7^NgNx?r7йEJw-g@7-iE"NȈd |,_RДpjlo ʣH|@7 uc-|WtQ,%o/JN2Rga:779`8Lp=#nf'a4pbF\/xՄ-w=V͗%Ǡi__ %U/qF[궜Ҭgl\lpbR|7#tb /FW%Oa=*ohnnnc;lG}i[=Ac@;.N喛ݵ_}k}_~X |g;FD7 s []A'-BkQWMpѲ鬄gzC4xt<r3 =rq} d&:c6 #x+db5 C|rꛗ^W<,Q#u3ϹCa8b ur.z;׵;n) /{]47x&M<,xಷy40IG i.f>w Z5ax]—{rc2o%3,KiۨEɯ!#!鈏W>}k'x}!O{%;wn40ŧ=ZSimc+ii+VXc8^xᅽ ekuçpdQ ޲w^E]˹ 4]6yk,,\J[,W{WAU*ψ )Qyk{wg'5  Ay A.KfAhP+"^+D>ck 2=޽Cɸk]} dkvMr|y筹=Eˡ08(1qCT0'0,WkW <\*h> ǤQСCk[>|V5ߴ5Ves |pXFZڻ7OsliBGޕ}"-on낋^7 V)C_MHUIH'?:3o1Ad&L>!1¸D`)D>W>9M|LڞҦ>&O>ɚc6Iy^FJ%W+_A,혠αO|CrB/ x b>|b3 j%*-`_A,ttؓr|ṛ:b}TO!fL!E*ɰ|$Z>{RT2 @܂(>C a@3 cV 6mMGܒ0 P>Ňx֭S8g0R⃁ݎo7p \Uiʓ}3ު& p#} f 0Tn}%`@Wz9 yGf|n`\ga֍j3qIw9 O"41x堹wo\qPUK(YeB~~VQ%O'>~轿#,DhТ#̾{^϶ѠzmZ`z˸*y—(_u۵k1@/y? ZfioΗV)R&˒^I@+7ъ"3@OW*ڳɽo\1ǘnw?,<'8oV>oMMuȁ5t;{oBJfc–ycfxcSiqp ̒\|Qf^(7Tȩ'K_ΐ280ixO-0}xHGE=_vU0gFnպ-O+ [o?/N .<] IS8)t)UeWg^UgU4X?rm}=x ̺A3x#Hֽ>@ؖJ?q=Fq]!4*^Fq> 4c?jTXc1^+!mUFpݱf{@%cLFEқ73 { 2= GrǏ-Ixndhejfp <;}tE#(w]O/I L]zYtem5; FÆ<Na58Z-d y7b7ӎ8LmZc"fXm^|O[_n[n@l6b|Z,,!4 afaCi O"]ZB\{s vTQ;@}jH_ia.<*yn()G*{"fVphPO!p|R D%EB,Ɗ 9~5 d3&< 81lT%N*̖98qymWAxjazKOLo|oS2~hʎ/G3qf 4 vDi܅2F]>Dc$}/z텇\eHqN>D ͪ )[Npl4$%t)C-CL'ʁzr3ȓk;.k5?tQO/o{ Td9^FR Ied>ޒ1k:/ @S ZK0kdYil  3,{~v Eĉ,'Έ۱C 8 x H:$&iЏ-`# 363P-0lI/LZC58b_ iSE'<[t2SKq;j >P|Y(Y@Ģ2'S2$YE5o(:CiLtu}q~4V.sX~{Mݘev=ݝv!^!d'oZv[<|=vlI#¿~ogT7o? >K&X~ե.?"e=cf$; )xtuݛMÞ-CKYCKnjpC%.8f*^Ntd_Gi~!`4jr oCKZ5aNĐ2dՁ ٲ6y5P۳c2uK+ _2/KNdf;W$ZӧMT0D 3 ]#^!14$>?(\ hع_AЏta:TR\цѐ\PX\\vl臝95XBa)tJ[7@C Sq"m-p$-QVӡOdTS)1=ґX$|5X~;Y)O!OL72l-<{:3s:I{5A}L7fZ M{wXlҸ>=ck[l{DYnNtw'8ߍ1_৲[IYwf5դOfJH!ÑWӌh|1gy䖯Xd5X[oykm/9rJH5ǶDm+,lKk(shDPm7;^|1N.)O+# |N?gs4PkH­9vuww{*sCm@+~IC.~zZRZ{M0fLGra!r̜9 7S*8\'Š:) ЉU;^'ɂώtʢx֜|Da-+ӛ n_YNC^[~IZbO I0s&O+S=U7mvֆ]FCO1h8Гo*ῡC`Y~;̢.nGz%+#hiHEk #/-Myɗŀb]: :R/ [M+mV©80P@ Vq$>K᙮dv5VG(BlC8i߿tPu:k3 a 2Wo}p`efdzb_t%iq6:J/E%uhshwavqik Q .+^NBe11w~C$qUvx[ ?ж^`zFhpݵ%;?!ɀ_io~I'!C MЯ |P6pvŴlò)p(}ӴK0K, q)HӌZB   ନ>]q.3gN1 ;.5&m#`y̛+;O!r׿[1"j/uL>+C$VTV{`n TUB O}u02eW@~BVVy)+RqC~acT/ ^hreHyJ8#BPN;9C"ˈU4D eVוHt&9I}"{OP=+Wr@5d·t]v]mX\hjo+F?kr.>ά.B̭Md9$})V??!sg­#`wz . 6HEC1^e<,' |\H%4v6SPɒql3|tZŇWm2? QO.X0ԩSc3qm':Q/Rn 3ܶ4WW8|≬8+p b+8xK0@áz>$?xPXlߋʮxE  b<4G30kz{̴ ob,fB%o~Q%7Q}7ܸN~KOϻPaF˝4ϒH4֋D%δS$ =K>m7L]ex;* 3NB)[ dA`nM|L%ԥqw^9r?`=Ui&M\DJa'7![ 1/xcM~<ŒhC-7UUNV@g tw5g@P_\o6w4Ez{qۛԹ5NZądop Y- Q 2-;QC¿Ǔ+&4]|KÐe:[>ŝ,q$ q6}eי~G3Cjf4eiĖiO\} uҶGPt_1)T 4)8Ar.=JCHl04*!w #X<,Cmȹjbт:oa}y&z{>_ϛ.rs饗m۶]bnMK Vw`'|wI K|JB2bhkŊtkE؆E/[$8陋b .(- (a)]"M#h75.|i)ČH q00 id!GA,k`"Ӊh 18 Qڸȣ¯JW~_,Dl˪ 3f0<6nܘQdC-[gS op nrJ >@wjYi4MUVS&Gj806WC>1zڋ U>)Z&=/>i7n˺nngT%Dj p:=fۍt6F|.Zνt4jHY7kf)obgNk8]ixqb2VtGq6 utOqOC2*7l}EKWM͞.z?/}NW&պjwcsti(_DL]~@$iawLhJm-M'JL0!+p {Z)fOH,̰` z|O CC#Fnh9^^'IEiXq= N1{f]cj56″6:i,A'f:ef@@'G]T0f3k,8\`S4f`pNjp6`X΀fqc!]H{[y Z^9r$Yy?|KQCyk9io}tAd Mrеҗ,:4 Bc~6yKZJ Ҝ9o.63림lϙ]{n1'~@نjiQ3==!$2i:EtC]bDd>q.GLtѝo!uL}/۫O4Wg_hAj@}n̟K~%5 'O@=It"u0 oH[Y9۴˥+\џҠ//*>j0vqbЏ$F=<\@XF(xqfyzTǧ6_^ 2WxiP}ͼ:WԆRwU>mcoaˁGwzySgD'%˖#KtޞdC`3\ޏP6#>!UUԩ0,!M?^L`$ի} ʴbalTжCp!W~3 r34df'!-A/5A!WYwT^_' U"n |vWh`9zmT@Z FAm6~W؈qi5> Mpx)|4)axpA:X84] aLŧi[~ aqe_r/*+]7+듟:O3a-A52qi{Miן19xϐҙT%9$xH_{;ͦ;4" \K-~ʜ7ҺJўfHʵݴBGWO$Eq>~elqrdǦ3}UVp1L{ieH=-NR8l1 =񑉎IW^,^8fu`U b:l"N*̌3ğ^44Ige)OBI$(qMKiB'fQ=q9E/Pqhܻݳ4` Mx:i޿״0rM~:IY^\UU=l{.ɛ+O S,hbRF3`L*3XXnMdtLLadG\AڧQɓ*/Ni 50j;||^xU/gۚm/:,X$ࢸoG76|F'Cܝ :S:eK8m1$!+_MSD4'A>_4w`.\8@8h55k?͸^~#TXVP8N>=ftaS _=,80tЕJjG0o<%B9Ì[izN'NFJ Gu˫[ -p׺M6L:KʩFQVL ;4ּh궛,46p7fy%.`8}! Gm~&xȍ]Z 9<]G߅ǥsKqEC{"oA^}iV:o$G y!/N)cZ~|"8UœszcRd-UoxYz$^N~ IΦ',rr^,XimbDN'T&!;{V6BqO1>=4}g ꏯ={6Ag}W*x,'s/F@d:2?q`+lOϒ&qIO..LGE@#%ponId:OorhߐanhjGN?QFpRਗrh[ws.&M҇X-+6d92L+t  V]us!Db{J>03>91 vj \<>>E@u_. Ȉ, "*<r*ytf&֋+x:}Z.?d[X0}.NThVPxVNx(㾞(c.[4/ē-K(: @TCĸʴ^~\GjX96u@!Lw$韖va~R2k )F^]< `u`A|#$P7Ck|8Y! ϕUiA'y .$ mm,3p!710m^/ Cʁx7)6aͦqW-C=p `ZCĂeX Wu/{Yyʥ06a=l4_q[~/0lq#Ӱ#yK?m*ٻyv8u4CIy2)i^dSV^Y&P^$ƉV7q:ܦX Ǚ'6=R×08OERGʸ_ori6]E}!'[ e F TAqg$@&RqV4R|.EOg~Vk.&@2}†$ w$Ol#;kJV-[_? Ҳ2lgGnK'n:|%ǐ8nI/~Gz9c 4GEx ~kXQrTA?l|Z/<|^^? x: ^56Sf/ǐٴmk7-x%Y,xlm܃uE |fv]6̒c7]f'?*+8ۭi}E 93w[ ,:\s܍[L$d@$-iqx21p|HX¸oh_pVcg/#|$D&Lm9馛ig3hhjiBUy` 4$Ua0TI;b/n0S "ѯ[p^#!z: ]5K u`ӄ<|l!?X˥H:=Nyh+.]'" 2S!9 ?e_fCvǻMK.`oֆݘa~%&_LtbDC{{/m~ހ5-_c\+5u`$Zw|Eխ7+e"MlOzHwHY`(1ӊG(DUycwa!+}L&`6[Y >m.|iӣ]A;XvD-C9N. MNyReHf sd$: JARg!Hy#ax꤂~Z,(!-T@|"<$O>t(0 mw}ٹ3ϩ^.VVnT!ӽ1i'(?s.^ 7U0|5vN|А 4qp=h&(F9UQ"B9"VʈlAn#WBU )2J1ο8Hr%nu 4&Uzȇi4m'Hriio0N^qg·O?3g\ha[ZLL+$ds:H[A}Iqi26_M8͗iiGo^׷P;GqQA> ׽戕c/¥m[H[Mc4ڒ€GD e5?9{b0q8VOAq waJkHz̙3K1uv9mCg I}>*+~n*@mmٷo6pK r|Îycx3,y9@=؃-p/L#c(7"5Q:0q06HK^84DrƕV9O p!exTOګHDyo8*eCZ3K2Փg:kr呸r+ #Ie mQѸխEk0LsB|#U_"` b$\u|"c q;68d`VaʕpoeUiZC3Z2&!i#e~tRWi &v6%c%lNJ3ky(f3C"lۺM\Wu. {}sQ'g =@.;WQpTWWٳ'8bP BH:!y 8g996tHB,3 6\cІz|`tbA`ub6^zJ4A/nl4w'f͗HEnCiYK>)R=)t䅦ePo@WzL~#ޣ/s}|f՚̟YuW؜z"o^^]y~ x B]` O'"5!PǾ!Y(… 0^ff[#獏_yYR pW_i6E;$΅dxvl8p~5ı'@`7vx?mbv`,`g{a04ȫY؇Mmԟ p g":P'd5˱R*4XBYG&EL lz7*'ƫnԳ G >}t_#YޜOZ֑"} Mj(J јmn۟wsb=e)ūO͓큜f<1Fq-pyOotM[!"r' ^'yFv_ƕՌ4]h_=Ɇ=ȔO.y+“)g1؀ǐDFWf4@ʌ~ZWL:㮀4z&k3E2'n/9b̉ KDӽt#?ɻH4ԞyDy8[r,@l+MirTU%0ic'>҃b(O]ϖE6'ǴMɾ}_4_cmcYCCڼ5o2g̒vxm秥=pӶb@ ^x xDHeN1=q7^bpn{ hUfH ju*:^lTƜ]z+L߯wvN/>ت0mL3uLU@e'| Hxu/%r?m g&Lߟ\Dg=E̞]Ƀ~L>@ Hpimd`x7P[8ۜ|I\kP\L<rN]xsyDۘlxO(_.GA[*?50qX|Mk("/ı%k\ `e2[JNp?4~iG,]ƞRiMzӋA(ũJl37씥 &hT!|8t fvmFNp3^?47ûUۛ1:7_ i*|Gţ{Кw?em2801`^| PT`Hنy[KUl5r%1*@+eІtr`7f8OMg}}sGPY:(? q?,4ExgISg͜ Lͮ /Ȩ.T$G{Te2,[0uMOXț~х>evx/쪇86ա!eQ2,dfA9 T9י%8<1MP|fvz-f_N1@zDH⿿6c^ɦ:.~v8OMGsq} ~GAkxYl Aɖ'[((٧8N-rJ6Ky(+өXH%^}DQ} ҧۡwz[fP?p1_ͼI@O_m0 \cmUCYpAVAyMϗlgH!0L9gm՜c5|e,H(>- iOP&Onܗ Ϝ6([ 1M_>;%А3*<?/_+.ExyYx9&읿g;ӇqniB0ڼ!Zv}e,ϼ?$7@QN#Bތ٦m^}Da;׉q2xr82oi"h1d*'!pi`ѸOs4uP?u@TyWnc}֫a~_elQ֚)k>3y8ziȶfB*q`CL!dsc%>20/cIPw wH*{a$0PC-B =  oTm*_1eRr<{0jK[drA̜+ZV{xfӦM؏{<ޯWp}6!IcLO@Bhܿn\lMJ]z3Aj43-K+Hu~^_+H|*+j|b>mBf^V!4jl+[hc1-'k_~:_b|gԁe` YOqLx<5z,`AqtSDI\,/Dبj\COEU *zmi<=']uY^_Gl|d4S+^T^s^As h3g!m[l# sVyX?-IR !f0PO 3p0VHZڰI4G5<@Xq8an^GoiÁ$G@/3# O>)>^x!,eh@HbР@.i@L<ë_9Ep+ WAa LlI/Oz7p͇5x`ߖO(xI0͛ Cf.Xaf_AnA:a~yǬB3f֦֘5 ]ԇuτH:nk~ɒ--֙M@P:ۄqںw}.⮈;~~)_ĠeS% l}p2`Q`8VCPD #hNy8=eweQ~۟p6hdA]YKbfI5к2ϾൟčippDn]_\/dѢE2Oziz9$=ahP FxX"^;v䂤@_w;><sg<)S<~:|e[^]_Pa@Ȁx@`c3L ;M>/ XWk75.w;u'q櫃u6 )BcNYweqD3WY:P֓ l@263U7YE8,;Ad)mᩛ cO}Ǻ-b "*ShK @IDAT-? 1_wݓ;+JpL(c8r%@H@\l#P36k=Pb&<'ihU4| EIW^+?~ylpZq<kXTHl4 ppf 7J8 .]ى* 8w_'T]^$;r|:p*MW P |3 A_c1y xPibwbvaik#7B 8: e kʹ6b4/ݞo:fM֝yIl3a Ҷ. & ZYZySӪ:x .y2tW1a|?\kq 4V?zͱ?D]*Z!#@B}ixYL?>fcր;YADf⇁%GH*WJpq:8Ѓ8e-/?!ior-S,|Ύd `@h(@Cx=`2UG2-1B1qxgkieWWZ%̼D. O7Cp0< }ۿ*`{3_QٶYt2iU$ӕfU*y'O(E|j Q}yaB%BF,3쒕ǙGk}"^3fyfwԌUAsӭD]}m]5- -Gcm-NA"yKӡx:n>L&+ǥyC- hPaEcpl fE]}tz袋̺u묓<54_Ns}ZG@{2pÃ7b=# gh<Јl5&*838 ra6R8hd¨ "exƁ7LW+NgD$4-UL6{vܗ(:~tKW h zҨmV)> h[Dс^dA={ %ɫ~ ̌e }O{y 4uԬ0柘WuQ}Q7 =RcAQH n%= 2|-4]|4*h a:x)V}5 b7vڇD!_Ouɒ%rw%i,477cNb$PQ\i~ZTī ҭ/~߁t:;"d1 YR;>†E1РSWf#`L!,<ӬxO3xEPnv`l;+f,VƿTy3jtcOKSˊ$ nƝ^^y(+ő,/[.<){.V jwט_1s͵_NlkvL047ጙ3R~WYჸ?fB]G{c0L6Ț[ jP: $O𔕏'@>ɍ4̜9H>O~;Ν;w3uuf?>ijU騏q=8S0 :JLqu\WE^ 1+Np"Ng]@ : :§] enBbd00ξCWKfxٌ<^,;MS?>6A#ޏ+1yP>RwߓK]OfQ,ba+tTh;!uLh'G/fD(.J$E` 0=) Vm `&#J*P"7& <';L7?m;Dp|xs̪5c@BB]fNxc}X7C {8pvb09؍.x~<k l2SYQ.4.d,_u\}Ru+ţ4~KE+7H^>CTR3))N0:[*mQI^6yUFs#8UxmڪIғκ+ī|շf:Ѓ7z?~ZsG@a4+%~ayY(F%@8km_ 5K F(]=$c%2_q:B TJsL_ԔLiWf >i,|z(6(i|*vɏom[[05 5ꡱa waPwFA2?} %rU9b X[i020`\"|:ZW%9a`rH';#hmX7o"9u|}fC("c^>+yXb\efmH>󔙿`lp6Uf+\~IAq.\0k> ^ ‡V'&qlKG)4.ͣ ï,iR风:j<%rubC48(,Iث$92ܠ`ӼjTZ4 ^* yjT4odoNvV[C *p&߆'z8ږ# nZ.l@8h>o1fE.g-D"򈸇fB'LnW4CGg-8k>-o;i"SIȴա,:UIH<83bY,W~aK+)vԢq!Vs]YcHC i z(8Ǻ%y} ؊k@ia'nM~n 4L4 CBxb gTLWzI+&t77-*jeM$`/-ּ?/Z,\BlY6?d][MUl5{jBcJ[_?t^pxJNt?kbE1=TjN偞>7`,sWL>Wڂb(4ID鸱>~}5xjC*(T~C,'*+Ɵ= !4ӗc}OO9-#ch:ЩUNdP.GIs]s_Juufqͣd?xkmD} I^i__GuX|>l@'h4 LHhxP I6I+,9sL;anܗ %)yE H}7%Ҳ c YB  e$ݜyK̺2+ WlیWM]vcq_-v܏}3 \0P;E:S͙/9~-'u'SzRّȃC' !Nh`bn,IyuN-]b!.W9[oA3<2*q.M*gCNճ"ql9܈Pd @ ''sKO{DlmݲL4%@RZ٤Px1Nl>Xm=I฾ i 1Svt IHwqosw `G?Ha(8x!b݄< Gl=yBU DUBǣ  qҴ"I2r^)봊Q|o|}ŘEeo} lxBEMlH݇ @G?$-k+QL6ԴJczT!^ɊA~q}Hlďugnnl gϞC?2G?CpҾ@ 0* p \E#i`nKJBdP7!qe@m܍9,N8r(`H[04Lnl90F^k( 62`S^m:)G79ƥԄG"Ajh˖M.vV$Qmלr[_CRџ%<@}$OȀd|8α_:h7ɰ`,]q$a%mi5̟{,cvsիך?iSֲ=#s|tuTCn՝4T< {Ks@!! #^#`!}5Ԋel]GH8=٦>8iı wE0c*Ё#.@Yla؈?xh 9s͉'(l~g1*ϑCژ~ 4n͠i )ʸVv4NZ0P J^I<#V! (3#zCnrSR4o2MXcbDOUaN3%0p\ ] 8S5z;|wO m KY&trxsi>ʫ^qiq(kiT z=-cwyaӝLpo\3"qv7tߺ$M">Mb3 :bH=&?*#6{8 H+Y.ǐ i[ܲ#טy [7X|ϧlWoG7a6wk wQd>lq',R{2^ȩӕ$IhaŴCH\ p; k`%d+]cM;Wxo&Oh4Yaa tNi@6tmqϠh`|OC9۶#!/Jt:0HHÖCnxzO7_s̅?,6ZkTLy)>OMǾUVs _1񯥥Ź(KX ;}X7EG2@う; UbAӄĉRY1,ghGDGGbrc~>wF #O/ɪ\W+y/Pb"7x[Rb|aZtQ Vǐ Ky::~h"*1y)[&[az1╲(cȸx5fx_?ɍSO5y{\[g?T3 %USLgc'| PT<HȲ02,l?፮ٳ &?ðzx5 wecǶ| ’jsEeS^kFк/0gxs3 h4x;_LSF!tBcpf O(Ƚ_-M rqqbm m-q#3gy޵e7"f٨7z,򝛟0u>sy E"2tUf)4KhyUiK ޓQ~U'0u*ҋEP?I2*&|̀te29"/ÿ]c`}o߆A}yGL>\|G5٦Sa¹YK?؁Wzg0@k὘>n8aY,qQj߯V\µkBw|=WWghqV#M͛ͶmP}@#BScpSVF{i ;PC< ,UiuKG38qCgH`ōؓ}oȾu3*Ǎa|2Pb`YlZvu t,|LXD$"td5Ozep4qR<:-Ǭh&Mb{,/ٳg@yK̭*)N(yHL_^#n;T sL5 ".2v*!Brm+> UVi?tl27Od+7w m)u!Jzd s@T"W͚5rd+_/<2.MCC(p  N jf4IR %S&ŸYJr趗5/4:荛wD+<I@cI:48sЦ0?掛-3tJs֔tw=r"vCܟ0׼\3.ve愳_cfzO>6O}R^qھTp@e@< %eGP;BF~7+A?3 cNsW/ˇ: Q6j"9O[0~!V *VS`; ɩq- q, F`AB('?N2u((W`rK.Wis `7 ͛_4;wٳ7h#b ԟd@(^x*QP-7MhT<gbH1{W4(h;?> Doցd׶O9_~_k'faki?7gxl{+,ǝnXuYbhxEd8C<qg"C$qmWM e4CIN4{I§%ơ:U?3.4hY`4M߁N>o̶ޛ{TuK|3*3*(mdoDiD?fuDFikQq?ԙϱADapAٗ(2r}wnxq{e߫"9'N{7΍O^)9aFWcaT l7`PxS@AO;v\8_/lc$Ξ=-~a9cNr9L9H9u/Z8ѫ?nEc57] 0mV6arUgk!r_VKDY1_׾Cz3;~7Z%1@FB͓2D VZ1Th)?xp5+s-!;#Wv2>ʝ=Eaߢ8U9\bGvXad݆<Ŗ ,ͲjT6Ҍ--B-ljv^x\[砊>6.d8 CCdhovz>3CC>$=9} =#x/V>ӣ C es/~OݯLMۊ•*)Y8 )<?rQl7M[7bRjjyiqΞ r̼>wuCYf񳼕3_+rϵ4O mrZsKK_RG?*/kjytXy3kHb5,ۮ-[zUf P0]M0cli6*'_@Ȣh2Te?xN,YYy)K=˔g3IO yXFz=v^S2ZN?Sݘrx>!0qSh ݕ@p _^ڷ˲{耗ڢrCmcϱ뮑?ڻdG_9}꤮E,aQ;D{eifȞ屌YXg7 f,/JҀ]~WvB g/{{ 3O >Νs|R:Zߩ"thk_=rDh|+}R*.`RY]C9ʊfG Ap+ sdBat z܌PFUkYLOIeIqUաE.F>yavW79Gc3Q|2<6-4bKj5hTT!=p`U=/3 8h{z{=rGS|\<ΌFu#i-eD|? 2chKc_5  By|f"Pq}'_ 1`6O\i׎( | 8M~[wp;k hU_Fs=5w]}N/BMo<Nl)3s;ҧ]b \xň+ɯP$S K{۷gLfpLsGg͞G&؝pϱuj oK#_y830)- i2_ʖ4L+ yǼ}tsF\l#Ff<*=G97m㲳Ѫ#a5v{ˡcTO37u\`/fמ-){[YG͛B8W*5M u<5XaZ+WQ~_q=0g`9co37gVeΝpzSךO}JnF?CyWeC{vWeڅuz d?/0څÔ/6+YAj&xHaYnyVG*hO!Nzqy.g~g<N">*ۮ+r*C(0ײm[ne__&G.f2bkc΍hdr ni%Wp4Pcwl_w=쥧0GypLV2WZ? (7i!` cN *C0mxNe3|XxYޗSng 7Ý4=S˴f@?N g ILmh-5* J?º0PO s ;{v,t:xgBca}#`yO{2"qUv$Jp WlJaSXwx3 _yC?C++zp][@͸F6#[_q;Q@|Xb$_2 14f2Xw(|/1\zS0JqEo6pdլ>VPvJ0{"`6{8TXErxTLkPf\!A:on:*_pX}Xx Ci nȁ>o~5Q!N3飇U%Th(42 4vÍq#eqnC4*1f9T bMܸ phu%/Ӈ7@-@ludYOr9! aL{T}fȢxjXPVqQ&^Hre`!T^<3eE Aypqiۙ HkyL;ыea0%"Fh0 =>|R05arbFwRJ|Mr;v핷{~#E+[%mѼܵM2zC 1Q`aȴf} 7V8iªf} sҏ6r~F1P:` Z.g˷b____m>?_3mXrB:=lXy(FЗG-m1ffa- X8Fyf? 'V :cn_f9x'O{57Hkcw4ķӗ;Z)|l{ew >  /!WӋF9y'409B_ aAXE0ZsYOo;w՟g4vGpyҙVcc:bpK3f `a!Xlo*\ mG7 9=*Wl`"zSAI~ pvmC`$/`}<b#9tщ0l{'.B V~9uM3Є4cK*H6/gӖBxOO{=Y/ųėn!fh\fCȣU8_F}+C@lp<Éd/;.Kt+ |='AG6~,d i}<F i.]-* 5ES88lY.[ ˛Jo$Bj< oyc/ҪUPVxl/gy7:GًW_(ӛإ&%?\˴D%ܧ!(|=h-ǘ6˓,0$g_Ed NFK4^t4/?tMuL3{;ݧ)y6`,sxFytdˑV^]y{|_a Mk4Ӆ~86!~T;'zf\~y [qbX+W 55;xRW 9Q a rπWadk0/Kb"O2 >W>/|c#8j ~'q<9>kO5 p=Z[`.1Sv+Pv \Ɂ@K8Z)c]q nU}|K^|`댟_Ք71F㾃ϗˑ@K/Ύ_Jڗ?/7_$,ڰiܣ$s Z2㣏wHOMGp3t)hȗVf'F4:`˩WreEp=BqBO:*SǗՙ =&!(rx˞nz" z\FGq,O0q<=*22E뎝#4Fk{}T9;&@IDAT> N.I1=2 @/{tc#ȟjȨgTK;+ }J3 N ,7|6c ⭷xy[rV`ǰێ93&q [^*g1O1WG߀vjvwU\C)*H&G1Z<pBf/|3B1|UwbiHvc.c`ux>s8:2\ep:ݧWE]0$2ku$r'KA++£:@ee7ӎӲJ4o4 qH^ǎ`h-M^L3Xw'Sj4\pA`SmI2 b1 QqYQ¿{Pc~`g/ KAڞ~[W&˘fAS>H۔ Y?L g7 7zez)tU8-?η_}z)S?111px+X= x@WY,K}v 8f98ʯPT5CS ]ľ~oh8GhcqQyznY}OP}[v0#CIOD!O:-w<4y~jiOvr=*,\]LN]]0`u) vAC\­apf22/˫}&H(N\1 .VFd4ŋxyzD@ YcLBO\,Q[O .@O<,@GNMG15GEp3ց@zh\fSiit-[䪱[񚄵2b<c6<լ{[J*XHD颏 :Ï-o%v]eyOXo~nYR}ԗ+ K 5e0B:w2}6 %ɃU87pC<Ɨ_m ܵӹc43 [NG'pEeTBIP=)@w2Wam.o!Bt%€z+B0rXv^_.ZӁY O? 8@ n /24r% gg򖷼nbÇƠ\GYٶv3S|Nf3+5B4a>Yby xY<},;Z0b  >CQdq~HV]KrK~B׼ywż[}TnA`W0Dop:Z}hY^[̪+8O\C6Du# MխifX'֋Q8:X0[l<-h!\;@4XV 5嵣&/W>a o< e"@ZG I?ɏ/O{ -3z{P rG>zK dϞr~9z֓nw.2ZaL:  `2}}?ZҙGd=20(#' .-6 v^ٲm=>{}r±#C{՟v K7\$_t@6\σ t|6|V]!_G gcBI|@GmIahX@zɒ\b07^3R2AȨ(%7N/'4͂*5Joz `0[gpr4bTW Ѭ1CSFߵX`̗0n_"7p.cp1%SO[&(s=ZD-vgp@|s[Ƞ Xy^yv P2?O:d 2,uJ*PuFs]K֔L:=9?"$[v;e!مF_{H;O}5m:q¼/ Y"/J،E ^<} ٟV5e]Vx{xÌӇfxOv$ y4vi=D4NG"Lk]q}&3zeϦ1 R kfwYu;6)tqٶ{>}(㤷1];Z@5A]WD9eN\ػGzp/? N~9Zz3`jbDFW\Ux WcGӖ`Bؒۉgm[?$;]7љN޻}v#(#a|]r{Ԗ VjP &p -ϸ s~HǤEo/M|ϱu4`;I{W?.YX\,ӣV}7ALW 4?-ӗc" C[GtsAٺmlߵWvcaQ8rp\CF~8 'Ov>DrtCu˙ž KIKx1@x?EB34[qC7.c! +9b S]Sޜ 2z(TQ>G{ɢN邼edy#<c[%M6 L ӟU6S̊ zX8 >И0  ..@Ǐߓ!oأ¢8mbo(`e*7}#s 5idjq[v!{LSausH5rJvIW:jK[v<%3%?xiaNfFuqG˚kooݭ;v``T(F= c kA0 |E^T$eyvxL{pp0㥰JKqK^y dVw3| n`ZA>@_QaM?˦g=.O?ؐB5s2?6,8*&]`vcJw& ZSOىK23Q {EUe. Ge46F4\8${>('ŨuGq0dI5EyYDp['B-sFq/v͸r'aZP|\z 'wxq06V-ȑYAR<2M:s֡:ffUVo/1|?ex ̻zsH*jց@0+ 0wӹv8oWbƂ1,m1i5m^Z:jǘǥ$O/XjjbLjs.Sݽa(F؄P$) cxLe= 4Zq1&?5DZD cErx9>!_3O>`t35_@TZi@xf C'EK-m1Ly2K;P}jeB[O9e_tHo-i]d3ץ2ƨN8qV&:8dg'?=5W5L OL.6BMLk98 0+㥎^Y"zmnDڇчeiQ =K27/𩉫6@1y&HcGy?> N \ЈK~X@>Q z ?yo!]ݿOaˆ¾}~8:=y_/w S!1]WHXN82QA˭еKMIC}Ƒ)ӕ[?ka=E0x=y}?iT~.kb?WBGZbGPAYF[~tY4W-4Iz 0 -o1q/VK][easZ{I]/R阽-x)Y= X 7?u9[T,)ng \3/P9 XA]90g .#Ѓt\И wP?Wz>;х}҅NL ˨j-_K;r\qGOTMm!M"`jd2XkGO߂7<=@X@k]a `#u\?U< Eaq"6h Vp_ba:"_k,SN5$,b-Ǥ{&[owpbu {MmY}“0 Wdv CWPsU%pBWw.j:(tg! _ܳeS6+a}rJC;qCj( n-IPGa(#;HBQ5.x{5`&+iγZg_XF-iejt`Q;bb9yP!7"^*ކ8Wfsqo0򝉠XYyQYӰmQ$|ۍ78@eR8G2tZބ&EکEK"{_>ޤ}Fˆ#~xR&0 v L=zL+s~eC PQzor]85u gzR4xM{HΠ2W>ʝ·Q.`<-\p`N6by cG=D=5oAPj/S^uL>e ?"+xxFO+hX,]f*!;ܦۥsNup o|Ri+1L0a],\:Be0Lw &l!C^T{q2Q? P`ʨU =,K  eL?PXS"o(|lDSQ@w-s0F/\6`%<| y|%{Y? 8 (SvQJFAVɸ4\π@Ǹ!NJ7,p# ft&$B|[{|D@ߦ|\`xg"pM]}_0.]+b@+1X`0A-o0-t2-?p@2t {honNT]yw[7Ŷ\QD}|(Fm~L'OP8!~ ѡԸ/Xyr,U)P?tDn`,fD۳|xjC s8I.>Z~k8=3s匝;w=҈߮+ccGaaHc[: \Xi;p4 x5X+;#̌WM)auVThLQY{;3f>i+$-m//^e4o LFg.UI[0򕈰^i%ӿоBcTnp+wE i( 6r,`-g-3% nԇ}Bms1q bF.d|BGv=BFQBkt3U˕n?'vR]9c+ w/y}CL_!E@R88+O8 DKC+v/}#(F,"G=։6p\W=>¡̌q*3>)>4)jg c|$R]Iȼt@ ncG Ո7vYN7)"ױ8x`]/J A@ hGh(O .x ~8[NZB8:uzcPŚ&u$v`LlB(`d|J((pGJǰ 6p|)=sJ(*<NtA.9]Y?S\̘]9Py{:Erl™;qSkp #'5r k0\=Sy.Lۃu_wT>XP)"vqF"ij-0 Iɒۦ;q v>I7MbDan ¡CP(iX@V>\ix+2hƣ5¤5@_w`VCdFLkP\OMλ-:[Bx[$rRG,lYeNK`KFΏc0FƱA-u.ft\OcڀW@хj7O|b| P[$(/OG >xh܂wˆDb0(ff WB֬&Ξ[&M5qLub gt_27yeΖNAƎCAOl ]483-DĬ`^# =1·EV~{̇{JT։Favl){0pHy} |W3KȨCW:q5 3m^i? 4pds@Dtu-pB~lrbYta k16I(':ګ=\ 9Ud_O٪;oW+ j{v+Xtp'a2͏a_8j lA Gq-U%ݮ̇(pF<~IOl$e7d N%Ճk1UĴ~_鿔i8:zAc^W9^p9//7e,U2+ͯ`ƍ!LmۖE#/7qCr7}xHy|GWp#c_;d5+s1| LC zYPA_J"8m0ƫ1BM`m$79)$ LWS+^B,m^q)`*/^l[h- ?vťF99t4j5S𬈫Zq8 .(/^3Az$|S$[kԤZ.[Mzu-۵y7v>ӥp匝%:]ҝp>|͆eB{ןX|HgPa'j=GextB?eup+ '[0yf8`yef eʔ ^FsÇ"%Zei\oCO|4\[뭯`(  b#/r#W~ն0 t =G![? \Ss4D!0Xx4q Q,锑KKy `ұp7?vƔ T gGWZB!ô/7/K#0ݤe4P oYC2Y>ՄˊVj,t[DxvCa / caF‡w<`}<N=HkNPɾ̗mtHΌpSu9]혞߁:U3?#Ʊc. +#ex߶,һ9Z՘;lķŊٟWe[iae* M)^(zZ !y֒]QP>0K;Fa[zC5nlŭl ncBWwOt >tbQcVcX 9fI>պ~.N y"ӗ +m'~eIMe;keᖷ</ݾH$,'Qֲ-C^* /h .]l=ߏ푸.d .F##4;^zB5r[#y$s+L\U<QF ն·Y"9?q[$Z:*}N|?WC7xۯC=n2Wp#@qklbZڗ .ym'?5`?ZJ:Z ^ى_ JJȥ]ϕ]!]N=t/0`[#QS#=穑u,"+Q^f]H\Auj(lw湇=uH^hA"vc-]GhVyC"PTqQCnmf((_% h|J un&nVIGԆFPr^#ό/_Șnl{M01P{:^*&M`4W7Ō4HnPXbEnΥYxz=M[Kk>/pU|U~ ;['z[9vN R뭦.2 'kr>`LO!i i`u5`?Z\{aV(zQnQe*۷^=!1 K5Ҽ% JvҌ˚Rl3 Da,  6i ⤁g[&BS2fx[/X]VϢf#2(^6W7OF R[Ȩ[#Շwqj$|(0#.0|Pfe=㼇qR.HFl! s3hEl ·FnۺGz6mNόɧdI +8ml<=u.C0=z'8~pYf4/EM„Ν;s#p<:K餁@OHԆCE *at̾Cd*iW#yVK]x2C[# @#Ζ'@(,f(`, hȜ.:XZyKXNZy]5X6Tg7nr!n(fE3[UaV0 r("{j``K؀XyrT( |(L‡I3c1#3 ɑonE h41:Ks2?Ś~I}k􉹾8aބ8dT:/EmaE"X̵m`` wlIO Z-.HkS^#plƦJ[ڵIoWF\A6OPX3-w;&/̽u5=*f[M1a2r}Ti08ϸE07f[Yv)O^_cj;ƦFB"ҋ=Ev ]a ObDA]Ш;Fa&pp3NPT7ɕC8ߏCw]'#K'" oVM|%+.G qY'^\yKXb1^t}_L)NHhI Zkk.jFC+,R%{_ p!c 8SK8җ؝ͱt,A*`oFE)poa_*=pepӸ^ GTae`D3/ꁇ)]J68EB@@Ԁꑾ]*4Yu@4$64rJoL}_g{v׮]=ϟbiP=mzֳQLWj(FkTj_MtF0e,7R0e!^Sf rry"O,0TIJ' $ $ h |JxZMgWW t}~Ch&$c8A 7kt 0]ǣ)5b IIIIu\<%Q 4+i`"wq [-21o25ja,P&plVˡvK*#IHH(zU*o Tul&`:r5sUie˜,/J] \b a :29[[V$j q> r[' !BNHHHx:hZ1oJVT#caea ap8`< 7|A@@@D&rl>b™ceЂUA&D(l[__sp胁S)$ $ $ $ $ <40vY_y8.7J/e QyYl<,x՘*R44444]0>a}i2-G!5L` fo<D]$i i i i i`]i `eَ}j6r%@,-apc3ٜ+i i i i i5}0l+H'-f,m52f\P9 bVMܘqJ^ze7'EF⤁uq^rOZ2<< @ Z"x+ҹθy@` ۱cG{$=fw.+"()JeR=99)|4VQN=uՃSO]4*w<kmnXLڕjQ-FUae!jWZ Ьn=76/tW'((Qx#@5F,ɧ?iyի^UFIIIIIR\p\¾V++aW ^ X,VIz!,~+%K /~ǭ+3 N|K[;@X!| _,GS&i i i i i`#jɓV⾓VGz J nq q8 r]w^2ٿ5T444445p(+K]KxuE@ÒKuYXX=wy`? `|n\1 7d.y+mϬx8hp`PM$ $ $ $ T@i 4Xܶ9AḌ0 yrZ #//<'/ t@OO.rSQ@@@U@rdhܵx|r'Ev!-"Go7cALG.F#n/w}Y.(?s҉aAX)$ $ $ $ ZH 諹Ī[`㛋ߔOmaܾUZvߌЃ @gl70矀0}G oz9Ԓ2IIII%h)_qY"w˂9v#KW%K;|? ݳΟhpJ#݈;Q12ٯȍ7흷)fe6[0ѱbΕC Etxvb]'?._8QN=Ѝp IIIIð$k)X)?]/} M?9oW&|!1Z| fzvL ^7_Gu=/'"eH^s*IV -e󏿞[IYd=8(&t]G6Ӷ]ŔA2'jf98 ^7ڿ/'br)4444pU4 *jdQp܋fίy>mw``hn  =0"!poFgaڑ⤁@KZS=qQZlu?;re{[`x;`hKˈp`/b L׌LMʖv,,zaЌLHHPGb+35e :~> {X7/qi[n< ,1tG2C1ցՅAX: IIIIkdrs<mGOO>v6 qm Xޏ0aY׎p / #i@U$ $ $ j rz mK<͢E~ي~wֆ~F%0(8Jut4kNkgNh4(#%ZDi ʍ(ZDW劸.ó}C=N~:`p\ c .\Xq?; palY_vIII-4PFP9{z2FOpn܊q.N. N~?G?5#8g zGa=ڟ⤁dT}On]zĴ|wRd F9  tg&P^~j2ZCՖw/C+oc@~GSp?Nc Zaq _pȌ?.ӌX4B:喤T@@@cקZ>x2Ӎ^e|_v?rmYy&l@@@UVzW_j[YV+ kEU-E៕̽F>c3+:vPǐI2Qo /i i i i`em?Ԣβʭ2RJ R(0,oey5ֱ>cؾZ'UI~O㻼VWC-.@iԌ@AϺŠ5:9T ĉz$v84 ⤁xjMc IW T E0O$l*b¸`[ݻWv-}}B@@@@@kk`jjJΝ;'O֭|X9 }gV8J  R7^TgϞ^ui^%+v^ܲiz, _+]dWֿP4,Ϙ,f.pd 1Mvӽ⪾nt{>KX IIIIIOk `; ZtϘ GĩX4Wp JG FYۿ7 4 RHHHHHxZjG#F(@Iuce1}݇D1Ϙ-f@n$/|-a֭B@@@@@5 {>~x18';8ˆ-)tp?o_qmx۶m0Q| SHHHHHX7S w}?ɟɧ!u᰿m1[_6`E9XYg:r:~8 aL(ob`  ⤁F48AhyvsL5։ۼuqvkyNb>`u[lPDò2ѥ8i i i i i`RB8vYoa'c8O700T1bbb+g n2"s ԭ&-ˍ7Lx" q)NHHHHGk`y.|Q_zM~r+1 SD9[Yۈ=Xߊڜ\5LчK?U T*P>K9k3>yzs=wv=f~ 楸(9_´E[t?~ N0HY+V*P@HS%uz\3m̿ wΈ^.ŝ^fļ8/)kh ȬOO΁l0Υ֨U T*uyY ƳC1D#Opq r|+}|19Gg%U T*P*%_{Ӹ.:Ϗθ9ή`:%49 /Q9/gŭQ@Ui&BY ^%]x\CC@OGy9=͝t/Dž5 s؏h"`̑šnX@U@ff99>Ep =+?c-u?PL4\^ yx!^M?QEg9_>CU T*PT }\bDM\SH 1N(Oi}0,"ȚKw#|6&7@U <o\2QpPYVZ}q0@Lk.A_ {읁fS'GMQ@U 6r=NKĿ둻df΅Xg|0HǃYsUCG Yso~ɷ҇FU T+ ̼}׈65rs3ξ|3W@3#N5뚿#J"g>~4U T*P^Q@cܜ< Ϝ3=۵炄şw?rk\&a/"~O?9ρA^@U \Q@ϲWbmMc Ç淖=Xaz3afMN(~93|qk~gPkT*P@c.q4o/ rcrc_j./Gke'7癉m#fG T*Pzy4prͭAx ̓ɹWs79x T*Pg)+ON+`Cr@gY?p"&OXW9k Z',*P@Hǜkpr#?X'X1ˍ=,r'rp5?"=3$gxbU T; ̌ 3=i#gq>yZ\$uLO8Dg\'gU T &gk05,O.?n8ߵx?|(W{w}c8{w]@UGy䜽2앳'9U->Wr?kr\6r_b\}+U T*+k͉7ywM@'jXs="əw=c*P@wXm#r.9gH޷U}YE7\u_J*P@*0fcl?kh64]5Z5$^*P@+n$g(]VW啙%%f9k{U T*PU`4YO撻&^0]e-K FuY@HW 7&[ղj_Y6g_K_[ bU z+=)wI=KX@U/)pZa}gϻ,^@UW+&p<8-V*P@b/)5+U T*pGo3e{4W@?_}*P@U T*P@U T*P@U T*P@U T*P@U T*P@U T*P@Z6ȨVlIENDB`ic12%PNG  IHDR@@iq AiCCPICC ProfileH wTSϽ7" %z ;HQIP&vDF)VdTG"cE b PQDE݌k 5ޚYg}׺PtX4X\XffGD=HƳ.d,P&s"7C$ E6<~&S2)212 "įl+ɘ&Y4Pޚ%ᣌ\%g|eTI(L0_&l2E9r9hxgIbטifSb1+MxL 0oE%YmhYh~S=zU&ϞAYl/$ZUm@O ޜl^ ' lsk.+7oʿ9V;?#I3eE妧KD d9i,UQ h A1vjpԁzN6p\W p G@ K0ށiABZyCAP8C@&*CP=#t] 4}a ٰ;GDxJ>,_“@FXDBX$!k"EHqaYbVabJ0՘cVL6f3bձX'?v 6-V``[a;p~\2n5׌ &x*sb|! ߏƿ' Zk! $l$T4QOt"y\b)AI&NI$R$)TIj"]&=&!:dGrY@^O$ _%?P(&OJEBN9J@y@yCR nXZOD}J}/G3ɭk{%Oחw_.'_!JQ@SVF=IEbbbb5Q%O@%!BӥyҸM:e0G7ӓ e%e[(R0`3R46i^)*n*|"fLUo՝mO0j&jajj.ϧwϝ_4갺zj=U45nɚ4ǴhZ ZZ^0Tf%9->ݫ=cXgN].[7A\SwBOK/X/_Q>QG[ `Aaac#*Z;8cq>[&IIMST`ϴ kh&45ǢYYF֠9<|y+ =X_,,S-,Y)YXmĚk]c}džjcΦ浭-v};]N"&1=xtv(}'{'IߝY) Σ -rqr.d._xpUەZM׍vm=+KGǔ ^WWbj>:>>>v}/avO8 FV> 2 u/_$\BCv< 5 ]s.,4&yUx~xw-bEDCĻHGKwFGEGME{EEKX,YFZ ={$vrK .3\rϮ_Yq*©L_wד+]eD]cIIIOAu_䩔)3ѩiB%a+]3='/40CiU@ёL(sYfLH$%Y jgGeQn~5f5wugv5k֮\۹Nw]m mHFˍenQQ`hBBQ-[lllfjۗ"^bO%ܒY}WwvwXbY^Ю]WVa[q`id2JjGէ{׿m>PkAma꺿g_DHGGu;776ƱqoC{P38!9 ҝˁ^r۽Ug9];}}_~imp㭎}]/}.{^=}^?z8hc' O*?f`ϳgC/Oϩ+FFGGόzˌㅿ)ѫ~wgbk?Jި9mdwi獵ޫ?cǑOO?w| x&mf2:Y~ pHYs%%IR$NIDATx[ t\yf4#Feɒw/`\b )$!&$aq)&@! !)IJ !Ò $$bRb86d4O<1%{t}{}I?'y}sq@McǎEF5X8Z[9h.S#Syε+ڢNXv^P` 1@ wu׬Etv]quyLOqB7mNswWe&SYYhf]}Yʀ;іe1`M+zVk6 ޽h?7ipbӰҨ1`3Xf+cO:CJ7;y!+aMx$Nw ƚbbbv} 2߬<>3ØPT8ufzzؚ抲.7@ʧ`4ɕg O#4TkjC։z)Q'o1MF{]a*DDJ&NZd3Bg0l לjllAYQ[jBC-&Oh<<^{rW^ Bt\-cВPxsFī 6~߾J4ڎlrGf'OcS Ҳxdq0T WPTH=YٰnP܉-[{ِ^^8s~D&… ]JO.J]:bMe(TJYd*Q~|c#XB}HYVvqma_4>mZlJ<#O, 5φ Ew) E NSWBr YC\,qLz\nP hjjj|;m%3 >uР^^UHMF&$qJ`2B235v`28rsMM'1㪓3R$0t:uoGu% ,@EתS; Z"a4Th_?WZF6:6 tn2 y B oPzY8-'d}ʰ-.47ymi&0 W8 sX=+4AX M[V>z)~X< ah|R_&V976+yvx쎗q>OaZuyX7nV4QRj3F[!6K0j088QēDIx2aXu$pNcA05V@H<`Wp~lѭx`t\ߌKnܦ _jd5`t̏q_}E8Nk:(k*UqZ#3yE͹ 8]^F/o ֱDBAYQĢUD$-3P㙡,bi<IڄlAP[[&OIIO^[i'B#A߂P:UHSu.2Y}oP Q"ZD]JRqHHI誈$885EwۇcGD"$U`1"/?n%t WEU٭Es3š* ϙOjq@^JGKƬO\vjExE,W[nb iٟbTK9ҿ+ jH몪d&B XΚZ̞- )%(%4/~cN$#O,J/UW >E&hӽ'/<V2߼iQ6V-"B<TQz'hkFP;30% e\_#8\>F+Ćnŝm5IW(.Q7h˫vxM-VXC3s~"F_[*VDU$x|˒ y]iZdd87 Xl;fUq:Fb# [>29B7It`%`Wl96ʾBWeBpYs۟zвd]d'  g 22pTަt͙F}!B1ڂ(ЪS0`@.TL&GlFIff2W+G~` vEFdeKK Rnw<#2c^2@SE* +x^Ϟ2Pa;_đF  h73`AG1ӄKR(0iy&C.!"`V^_;s|3z Vr]a 6,jhDBlZ1@`BHچ@v&)Λ !(8  (a)9~06D\$?2)ZwJ$GB{欃cPxFQd2ZIщ_~:\sZ zK@&Q8 =%P1ry"~3ta b=D&H02L<-RABaW>G̳͓zg+T0^LRñs9f>:I>Alz$ɉ=/ϹXA` ~*P`L(̨Y{'Tyq TSuV%~f|DQJѰ18kn4 3"$$"$JҔ 574szWNeLL> =@O& jq2kT2 UqāuL)cW\1>@EњGF/D$>1zRb(ڲa.6gǍ #P{u*.bU b3xO٣e9# ̎:$}|A~9DC~vG>wBjvj*ϑ5y9ĻUJPV,4 rwK!y0yE1fltCTM8!!Q&P$sp-8"_$zVR`7a*Q!Ưɀ]WsB,VQ v(6@JʠhzwB)LngVӱ>q@PCA8M$rq4y.D9$&6p5RݢWL}e\EKr" Ͼo9$q]p W/\Wx &li Ў8WF2!/+{yꑑ#wo0+VExMBSG5'%zH8h0NJDRڨ)Ǚ+QO @ ~dO$ 4+ppʔT;ٿ KN]19$@v\$P|H^%G5:tz̩B):͎ZpU2p@(܇8ad̉S*ׯ]J WATvIH/a21N=}^(:;Tl X_ -Q6lU%ysYĽ?I5v<*$*&n+J ^ݚ5kFR j3rysgU9>\AApɒvJLq()H i D41z?UXk<@˧r Y\̜Ӝ" Rb砩m6@!v^壸"JFx-V)K$eҝviu/;  B6A 2؈M6aÆ 8Ӌ=}&1X! ñn%b +/Y"}ZpE>{v>Ee|Q|_[cam}F*M\o}Fl ;~Mr&É t W1@ CKO]`#1rehnIPG7ggbbЂNNI)T\KdašwHQ(tysW+71@X#^ڮyK`jٵSI#C5:ny "CI?ifO ( %@KT3ڲeHB~GGG.=Ez+{N#0樦QnƂFF{v/n0@~w6A⪖(7S~pؼ,ץ$HYF z yڲPLV 0:Άp򖘕a컽bH"jv M)&)2b} :A\ڍ{/bE#!;_X|%@b!͐i )n,^hks‹/w.7֣4=eUfDMX Iij֭׫s%:z())E_ay |C$ /G~p;нyrْaq;| ]N{>k8#4&h Rꌳ&0@&ݽ]]]kp=(ɒzOu%;,[dFka!nZjZܢ|dif͚}3TJzdžGv^XW]E1#:= Ld\-_v*DhD BM€gta)OG5"MVs=7tV^ƓhqBS\wqljeԢD(K?o}mVו ?QUlg42ڨ@Ř=bLsI\Z+T* @5aZYTJ{uQbbf[rHIh; d@U.0g+Ef[͘يTXr|H0@Z VŃ2>=6 4W'6JԱRmss3.BznJeRR M>c_jS0gpuIQ$v_T=pzilB׋3Z 옉y3TWVx /U-O\$@1Tc[Ta*q **}}}5X*_Cn>r!f'>B*@"" s{ߊnjĽ`R6 )"gq:8WQkhlD[[ Z1 sgP*RKi7bhz,5[FfGd3lI*lRpuA*Z֗" k=UDEtC(`J1'Nd" "oC7âdasz/@*5]mMX2 ⩏)`n19JEG{{{c;lvzJB{ZX;yt20߬96 KwH?vc-1KC$*K41b&<ͨ#FǸ=yMj*GGGDŽܠIa#[r)3Hg2/w/{`(A})1[T>z(U# 3Jc3?6Ѐ GR Yus1(%D,tRvR `+f?r:QI*hkPd DK;l۔)"L YjNmt=qM9$`\LS0rd VvW's hz~xƎ}PRLn|v]yKCPTxvV>==?*+&0`_W5X|'aSAWXUL9MUdzao&Tϼd6$@Sp| X{r=ܲwŽq_OZCh, >XbK? k qoR5CsYDL`ʍ{ԹpqmOq^l|T@>ghX_VIENDB`ic07XPNG  IHDR>a AiCCPICC ProfileH wTSϽ7" %z ;HQIP&vDF)VdTG"cE b PQDE݌k 5ޚYg}׺PtX4X\XffGD=HƳ.d,P&s"7C$ E6<~&S2)212 "įl+ɘ&Y4Pޚ%ᣌ\%g|eTI(L0_&l2E9r9hxgIbטifSb1+MxL 0oE%YmhYh~S=zU&ϞAYl/$ZUm@O ޜl^ ' lsk.+7oʿ9V;?#I3eE妧KD d9i,UQ h A1vjpԁzN6p\W p G@ K0ށiABZyCAP8C@&*CP=#t] 4}a ٰ;GDxJ>,_“@FXDBX$!k"EHqaYbVabJ0՘cVL6f3bձX'?v 6-V``[a;p~\2n5׌ &x*sb|! ߏƿ' Zk! $l$T4QOt"y\b)AI&NI$R$)TIj"]&=&!:dGrY@^O$ _%?P(&OJEBN9J@y@yCR nXZOD}J}/G3ɭk{%Oחw_.'_!JQ@SVF=IEbbbb5Q%O@%!BӥyҸM:e0G7ӓ e%e[(R0`3R46i^)*n*|"fLUo՝mO0j&jajj.ϧwϝ_4갺zj=U45nɚ4ǴhZ ZZ^0Tf%9->ݫ=cXgN].[7A\SwBOK/X/_Q>QG[ `Aaac#*Z;8cq>[&IIMST`ϴ kh&45ǢYYF֠9<|y+ =X_,,S-,Y)YXmĚk]c}džjcΦ浭-v};]N"&1=xtv(}'{'IߝY) Σ -rqr.d._xpUەZM׍vm=+KGǔ ^WWbj>:>>>v}/avO8 FV> 2 u/_$\BCv< 5 ]s.,4&yUx~xw-bEDCĻHGKwFGEGME{EEKX,YFZ ={$vrK .3\rϮ_Yq*©L_wד+]eD]cIIIOAu_䩔)3ѩiB%a+]3='/40CiU@ёL(sYfLH$%Y jgGeQn~5f5wugv5k֮\۹Nw]m mHFˍenQQ`hBBQ-[lllfjۗ"^bO%ܒY}WwvwXbY^Ю]WVa[q`id2JjGէ{׿m>PkAma꺿g_DHGGu;776ƱqoC{P38!9 ҝˁ^r۽Ug9];}}_~imp㭎}]/}.{^=}^?z8hc' O*?f`ϳgC/Oϩ+FFGGόzˌㅿ)ѫ~wgbk?Jި9mdwi獵ޫ?cǑOO?w| x&mf2:Y~ pHYs  @IDATx} \E}}d&;-"aqEP_񡨨 (OT@V@@@HH32=3={힞ş;g֭[ΩSN+2-0-y^*mL1oqySjO>}"䣟΍T  3D&&/ѡPhI, .K$NMgǚ~rzʣҧƏt'2 \~?X$Y~Ǯm6i1A&10G}tvYz=`q`oޮlZ$6l#zHq/#v>; wGg$\r}/@8ZK2%pU=6YC$La^h )OUqBd7BI0db̪h PW0*N&4{;(p a00Z@enw!i3JW T ?J^h@1%'CC^$#Է1yzKH<% (&Jq8@?¤Q5Xej-H uU]LD -<_iAOz$탋JHSeaY@\fa)%z{~oo\b$ D! ~k8.Y!P+OO͔_&ސ-.+%@ PHB"!pF0* dޱaBKŁXdI8^t{%ey y@"P#d`~/ 8$", @gM_сE9H?ްG'iY8E8zql" RZՕyRV#YA Έ,[J~qE2'7}Lϸ(&E:z셅24h@\ o{0:ގJ ջ[q ƀ@ "ÈH hNm>:}>oW )Za1}Pp $ \zZFZ^^AyRV#9YRZ$H&;oo~n}av~)k/8]ּ<Ւ{a}~@.L'^c!}gNW[[--L/:kϥ4"1^#x@_=@pL= `8z>؂\̀",2gQAT~@ɝI0|MvIw< 4Ə ;o޼R 6OR+!N9/ʵW]"=jI}" { Bk`Zg/ 0.#y {o'|Tټu̞6// /Ihڇ2'p\L>zL  4L<5}k^ lo0W~g傥Ǽm  E|Roidwq)>l7D"Է56uJmuO(E툃* *0 d j6+)))b 'IaO"^uۆ|"c>Y;* >po8l"sH|};0 MS߄a† (y ިQY;Svp VZZZ#HzSFi(̛W%ˁlZMo^`iA<^ń݈Wn\!Y)53D`ͨ@^3D6 rJ1*Lmڵ qO@g 5-!999E\SPA'8Bfq lj둫 L>G2& ǑOp3  ҄Mf0V0Hw">p*Vti^!)g~,# ggOն%%yiX ++$VyL0`ʼxDvxY [ۥSiDGl@KS<*m2BxL\ą$'3(,̅ d]rOї'zPçCMؤS{)IVND DF> |N ݆GJaU^umr4i.wL>!wwxbz~, g H8 ҂GBΙ3'O2\ *lillTϱB9BC !$q1cE5(ìiHE?|`^ȓ_V~OT:6[d) $ {۽Q"mib۰U=h+lMnDȅb io>?\+,~B9MB.)ĺ!]`90s͛7sl0x?"X dxXigH{o8Z; cRΉtwճu5D 4yO{qmμpkB1Ӭ0(9j}vdppB%Cr, ,B9 YfޯȧG}LsӚ?CAgWhX ]`h'ٳgv&F\ F"wA yb>Ԁ?֥PVa)= M枉Cэy5Hf XpF^`"ӇC=A8*^~XG̷ZʐS>p,{o}3>%eHD@ ׊x;i:׿U|%~ AGWX&j2L Np ?o)'40A"ؽkک [8 pf 3 aoF}:[ k=gq2sgddJ6xȰXA4s5?ȕW|V= yZ+k]i`g|D/}O" HJ+ԆC}Tԁ1T}1KN~M”낲p F@8vfq N@G`n!D!#XRYpG3/&Wc\ıȎMogvǙvqr.O{` 1z#x204sPZ7=a6'8;o|W[?n6!E'߿Y>ɒ'Wk4y(Gsx!8aTVӂ_/TP64l7%g'M}pف%Rx:/SX +G 6xe:bh20rUehe^>{~8A ׇA,t@\P&AKYi}!#:Λ&k׬v9K$* .zur/+nHzA7H* xࡇ!Lfʧͤ \aId$z?03V(X>TS5A>ٹFK,j ёjD/$U^Ss ^x!omm -t^Jb06i|8܃ִX$EF'OaYDP0+;&&D?oIa률Zr7pY$~N.ncn2}) 0OBnxUWX>Kڵ^nُ{/Pr;iʁSš Nv(Pi:StЅfRa"+bh'Ч:@! _fbCo-.-S؏/|agؽ^-BE)GzEC䘪3ҷSA>u}ߔ~_r@K9S%>)S(fD~aGWQ: x)%}4J VefՄV1֐0`fS(LH^HY d%"Ikmm] tc&Џ0 .h_? P =8"VGUqƤTy20t #>';S-–0(_&k*˗MYt{e͊gd#wq,xZp` ּ./X._Nq_{:KBP}QLbPbý,ʊ lPHaX+:u W 6U ظo䀝X"=@zoF0X&PȪ^<\^W pDM=@eB-ޒ /;S~w?,'~kp Wg~JOr{ӕA~Jwڒg~#|Q&VV‰`8+ID 5hK(rbpy @g4Œb}(u9v"WȜy:>30)׍֝84smc:az 0\x= orZ$ʡWd$L;1_h\$<{yOi&`%`+j:(ZO"@_:|i\bҙ4$|K X8`P`vZ*cL `Aĸwԩ]ѐV7>&kzW1b͸L=,kdka !0p61k  jXze|HK`JN>?h?vXm۷S OK?Rn/'WƢ\&kDځU25](#\}teC*1*ۈV#i3exBqrzA[ĮhL>EÍ|v.a:K VQCra~gO]<X"L$`:Y>d`Y`p`l׀Z@ :ř頉}ChֺHaeyA~nN\x[$r85Ԁv?Vy r) wO"'1p$u@/Ɯ.YKT 3)S| X#qf4N9@1Kxj^KKR5kL>G{Ţ ObxYwC8D @=顉^'G0P}7v0S #<@> A<@!s{?*!g%Yin*E~B"~(9 S%ƋɎ/H$qL)-0K!W-oUx"Wwµ 8iޟ D5 ,.MJICirzBE+nN"wD68/`^p(@ ?`Y62!sMvV1\=:attU~D4Jl22ȧr])?;,})ۂ.(nUX1e|K$kGcq:opQi/߉ ( ݒL I`eD  :Rj].5p*I@OG).*dRWWL<, / m Fmyص\|U1:[ CsCʀͲ1fJ)"0p[w,U [(rHu^̝>Qf[$[֯gşc_'jS/"4""AaU=T uX@v|݉~K%^ KKk #+aӮS3N(D<J.Lx ,u2a(Utb᪘)Gfȟտ.;VI2/yF`ɧ.Pm/(+3@U1  >s+nu5q.RV0t`7lo _.+Ȱx3r$OENGha~#'qU5iCBM-q"Fj BT9gA,AKz-jXa!@E } "J$6rtx`}erHw;<.ٰ^1vjm퍛U}Rƹ w#72XdZ!'8gkOGtfrÄY S/p(P/X/'Awv5g$`b@8md.>y-[a ]0h N|T6"yɎ9sV u,|qt\qspFii3~94|'A\%7ANVT%:y;/ sRVAA T0H̘εInG|YY]B`J&GC@ {`Byܒl+<) ̖ge`$;^ !(} EN ]{8<ZN!!qߋiG.`"߄^_;޼Ovn69lɆ:>f4-oqLSS=Q5!-t~&ןq&dGv70ہjL ةLalذta,+ann`hѴg80iLnt LFg'4am{ڶ_uPˌ:-fn@{̖ؑZjZhH͏{C.sg YL_x#Ͱ,Ô6 6}s%wRp׻71ԙ1>@6[U,:3Ra:}7xftuO h i,'KT6ߪ#|W5{G0$!;7OjKc;X8,r; \{ ־?qdgRԓ> &Fj#5gF&.Db[Hrĉnίy__岟ҚP&e^.&++U4,XW.- +k"@#?$9֟775IkKHGwwCׅEa,,y{X:M5n<9PBKV")=0(H+h`FlxAlDBr܈yƚ d$zZ#3*[Bdn c5*MRPWPm%RjiNȲS]W> w,E٠Y 04h {pOԙEǶȟ|DBoA|[ܧa80УՕ[_Frr`J3~TɱٖA(t4 GLPZ@P586 ;+^[)_^A b;Y9qYsW~9{Ej7`dBzs-oV dTk^ HioT4N_x+lpzּj&A |+кoUޭ+OA>S:\)I>iʄLM\X;% DU=n@&%0053ұ@k?L:DC7f X<='ʼbUgaȩ_ts) =qxs%`LtgxaqC ts TZIT1hfe罸m[b˖Wm K_=P Jy}Sr%*'TOuRWq5r{>,AX*icxd100Oȅ&Y QxX7}I@^W`fBjjjjr,=vҼ;\p*&no.QOo/ G2M@dwX>ynx%P[vBcg/SrZrlνt{vBٹy<}rYFklUƱ N=RGF;9U~&DžAiLԪҮ O7qQ$kNxڬh7$ҋ%Y{ǝr`hz2_6gK sa]@5 R#zmbruUML@*X2Dˬ\/3>浛X%B2w%Un Hl攼I,D**k.j7,OM:kXn.4, 9䐒gyE]b70% dʔ)ŜY30*e͚ժ`q0[V@d jCM  =PӍp?L1UP03ai]>f Kl:e=~H,10q(@fET2xV|CSbzN-h5Ӓf@|7t-XD^_{P T̶Qg¶HƧ5L5555F`+}tmajKRA=YpQC;(tl?uRMzIwaNHP9Ό|B QtGb`$ eaK&p>׃%b3pO)Gg[^ >).^:6xq,Ask2t+})y46]܈SW{H}^Dj#wBRNc'U/mb'pYGǎ:8hA1j(w1Q, `ЁIFʃ\8YJ'cu)_tزĚ6C+{%5Jhaڊ+픚*->R 3tTБ7&p&tf,ҪS4-m߾UzjHCZNȚi1t*.#<Uƴ&1x!#p}_,´U,2r5nmp{uP D\ ?^$esޏb:YO4m5/TܗK.)+ҵ%fљuNtۤd<;唳>mq.O0\IDae9Ӫ5@v:tA` TYdfAOgI\l5[ 7X*[^UpZ(08V !{(Oc|9]䬀 $ |`VE|ؒ!Ǒ2Esj09nrчxDG3A~4|کҴO5r?DlxҐk8J^O&*hhpd"5@Tޕ Qы pdɒ$` F 6iQӉS>!\pzn7p¡^=IЋCWd{`c^Zu=֗EG_ CgK=W9\E2BΦ=Ӳv ң~ɭ:\<HHŁ^š_BҖď0|Xs.OK~+!zޭvt LDN(Z aHiea(0á}! )) 9({4:sn{Bc`NzJI;{WXk.+S]K== Q&(;h*O?@H@+D_ /AB5+'\$3k4=H7,aL0e"pRpL/, 4ʑǜc|r , (usd)9{=-|D@4K>yP,Ã0q'_#N*ϴ .:ZV+叏4uG9vb3^({AřS֞={8xW D]euk|~xe0a! z+ *`N3q64+(*L&. Cؿw47.hz`ϢdzS9 jgW˴#ȥWayԯf3BaV>7csvD[ " TM?Lja}jt][0-,m%=;/qA><0.0'>vua҉,XP ؃$q̒CID P''P *^|o1TP) CA!hAG'C![΀ø ,stW% LX"9g.I:6vHY9˕ 2|wrAK?{|{)sa5m7~SN?RD~0ƵCp6PfAM9v j d.@ZHj2N/jΒ|}E{ ~Ѹo?d /vtA&<ǀJNL5/0:=l,(pw1>z`*9ꃟ#ϸĕ-Xq!S&{wO]~bMg#^ avʫW?fNٹMΘ%۷lڵ7:VBYrݽ& +fer+y`%KdRl RKϾA+%I555 <~U&ݻ؋5cYZ;sv|$ҍ4VLOaqW@>zߔ3P#ٶw~MkU˗˴CX-Rw;m sdh}Xwb"}-O]it]2Q)]ĉ~upgңg* h Z7PXVRw rV% &LlKp, ddr9P*08s| sloi{;ƽҼBqrk9 }~VR@Gs K/ !lEkˡǏA:D}!LkO8<#]`_^9tQښk;7 (,,uC pY?O"4<qte ޝ4Zm1aY{.x Ե.'/WN0E.XKnԽ&L;,!ځPꤹ$ZtWuS;@e$"NR=J5سW 咥{O@i|qZӔKhKM?׫o8}Vӭ 6i- _d-+?Zf=Jp+PM evZD,aRPWLi@*!PGIU:]6X;U9pd9ԏ~QӾ t˿j Bib{1ݵCP(3R/_qɃ  # Y¦gB54Iaĝ/_.o+#5W˅\^}Uը r 5ɇGaʱ|0 ^hz[ ̒}i~駫3qƧRfUt$=K|L uyhY '`MMƝ`zt@oߐ A!U, ~Ig](7^+ϙ!KN?$%ȆlA:}7!(po[k0ﶭ[l}cPCHlq!}J08k֬M6Qa7H.-J9(y hi1:dx$P'sSnO8ۻDMv%۷n}h@3lyPPzU۱mq帓ϐ~RyɺP^/O=Cl$wn'gXَ! *k: -j؎#xn! .Ch\z ./4t!SF\\|*|N$A-,/ٺL6Ax˃ӽ- M{Q>/٦2(;i%Nڨ(Yb  :t {aTQذ[T9[?X䚪Ҵk" 1Zqfуme89L?zxd vng >!77P7*@ h8k)w!3fTD#訃dƏ!*ؑ҂Wt&@~H0_ N/'<ŃYٳ"kkkaA$˗/WyYgҥKełY-.^BCorGp=]c0}ïQr/ Ȁa&P7\~ ړFfCRUcMl6Mznr$D.~|r݈gQ<% V3CVģuL;t~آ ҳΆ[Zwڥ3}Вr?ftCm)TTXqCPupZY#"Yu$DBHRǾS?-JR69ja y)`/]dL2(xIU2f̘2QϮK55Ff ll8fW"@!$ vڄ@o$0-e~mEG9>zudZxaJ`|;0\j&[z jniʏ Yb胵M7xffLd[2ɂuAqZIU2`TʬR5a;CJ&&& 2KtqiH&]m_v Etl8$UBi)!Ml47p =HChNr#0\E:5&u <5?Ar (THieJ|\3XL'fMi.c 3UnB+++A`.ӄy.PGgG\aź )yx"MQ"{'لBHa7ocezv씘r(Fㄓ65Q[װr 9 g>~s`:xC|8_s0Es4(0^&:?"8k_z#\sOm%P"m#d[2i̸!$b/SLw7uIi ]yME,L(PࠨM*܇4{(Ҿn)&8".u;;5v4|%mՓ1Q6@(:Ev6OnڮG0Y.u,p$q Yf^p 8 aVIKcy#4Q*0$¢h3Ȼ_zȺMKsj$ 'O h]۹  ;m0ԃX(71Mi356YSd| ؄ -1$I(mXwsqfRci (E#RP"{*O*vyy@ǁ$&6?CU4\ &7C褒cuYPYDzpk n'DJ(Z΃;f%G].ѣ~K]E(G%%L.o1~!응Phu˟%2)Q$SHT.r<ЛbZYOs8Uz*K%u+ B tUj`/IU[ =Nw0(:Y܃SN й<%yĺ@U>"Xq58)[`xw6ecjT0 _ӗCg 0oins9T8.s N7 zp& >g;8MmNİXPR ~I.V꽉a^+&i:Jw׺- /xIO%C%N"Yjs=;LI8N%P71$Ns<#1&,#?3' EI۞о )$=q߀'eejJd0pOy,@['/|qjD 'nR7_`,卧}Zm'~+͌Ȥ^ʴr޿} aOswc(yD BxZK%N!,AMx3rk<([m' ]ZFg* x%Dq8%BT;tEH, _u|yW42,%!6| @l$6aهɃ}uPRV7FX {? D>qf3ݛrhNh6V FqX Eӷг)JLke]@bAFX_[ 8jp=K;h&Ĩs6L4"(!3/akD^]SFO%2~h8*nsN' L~ Z:4B팸]0285H,k"8k#⹕ HJ(C `SՀ-7s4ȻLp 8d`&v8vƑu #.;*9GG\ģ3 @F"đ 705pOBO9kooLD¨608KZ2N" |p-He㼦c#'.D8 > h![CR}sߕe<.jCn}B7~j7NAwE k3w*;"S^;ޕ-kh:tʖTZ(QYIENDB`il32/&2<80(5>BIRX^gmt|}))ǁ u1üuu|ܷȳ-um0+ŻizgҵDnf/9õoz}pZg_/HƱetap_X/W_OZR.fƭ[{riRI.y~z|K~IM;|k[N@6-)("H:=i9;Hm*wgVH=3)!8*$5('o}wiXI<2+!747$+e/{yn]SH<2*"*94[%85{t zk]OF;4++I<]sD"b?vn }m_UG=3.P>Hz#9Ooj p`UH>4UOF[^fjd}qcWKOgtAD.d]ҫpX^uOEIa}, ?^U e܉s^J7RU I#,9F`yJ^9"+7Gal:[|()|yqmnnoopqqrsrrqqpoonnmmqyT T[f [gżƒfC@Cvwy~uzmdilrvzçoh;с R]3àzy껺_XBĿizk巵mSPʿ|z~{P^ͼ|ujȪ䊏Llti󗎃Hyιv{|󜎃Di🋂M-~pbTI@75C ~uh^SZ{AR/9>(Үv^gQFMp߇- ?3F{u_J7R- vJ=6/,/3>L[t(^vrcSF>93.+,3=L\u}3[|vp`RD=825r|yyT T[[gƒfC@C苃ѧ䄃TΩQϮ~ҧbizsةƇqȼzƃ~̺ɜwxЃv±ĺ̮рۃmʿƝc˾MH÷qeYKIb_:N҂_Hm9xmbUH5}P*$[Ko3xi[XHZ;L$2Q͆+ž|sdZN@@t&NV$}pj\WJ^Nb%]#yrd[NJA$Cn΅(ul`UIb]wm}΁}6zpg\iAk0lׁsCҲguTHR. ?\#x_J7RL q`RGHKWhv@^ͣrfZOGFKYhzŕX[|šndV\|yyT T[f [gżƒfC@Cl8mk 76^] ('FEda .-JH~~#"#%%%%%%%%%%%%%%%%%%%%%%%%#ic11gPNG  IHDR szz AiCCPICC ProfileH wTSϽ7" %z ;HQIP&vDF)VdTG"cE b PQDE݌k 5ޚYg}׺PtX4X\XffGD=HƳ.d,P&s"7C$ E6<~&S2)212 "įl+ɘ&Y4Pޚ%ᣌ\%g|eTI(L0_&l2E9r9hxgIbטifSb1+MxL 0oE%YmhYh~S=zU&ϞAYl/$ZUm@O ޜl^ ' lsk.+7oʿ9V;?#I3eE妧KD d9i,UQ h A1vjpԁzN6p\W p G@ K0ށiABZyCAP8C@&*CP=#t] 4}a ٰ;GDxJ>,_“@FXDBX$!k"EHqaYbVabJ0՘cVL6f3bձX'?v 6-V``[a;p~\2n5׌ &x*sb|! ߏƿ' Zk! $l$T4QOt"y\b)AI&NI$R$)TIj"]&=&!:dGrY@^O$ _%?P(&OJEBN9J@y@yCR nXZOD}J}/G3ɭk{%Oחw_.'_!JQ@SVF=IEbbbb5Q%O@%!BӥyҸM:e0G7ӓ e%e[(R0`3R46i^)*n*|"fLUo՝mO0j&jajj.ϧwϝ_4갺zj=U45nɚ4ǴhZ ZZ^0Tf%9->ݫ=cXgN].[7A\SwBOK/X/_Q>QG[ `Aaac#*Z;8cq>[&IIMST`ϴ kh&45ǢYYF֠9<|y+ =X_,,S-,Y)YXmĚk]c}džjcΦ浭-v};]N"&1=xtv(}'{'IߝY) Σ -rqr.d._xpUەZM׍vm=+KGǔ ^WWbj>:>>>v}/avO8 FV> 2 u/_$\BCv< 5 ]s.,4&yUx~xw-bEDCĻHGKwFGEGME{EEKX,YFZ ={$vrK .3\rϮ_Yq*©L_wד+]eD]cIIIOAu_䩔)3ѩiB%a+]3='/40CiU@ёL(sYfLH$%Y jgGeQn~5f5wugv5k֮\۹Nw]m mHFˍenQQ`hBBQ-[lllfjۗ"^bO%ܒY}WwvwXbY^Ю]WVa[q`id2JjGէ{׿m>PkAma꺿g_DHGGu;776ƱqoC{P38!9 ҝˁ^r۽Ug9];}}_~imp㭎}]/}.{^=}^?z8hc' O*?f`ϳgC/Oϩ+FFGGόzˌㅿ)ѫ~wgbk?Jި9mdwi獵ޫ?cǑOO?w| x&mf2:Y~ pHYs%%IR$IDATX Wy]WL2Kɤͤ4մ6M6*"(V QEL"PR(] &2%ƆfeL2L;e/6*-{w~ nRR͒l.ͻߛ__. -M@?$IxDTaCD='[( t4"!ʠ*!T㠄P 0h8!r-A~ H"po{+FΌg~Mw Ͱv^E AF^<.̫V󕫛U.gsXbzzZנ0Lߟ g(ݡvG"УO BmHg0 "3!eWXF"&u)Y SȲLY4[ETPm(kX먕 pkM,4dӽzq177Alܸa+ (G0:f(,:jF7,(VFi 5;ےxQ 0uh$D'x IjjŐc8:RɄF 0,z3.VmH `͢=ԕ-}X[L|M'RQZ@2hFq; .`vvj FP`u {QVZ^݅#/s'H.ܽh>j D[B@1x@"T6D6W%n 2-躁J̀ihEU0n6.Sw'#2t Kj@<ݠzSX,Q*l)A4dL)ĢIL}w\?m)'輀F:CV9EsHCiǎE3$-\F:Q,QPTPѨ5Zuap;̎CcѶ6 ;=<۷g:T vEC(#S ưݶmƴl8. C=b肴]so{KG<$CUQ-C.p`5bN|!:b_<,ی;Ǭ' dhҴ`(6/L&f646Hm3)6j|hԀ8ԆH}Y($nAy607y_x)iFnCp5^Fm璛j2'7fpFPE& 3TE/"> +{}y?Qٿ^ddr3!)\d8L*.…F$Ur, mo0dƞbӃ3&3Q.Ȕa).I$hʣCѤm:KX\MH62mpNugQ)LJ>vƀo놠9''NUOt{/E±vڅ{k{mބkϑc1%_1`_1bF MK?)FGGKf ,aA\)ȰNp{Oعnܾ*='7\`6Q}LjP^. ::xxP|d}'htgX,jjRRaI$3H0t绑簺+_ OFh ZUC ji]z@\Z#hљ#yKc@2޻:pg, O"(J!hAq$X%ڶm[ roo7SsZi,]cf:A+15{ g\7NҶIENDB`is32 (6;DQVapq?t1ǝuyh7zy~fa;xqއ`[AmˌZW:vT;(#9>hTOfN;7Ds;98ω>9GkRJSd~51=řt~ȥ:3,-(3=ITi%zKGHIJ F>87IzU{Ukkwkvx~SЦՕWȺzزZƥz임ZࡄPkT=: A1vjpԁzN6p\W p G@ K0ށiABZyCAP8C@&*CP=#t] 4}a ٰ;GDxJ>,_“@FXDBX$!k"EHqaYbVabJ0՘cVL6f3bձX'?v 6-V``[a;p~\2n5׌ &x*sb|! ߏƿ' Zk! $l$T4QOt"y\b)AI&NI$R$)TIj"]&=&!:dGrY@^O$ _%?P(&OJEBN9J@y@yCR nXZOD}J}/G3ɭk{%Oחw_.'_!JQ@SVF=IEbbbb5Q%O@%!BӥyҸM:e0G7ӓ e%e[(R0`3R46i^)*n*|"fLUo՝mO0j&jajj.ϧwϝ_4갺zj=U45nɚ4ǴhZ ZZ^0Tf%9->ݫ=cXgN].[7A\SwBOK/X/_Q>QG[ `Aaac#*Z;8cq>[&IIMST`ϴ kh&45ǢYYF֠9<|y+ =X_,,S-,Y)YXmĚk]c}džjcΦ浭-v};]N"&1=xtv(}'{'IߝY) Σ -rqr.d._xpUەZM׍vm=+KGǔ ^WWbj>:>>>v}/avO8 FV> 2 u/_$\BCv< 5 ]s.,4&yUx~xw-bEDCĻHGKwFGEGME{EEKX,YFZ ={$vrK .3\rϮ_Yq*©L_wד+]eD]cIIIOAu_䩔)3ѩiB%a+]3='/40CiU@ёL(sYfLH$%Y jgGeQn~5f5wugv5k֮\۹Nw]m mHFˍenQQ`hBBQ-[lllfjۗ"^bO%ܒY}WwvwXbY^Ю]WVa[q`id2JjGէ{׿m>PkAma꺿g_DHGGu;776ƱqoC{P38!9 ҝˁ^r۽Ug9];}}_~imp㭎}]/}.{^=}^?z8hc' O*?f`ϳgC/Oϩ+FFGGόzˌㅿ)ѫ~wgbk?Jި9mdwi獵ޫ?cǑOO?w| x&mf2:Y~ pHYs%%IR$@IDATx $Gu&}L܃4FK`a%ˀX-X/x `l67^č! c0!.s]}^2*j'c&;^+"^dƋ̊p (,PX@a (,PX@a (,PX@a (,PX@a (,PX@a (,PX@a (,PX@a (,PX@a (,PX@a (,PXY~Ym [n&.*XX@X`A(V~ɷMA),PX@3Y0dVvȸ9 Ta6NA֣&~6(,PX X`=z*䤎"\@a'šlDplֱzx( ZX@a&@=κ^^&2sفSj1-N7U-,PX&@㴭z5\o,۰jW-(,PX@5'M$yxW oxx9ZCc6\,L".,PX@auf bӌɇ8 g2 Lltl0,|V (,ps1i6+m̟Vf"g؆pa ? d9a#wyq ԗEk fp\Ӑ8CcZMf E\X@akk,K\#gb|.EI*-ـfwXoibJ_/|Zkk/JՇZ^n<|5E[Mo-. |+ |mg6cZ|F_-2kjYkG/ƝCZ]T0yrOu3mcCzg---bu3OxV :Br%q-z[-^+=yyoy֋orƝlZ/]ε4zjY j:֓WXM7zϹ+8p^C8N!6t!3 WܖN&w{Cdx:zt/jzk><ې^kVzl~C_ eœ9wYGJgzj_XdךVH5߶,jES,:zt WN7:utp5mhG[!UX@a@Rɹewxr-Ύ}}* ǵ$W^`eyxPp3 h}(`^E"G2<<"# `F$]v "(,PX@S[:¨sS+;>||W!Xf tg?{8N.Nw+Ba6:e;j_v>>1 b WÑp1+p;(ʺ!:38c'O-td(,PX&zLpuYr?З 0i>4+>G6ahD4²tn}\r E(,PX@af`sYvgΕmٲv@>[<`.[Xp5TLjc >Hc;xnݽ%f (,[=%^ۥ.z1} 8 hzo,4DC <'_xZ;;;uL[ c@a` ||?|?`AC`: 8h?+hR^7+3F _p[ E(,PX@amrNmRj`<Ǟohc6F18 B1( lZ P|Awǁ1028 kiq3?l e)@a6&ғ:Cr!qVi SP6bco_x/T K~2wžFj*g!mڸi:x6 JJ1/4n{{{a:V7> r (,PX`3[{e0 uN Ig OFtټ^il0KF P5`3YQą (,,pD%{'<db MH}P1-=pl@i~꓍fi`PX@aM-0 @_aGWh{ZxbuKbhT[ fczܹs?R;R >(\X1Y wc|CO/ UDGx>c,,l*B3~ex.6jXDck@LSą 8hǼjmcwޭ 'GK^?ϿXiuY\@tq___ `sܟE) judTMM}m~~ P&UX0x qpo#/aǍӳŶ”. 4⾵X,`ۖ]iWjWr ?9֗Fvm%Zy`dk f4z( 4dQX|ez-BI|`ۤnu=ncN9ݶ;]Oj]r}ˮcuI7z;huruwv[97;<L9#vo?Z̝`wYdž6~&GLBӌmlmE,OCaP6]FZ(n{(ԚY51+Z#G{h)- ۖ8jĽm[I͋^t /e)zʭGuWGiwnkuSxvs\/ctO( -^I#ZOw[rN-v\F7$jq V$P|VR~§Yx^,0h4p m` Ɇ 8 Zjxsac-4}Ap-n-le͸yM<'EqeqYے Q/묺WGh+ƌ͵'-8j:$I ~{c~}w7#]{+ľ' #`k_Z]â9'|Ș#0>5|G,ظLg5ppLkv ʲlrqZ៿7mS;t{Qcɻͺnqme!Yo^4SjYu,WԲ'"̬qɻj\pg͸SGLş-p{ݛEz{G7{]۶ \|ѵ6}n,[@@No̐ ؇(s4pY0 l,~du`P[MϷ室' +|F75]h@l<|Hgˇ)o6u:ѣrur9IqQ/oe eYlZfmN̮1l(3%bcF/r:v2<S{ 74>ӥoUcF|4&K?'MGe2'=5=f嚔Ę8珞a&&NN]t.w%K߽LGlI}0,qʲ`.wow~)A+W~w}p~wi'U-=Rw_{E7gɃ%~|UU8idoO%- 90vy9W791iYtJ4z߃6wZר}qB^,KQ-MSNf2nw;fՂk-i/^',i,M6e+[7wVEyI/'K߲%+3fֳ갗u=+Kt |^pps31)'"m~炙c1̤;1q2{{z) #'lv}]n,w15sh:ni\PP g}{C3_]3}} `Wց]΋f_09>} Tg <|`hو I壙 S Ԝ!~35M5f]G<:'Kx_=#qYnYXfp-ewFNe툓<]'M`Ӂ-cO2./G^.'Oʲ ._i['˻IY>,&._w|-NϤ{c{p`@Qۺ܈|,֋%nAo4Gd{T̺,jc5ECcV0iAZaO£įZaC,_<\{>!. x_=ܡ+yya֍}J7oWD@oļ,[Lfh6\Ecɞxϣ> M=.X,Oqm .ne6Yi,LZf-2nO'wب,l*qn*m*eVfm$^iaQN1YÉd dfZQnJ8E\`qqcu=,iOdɻu$_wIa[>GdC2{SJeVuD`̰!oIƲ7ftڧ+/ Y5mykVy HLFz|E W.p;Q=5DG\}['ű; /sL; j(RfL hl$O RL]|<Ńngܭwd-N!gEIҡ7qI`8d\He[&:KBRZfSԍeQ7s⤧'ϰΤ1ve '%_vw{hu2S8-˗t8[ř|=*?i>,$zƱxc1P']=V8.3 1%V?!M[" >WٜX"X ƥ뮿=b~K{w30|O\7K[ ` [C.!f>4ƴ,CWMK3}:s;{ܶٛt:kYPX P:i g G='- JJe4IIˌzZ'8鮕LvD~%tt;iImqGz7soOΠwn,{ɵgǰ\+^ӱOs553<`Vl'E9\@>"1rkT<6m‰fu<ҨOiFH8Cce6 X ~ww9LĽO\M7pCO nh|EY5MnXG8pCn!zYיtV!2c;i|[4fԃI#Ik |JՄ{ t@ayESNbGJ詠UC$IqY馊e@øf3&u~-9;>N;ɒ{pk, يz|R66ei)ꞗ+qVGNgCvwӲ-|D6 kv17fp ñE7~/woNv*]BD}A瑁.LCnC)ղ,t,+c` '|A!NīP9Ji1WSe#ҴI] EO W("? \e#{<1R} v ۷K"HfLM)=fb9x```  g˫5KܻE:fW3C?/}Q5]shJV sSJ@Ė1Ltfp.:|1_Gy=]H<VgЗkS: I>tǺ|*+* GfO{֋_^smHxP wDH{]LoP!ft+?: U;,Qy|ZdR: A@OZ@Y:,{dK>MK]SifW,`| eC `.oA/YUv 'J떰~F x2 iqflŲpް{5mN1il/YV_ Ǻ~u-lОt6}ni:^mX9oK31YyB4o,t<=9?틐ǼSt&L`eu'W?_*aiNēUiiPRt} ]3O=ar;6 ]b*C|OJ`=8A,$;=8mxi3r_o?=z>/w scV8}O4F'VPGY>a `i!لJRHƈWai<'Ґ2UE8GHZ‚~׶~!ϋi *2< wh,~rϽnʓq 1;=R4jKxOVjXtbb^q5kXְqUc!64SX >k]Ϣlr5[{ܵo|O[-ۂ^1]].`v>xy]io:ѩ 7`p^i)J( Y5/*$Vt1216:%fbQe+!TZxB^?0x,_ //zE6yiS;89}޳܏oFJ}tdt |GSڀ4q-)fT3m 4ӔA@opфm׻2Ehw_Ի3iYȶ'>wC CT쨔rGYh\-m<2:qWL+#Ͳ)l Qy!\ˌ͌w3(HŪ/ҙbX%Ajl2OTZSiĦY7Q J(`Y@'piO3_(E:2> f L.sJ`&^Lx}[ 1/i;u`T6@L#V鉣;}ƷypC{ c{:KMv)X_S-:r!ͧN;ww(4g*U^o::( pTPN5,C$6<]𖇼>ODeJ,<wʙ2 mx|+Ci0xai=Fò^-^=x= n`dT CI _- <쫔eTo'U۶mGL7,1>+SV9P-I6| Mf  ie̸q/asܡ:wW[ IuL_׸\qYMLx=fHEx'NS/b:b/xWb>S/b~XqT D_`;8|PgQ/e:g8~6R## <ɏ|^q0xNIk&/#۪"6[&qX9rGd_0Ж8? DM :`64 1>NF)ٳ',m=h*wztVA Kma)ukjc>1чjoaoݤG^<88HDyt%/,~+𥄐iGN9Ptg>*AzYy* ׫ NcM o/Ĕim{~("ԓ$V.H.+yjz˙0ne6(+PzaAzIߑD5Vo*'Ki#r @*ZpnL'lriXdo*eTe7iM-y>e^Ye숊-+-C}w LTmݺMa4q"4 Ϩ#FdY}<1eiu,ʆ?Qm?0Փ{Wg:xz4.8'-t Ğ2WmME+rzyfrPt^k,&X>JByaç#%PC7 q>N:Y{OK"խ4CEQOI>V/6aNAm pdr3[^uo4oX9aO e7`-&!馌ue|6c6?ɜob ֯T!ϯF>ix"V G -}V:|l9T#% A1<>!,LcV$ /pDZ7+ +R^Q.dԓK>`SĠ1oW^hP2J=З|$?{OZ6 = y=5lҟ[͖䧀 09Zsp+fycMϷEo hkD [xp|XC?쟽 bph&thwxePNl;?X0b@ E鐡iZ:iOAP4d<7~ f6 U^* }>R+!BwFEuīɫC3h, zXWU Si/|YZ~KL12&0 ~C|<ꐘn0Y{YX, Yg`x7@TiDևG~7@Pd//W$<yoӍ6l<K/I>w=;+pzNoƿi(!'G^!O]" ! '<&my`YhjEҲp,d`d$iJy9SJsUeҖ2>#`W6R?pnpAW[m0Nˇ<4/Nnҕ2W "I}ȃYfA|>F@@rr T +7?VFLpp5z`lD֞lPZGG]Ou,MU8W#P4tz H )?>㳸\A<} +:OIyLc}Zn/hPE4 Wp ރ!,@7ˣyMga9ԠzPAWuL1iHCȖ`!L [^$MyRYS8xZ<RBz|>@)o7#"P/󂰝 sɶ 0%0ؐ M4qIkʸ44,C t”)Q`,W1r~oj[3fedK:60aĚ8#>e<rHZȦNPZO`ơPOʛ4iW*$hCWi%vpHG#1Alkƣ#8v4(E|IR8 VVe8OTi 3ՙ,k(qt^/ll#_*-yt 9c;p@"+^=JC@Ac>^'h?{VrdX3PQņǗϲRe7775??K#F>&ֹC,NSi2V})?޽/ Z*s%RlQ*sn~ݵ:W۷nò*lXofqpN M;]Z[Cɍ ;X1uScp@H@h爴 $Ё-C) y!NF#,D "+YR?}  !_Xґd<^A5:B6)BV)>xPDYAT^<fml|3f4 7 ϘYpIv\1D˴i1o`z jvnܶ2iQ^0}-ˆ|Քny|K:x=]J 4Sx H)N)i=q!/gӈT^%,H3Ux *N-M8ˬ.;ϗ%-z" ,I/) ~YZÊ<۰Ȼŵʲ2fX^Κ",|kwfds.mPo8vCci{cR2zA!/EHYvC^_pUl wZ @Tre;`5]]8+Tp# j5fpb#(?LyM5_yDjZ;eyVt}? .Z?5trɃk,c`zã:HC,Qm=M&?ݻѼ~#Õ-9sVl&JO;j6€k1ͦ[kC}pg4ct`C?\\w m=EzD,d(,`ƤiZ( 8%FɶnZ|Y8l^bsNuF!J%De5sms4NN}]cH8Lml4J~w}k2y7 :6cZ-<f@Zc=2ɣʑpcުz#L ܉ﰤ={Wqxd?}'//ܶmCvd7}.׈liv{Rx~Ÿ4($r{0| w4Fˋ K1JNͧ{߾Pd5+0 靈mX^zɟ733{BĄv,+ω#G NOVYY_*̳u%K%pV)??*±Y_W N|a)_=:q.3{rӢ;VK' :f goO~njz}{#ǹ{n3#A[[}.Yl? 7sV#(7f7dLMV,=Sc!iq3gܑ#Gؘ U Y@IDAT p^xNj(1#9[;Gi[F IS$/,@&koPWp&:0"*p>鈅1k*PF}.*˻zp-:,ܔj7SMon7pao~ӽpԧBiv^Wv~O`MIw@=_n٤itq}pG3*h@'Lvv Xؤ틕[NS5` >C Ǎaáek8tw±thu` p3DU¢t=}P878.總vtݶӍlYO (1:nx| KP`ʩIup`,@ "F-۴\(d[}n}n 3S9>஽*g^W=iGX@W$/@!KgUʷmѐ0Z5FVe/` :l mMe@5!w!K1S&ac '3p:qξḭ#'0HCҲ䬞t{%x' |rU'A~%zT7.QPVxGY)W|؈o]{G$e zoW|= gNfc|>ǎjun'^~Ot?b}*_zh:Sۤ鼕Oh[9h%ldh< &gwyྻOoٽ7$z{ޣN% yk _ Odzށ7M hZ^ |b߆AŇjixA`e.j@s= zk]J F)T -n޽X.Fi -12|,&q 'HѠyr1?myi͂/мӮ~`(G˦.P#HV;:?$nRg+N2SMgrj};s-`t8 Oݥ\~!1!i";!ӛ}V xvT>?HʂPVeyladec>sX{{3~򓟤2袋>w&?yTY^sK59zg|͛z;fD@ldO&@ `f C-D=b΋Ny$Zy\ -G @-BkxS||f/ч4ubiA/ ϝѥ[e o}y]y>J7wݿ&XQy5׺+"] pڌxAH|t[,S eY؁-Uo& dy܍_;i`0++pz׻W5+؍fs(=`wXC8WM yfL <q,vܙ;O [p@/VgA ҡFJ7= bie^ 8#/bPp1lbP<%  ҡ|.J&W\C>םOn}rۏdӆ9Οe֡>.Jjd?$AhmRKTַ:wnuGIh=\^pԭt@'wqG>7Cf;D1][woe07ϝ#G|j:KciC?Ȁ BZ!eX'|6/n8sꀀC€ۀ;=~C+l8{쿾}B EM'p6 v92:m4I Oef)K[ب@N/c/GGsq5BGbC<#83 4E葬$+GO}Ni~i#kAXc3:䁧IDCW>&Xa6oI78=幯qtj\"=IˏOٛ6v>؁mhGZ`IN ^m( ci՗zɫϊ>WQNz|\VR-pI|,Ji <ApL#Sqq^ז:;{/k7\)" ܱ{ۻ"ꨶ [yT08>mc Lz/6HYV'>%?Vp>uTz#r\:CGd8,<|ԗkD9&;1SbqJ3 6Flh7Eww=S]TG<1ƒ M$ZEy4h%AA /oM]N0E@G@8̗8Z A׾)ꙞmёN߲〟D7' )`|i|ya]OMUPE٣Qp4V[cKl<>`>T.hSP-dl6mP $PWZAZ`7>@yXSgp`ϑHm̳H+#\&cJnyaPoIv/ߕvg*Q8#<  WV8I%-n@AnrܹXyPרYnώBDۺ1 a VFz '$~ϧt^f>'Mz szXΚ_ aㄽeE&R 4F?T +nٱ$RlMWtܽ/FѪ'lF:w)TJ #{׺nAmİwT-VJP -@("V``{A\J8q~dtE E Gp8j߽M7T߼Bm7 l4cڦB: F45v>ZjWtgȒpvg.ũۅ)q"o`sj|m :x# YF ;"(/;&ተp}p9ʂb^d!-7-368#&GW@'#dy74 {OɮtR9C`rbaS.a@=16sy~QΣ_Ǎ,iZdi3j\tcM|2rTo+{cQ~V붾-RwXBb޸ir]`8Yy%+XtuɉsMlӓC:||صm;Or'G?oC0;ٵϝ~܏nzyܷlۃR71Ӄϔ %U 9μ>3u(5nyL,x>,<|j?˼>7ÖCaFb8Hꅪw~/`7NJ=+c-nF~ 2KYg5o|{"0>4m,;SR{.6e/zBW߰:h8aD g 1Xٶuv&m(;,&"N;TkMy|s]̧ا{t?=769DyxoT}dݳrW6A9ז-OL烮iTvu^Lyey4ʐQRg>OVAKe/|qbw t ntrAݧ{~Tq7?eNݢU<3&qӄF YpK۷?. ϪqRԑ?s(`K;8e]Ҩ9:qyZxnv6<4ov^GfȨ#8zZ]L_ye<L>A5e)m䋯rUIwb4; 1_ԗ]z?[[r/˞JGXtDlIh =SNcIse阎BPo*?QuK{CIuzyd"L 4F?~~zz{ݛbdph&Ĵq,wˁ@214XYݱcFyUxŒQ0 Lo:* l/Ee,/`=.IrvF܅xCo.1iU^#:^(tKyK*c(ꤜx!K'4(ԗ[~+\E^,/2`鴇< +oRAm #OX^l;Zۣj7~v1)v4q6 vțB<`y8?7u[,cA| 3%#ȳ/ܵu*`9OzjUuĘIY ĴqdM4\JG,u^>_ .Q}z Z= l?3^ #T~%F]w`ШJ/;Vمm||z^,Jȯ $"9E,l toooj=5_j[KNKUΫF\P!v<<:˓ӫ$: \FOHp4CGf? oh% ݁+2p\}~j $$h]>K=i!4F/}}(_SGIeT/Ws>N9 p:KJkcަq' fEй/ZzRF1jWt#ï:-NzWj.ac+cnvjLPY-Ye9@>D 礓_pmivA"S aoVAvt$]64v[K%=~S>W6MZ(iƸ=wM+Y ቁξjwoXg̖^w%v_᷿]gѝ0R1uIcYizX'&}}"'Rږͷ{?BrxˈzfiY9ծpΣ{k& C֦cMCئ)7/)ٲM98nwfzZ,cx0(OAHC Jz :V%o8hfɏ=|/;jEĴ]CC0 /V6 *"o9_W@:Y1sݮϭ ݻEwJ/O1pMqc2dY83.aڍrA-y` dLc|i7-fs&ݜ̦r*ݼ8ezր̞xCY}xDqY;8qq]U ?t%LxC w4dD(}N)AO`VVxapʕ(H,ʩr5`=nh1*W^g׾YԒygZoڴ! ɩ}S#WKS+yӃ پ O1úN0Lb kJT^nws yV u C PlE'}{G!@خ Cpa0.8ؑZo,[: :jyY}?׹׼ꚪx_ι2ZY:Qs7_ 72tW=bz:wO.S};8o@+Jh:J |2 IY-tR>8L _EBf7rW u(sӟ}C2d('mC!m PuaB6Z *w|~<c`2ކa >˲^*Rqe4.l45lܖqXId!GKYܩ(`+-♙YhnQ :> ^CB/P1U2hYw'O3y[xI_h4-PE,?UUF-2iA/e1/xcbrDd $Iϊ#Al)OVmnxտ7\]}SnonWzA۷v{[RTryaқH AD #`Ā]װu,bӺ5T,&\Paii=ݷw |nߪ:{NU]]0zSxf{ C6[or)'Ɏ_MG-eشƟ_\P􊕫ZЙC @:J+ ۴9\͌|jZFL3K PqAiT芹(~j%)SF <$AHl=`ͮؕL!;D+^R "1]ST~vu8/c|Bzfvi@2`~ (vݕ|w0V&TstԀ[CШc3%df5gnRm0j6|F|, |ŸA\>uo}oXi2lY>sƧA+^(Q1E?2:^_]qZ"ƚ@k+\"O#]cxE MIF6,AiҲ,Vm 7^SFQMm-aSQWLuذf ~5Ͼ;z˫2&>ʭZ4)uKf6`Q\d:҃H8"Qˀ2oG/՞aGg2_Vgh GBhb*塵;>ioc|+RUxU>q Nfw!OZ +.d:v*s9 *\1_.,ya( .uLtE>xLAz`;^.mQĆ ɥ<1>]wSOPCx瘓lj'rOQX(q+?x/YO LA}mcl1.]K!")wqc{?kykwDHΗyK vE\ NahA%cfG %Ӛ0NcziJgLK3zOՠ*ˌwZ/Ojk>Ctq3Q O+>-ܮ烷]˟xq EXꋈ59x̃6/ʞɜ:y#G,SP/KiA{uKVa–> =W?nӕ\~_U%ˌL'gۯcS=6nY_I7bO~ΗO3m߇>$wrӞpQ2K t$SEz8ꓪxpŔ Zc5;;<-P7t8f,Z\ Gi#_񤃝nyxƪ-p3D5KɍfUv2VB\ihz~4Bɋ Rl̯hi^lu!Dy.1.œnIR3y3OsqGAzWFiJRYe^nmA 3-& w{b>A ??fX9XW,&$Mm:!2R]Kc&l'9}[ Hp,I, `=Rqؖ͘kk`Wb^2EK7ߢWUQŐ'O{W/9'9 P|W.}fBWHr';qaN f. uҧ,診Sy=^hu!ECyb/^?s{}ӡ,MeyJV!_9;&_'=,ĕwa] G?,.-9 ͏~dlO\=XUv`:^ lt2l(yIWQ3Sae'fY m߾#o?}_'X&WV cL`*xeC)+Jtw?J M3̩нaÆS raaAeq],wV*Oᡇ*hz,VwR<\uRyY)v58_.ȥ_zAh}qyeA#PoK7g2Sci '#۷"3Q7#XEr?Nm<69q>M `eh,wi^ܽ#eoز%\x71 c9a49t?P9hSxZ<zC_=ٴig36+{ -+QT+XrI/Nݨt ]XKHgJ8IZXxQnz\Qn6ф+C9)N>tQx .33޾ 8{+,lmk7H {g.Ҩ6|}FKFZ.mA4؛ (A<8`Y).ZD>x_:pG?wIUq%}2\x3_< >1,mr3"@=0YG<)Iez,CmT7E(VɀlCCCKe+ϸ6S))S\E ZيPū-ߟ{QS|s5}Gf5K\iJ]S;F/qNI0+Yfx [ EnKfwvv5slaQn Ag b@=z`n]c {{*knU#*\U[/ڃKN:pG+uC߾wc?=tM}YSw9}^xYi]o|=|cCmy3A'q3B>%q=K PM3J*k~.~2t^lcNק4<Z}|,9~g>XeoІ]3XS3c'6GZ>&6=P`_e߂Y;?(S*:,N Tuh*i5mXjrr:>|FpG"?sMNJcF`$UđIB]/~m9Ă@4bp8 =]HH=NeU!uY']W,^B@=CprŚ6;{N8+ !@G /cxToFCAE{X-̢OHrL3N['qf2_0-SaȞd6{{i 8q`oמ.7t /}->s~u~{i8q)kjNz!yv BF#FW# zͮw#,3>'ry"_gW;u#}yb>t٠@ՅOK7Ցɸ(mWGƪƮ߸w' `T:c4q#)q|KgQ/ J`>*|)jgnt u8ASm?S T N{bG0Vt}>OE38/op(òʳx!,29>ozz2@цq}&Y!WxwoxNHہ? ֆ[!؁!e 3;-,fc29y:1 O|:⫓Z'wYo)W+~'˴cp3 o6`[¾Šћ:p7$FhǏ=ͯugeޗ>sbKQδ {M=n|*'} !ЎM4ۮ0s>9PI G<vc_;|67TXv4y oCy*t}C?׫Xc=J"BalxO+Qr;\PYu7ؑ֐(ˡǓN*'R1Ĉ0CȧzMi]: 8BgNWo͞ oN5ob"'+J$gU,}@Ö|F%lNk@IDAT4glbTYYo֖CD 03|Z0ej<_A0s㥩S{4N{ɫg=2?_kxO5 :BuZg#OTf(}6gP"2}Ӊm\؅?o_T?Cs#d.b ; `H l(+L;3:b6̧.fMF3R3DzékSG+w3Z@Y UgS7򓍌pd.dqY'X+60O0;cȌ<; Q +%:SA:>..ޟp^<-Ŗ*"˧ xš/Po I9_dGƼ)g*N!/I\̱_+E?̌A& 6t4Ɵ~'̊>%ܸGDQ=z&vmpȅ>pG<#tucBԛ5X,5cS#RP*}h7ǣ-S,/ɦ'ú+m z: +92I<~pgE>_a(GeC-1:֝wLWUO1áE,J8B}/$61L8yHӨ}RX+,_Ok Xh^qĸth(M-:q(twѮE{J)o>>6´Uڇ]~I_|@/x+:-T>kڬ./xlc0Q_-5VVY:ovs\~1lzx*4\:9qUZzCt#Y #꿳W`VBXR]ȰO͑ܧ8l6Bv)uFiɊS_h =/Il3V/v{j"h:P:3x,4Èa-z !J8x`xfA~opڠZ1,ʰh}C󡾷A5ŝIF_9f?M43bjuM~FX1M;΀3#~>džoѾ5hl\XܾBuauT'#7n,y{kyunC{Lo=|f׾0IhfkBX:R](/VJI?@HrϓPE 6L?:>@ftZ]{̒S:ŠK_>7Ц^PX pv " uq;tBDi!m'Jj'd<O*8E]8lgy7]:^#5|b.9}r5,7jFRϴFԗLX'O~P7ڐl/O' qq#aSKg iv "Y+S׫t=/Օ: +yIj8LJ?RNxN1ǥgO Գe_f/؈reשNn&>F OZBޓb>SL{%_J`U S6:ӡ3lor֝SأvnJPNv~ĄN %ɒXVt}H5.&܅U^W,'}D7.-~ .ڌt|H}kL Xu<(+{}VV9{W%CZ+ o-yX`45|w &ZsiБ_| ẫ/ WVHgSOLm/w+~U;iH?߻=tKB:rfpxLu"kԥ^Lx-_\H @u`Q3r)"i1z$J+qm/jX{ɱn,(sU*Nv̛[ Y pp# <'GN ;v"#YM1+OKmtʖ"NlC屐~0Ü \:bX2}ܱa0]|M 9C¾!~s1L.kq҈s>?}䴥P~0AKX%pih<7M+ n.W 2z/ '9Q_QN9ٞL.>6\tPn,W}]xG~;ϛo? ~.G1H ޿Wޱ&κSIg#}ɧ"έ/ Kሇ?#;M_H<`XE|:ܡx G>:НHKxʎmi~ AOGPjPÔDQbfPW,P #3@OXš:["H6]]Ƨ~gWW8Bw9HR^.ށyۗ[ޱ:'a 㶊 fޡ _^o#]Ųq Vn0[X჏O8KmtO)'['+58,N-yIi};orb1H<Wr<&n" u[n ?|,Nw O>;ߨ$\jiHaZC6.pVԣ˷!RS}'FI#7a``7n&] Z0X(.VʂU!u(mn f^\β(OzeWL<֭[MsOwzm74S—2/xǰi.r6c;]f=^nGC݃,hQ,̍F wŮ7{ƆVkzH9=p;Bcͳc<|:h6F 8 .bD;p+Pawvq:`wsI&#( pwGB`>e,V(u-I?#)=*1I# ĻfiP+.t7[o5x[n 7rs馛6kȹ.}Xz֠kя?ᒋgY^s U6[J$wJM%'Wڇl;;|ΈG1?ޮƟ|geTEa~yQN{Kh[xAgE<K*}O+Mr1'RDvLoǻ:AFWdKsF~ wV }x_qF;)5,ǟ.~/'L :G~xᓠNqxߙ:~s O͹^mNjH$tJ :L^AhV|KVܨ~8}}DE\QNxXɢd !^: EO'Bpme5Za4;Vjbہ%WM,R*|#n4 'Y:e+bXtmZ]'QS#rJ1F|1\%pcGɡ>;q|??ĤiJǸ^xwrz#N \vWο ^2o˘.,-JVڇ,MfD p PQSl)!z7a=⑵ţ+ƀ Cd )[TZJV(.$a%k9CѠ2`M¶:ȶz,!ux؉M6JKtTaR鈩µwtU]fmue!EȨ1Elx~#{Ms d`?~gs2 97+eHY0cvN|֢-h1b`cb'@ GseMfay3{2uAlwca:ԡcC֟Xc]>v8|Cx{B`Z<>بQŤERA2:v9>\d%oXhc~p,t 8ɕ-E:A2t-%_:)C+#^1!_64kh*fj՚/otmd89䐁/ =xb)(P*r\f@m^S7l[,텅O3xkr9W03;㉇N ȓX#4(R^63H?C>T.O4}A,ْBEy# hkNrt(oN&Qy% ?LWry\ue'%CR0lgQAii2F|̬hm -Ӑ9 mEj|pHd:$ٓ?aG>upGqk'$fOh4?<>\}ٷÕ?f8'f :X YU0&9CLz絨u*{pwb+ 85q lSM3.Ei˄1~%x ,F m' G֬uW|9;z{h]_thCvn1܆(]Ţ*K&ok+64QwPLNw-ж75/^0tjeLd:)fc /]B//2x[̗'@^8˫D/▇fƗN*%=SY)K: ?cIζ-OІ3D1l[h,Ү|GH/k&oCN7ݎ9a>?mׇ̾|,> b]xԝ=u/qume=ƊL:7oӛ*7*?ҋuvl0o}1VU~()Xu5_nc zf:/}b9?U+*8@t>: ;-逫kb&/ƙ.8KZ*` OxUA37K=xL9b'sd0ΨNpK9KP0`Tb 3\dL<Ol0ٕBy;nJ*目k}41lʰTɜ\e+Ύ+~ ăϥ(A0FaJ1>޶! ZRn_N}k+Ͼ|H6Gu0i 0=|kgϸyF-a͖͆Uܔ΅Ob|9j02F҉fr# C]|5yİ_3ʿiUʁ eTn.>nkSG)J+d(¥hT`K:#Sxf2XO Y gya'?Wtcc9N{۪2V2]g͝)_Jyĺl0464FUv߰kt/[ŒIxd*yY"Qdeb&N!/f6̬=aA^޹~ad۝IJY[}8_dH wvkڍ^_|*U[q)ufcr 播N1/J0Ve!N"L5)Sw3Ha3qt!y__.>ḿ{-@B}eUtK)BV,.l'V:M/QNkH6aɴȳ4X D3-bd"6l/IG6]htJlE\Z:E?83wF4l1&RZɽ=@䑟2/7_{F[勬%Ny—ac; {S}xW=HLrYش^CG-7}>jRj)$B2,#+\IudSb l`o׆.M{{Ĥ,a:a!BDz H y+WOF9#txXqG)+ʋi_x{g\PׅΛOgw6OZnI͔rs5&BKE0*Q_| #^DdʇJ OPI’ϬRdW(r`GxGt림XNEX>SBJ&]$mqW'@84Ʋ*2;7KQ&pWbr,;guh4 1棤fO 4kA9}']8I+7`*%6TTn` g5׷ G4$ߝ[NG=DyK\ٻwLrt6EwXe[z #< $bm'+Ӱa#l2BhQg +aVmeΗGV**n1:gį C4SLm! uOՏY@6B1,)F2$G|.\O|zF $bHJ}K$SR*őP,̬4fv PF,ᅡ,6Øiʰ?a:ΓЙD3d+a bCS'5SGDm5?8"8(s0LcA |>a'qc$Rq㯽7 Vm "U-RCr)ጷUwX7sxQ/7؏Xk[a`CyB\_O[cND98SHVxHNjO Cd,ZXzfGIi3?ĉIo2;m1GfVdtzDW,bYh0ĕ '/ݓǮZ-V$ms`x,uMR25SY'`w͸)l5@7+S9Y~.}QL)$7d#{ lj5l%]~w\pÑ8yűsGn|2%YG>`3iq 3O;oi*ЊUCwov)aV/˖/2~ް{ƞn,tuE\Ԉ3g[8"E:vs,S:sXPE?. Oy٨F_>+wL^-_srE@3Zޛ-ێ:7 =nBX*DXrBDmՐ!',ylf sB1ka;dsAMtV5 s~w糞p W ?< hc lkn1'=a}o/q``.c<]yGmIh.:/zޒ*,z|*`z*V҆Yn?H43,E& m\RTeCU8)C.M8DG[&c KA j'[@;{Dc!mMa:WBgdp&iL alaFH1.\pOTMré]adxl(&i yhCz>qk|.o=4;34ːc?.bd[$Nz;>FYú]w=?Pɯ::۬԰僱b=JX +EK041N/$[]QFćF %ySqª*Z9 v.ʛKwڹ&zU7*ӮXKbEdQf\=u:ca޹g_4[ ĹΔ? GwԘOy*qsKaÏmL̔%a,) pzX3A| SE"MVlY4SFX*4ؼ͙dCȭ6&(+ʋ2=_ >>߂Kan+xUWf(Vb~!\I:H-4\L .ݍ' eÒ^7ڋF^NHvO>EC'=l:L*Q.ci*r)%$cLyzN?_PЭ|]|'3=2XVgX;B&GA I:\b*dw6c;2àSS@<w2NG>QZ( mxVߗC+O=5|_([Q >VVɨ6}7#,[Ɵ\۫O.XRٮ6cƹ2GJv >Olz{멇.qh2b,)Ux]6i">)c"΢d_đыU4_Fn.f \nx3FХP5׊>^$MvV*rm;7`!a>usg#&E;p|汫8A%cw'Uذp_H#4) \6 0+a~Ѿd1|1lF<9ti69YPvd! CJc^x3FdAbW{K_Ѕm)k#Jqǻot_uIe_/%InoEèA^:/P'˴Q OD+&e\dgR a۩`2逇'm逛o\E.b0k.?蘬zמ;DrB6V8qJJ'<$s&IxF=tLB%ږc @y[gt/ѕo>Υ IlH8N *[WO}d3hg@̛8mf|ǣMm O?(t OkK~!a`Ew޹~}a[;nnZMŷxk'>Xpš'7TH|dI-S EE$;ٵ%&gs2htYl ab6N>81qW_ŀrOhk7˜Pd*_Kf!,hj=lho3uK.3 x|@OvA>K NXn|wi}&!g,+?extzYa* MӦp uȚFĐ|&,XLaȣұ4)Ma!$,H:o G>=Y}EG6e{U䕯筕qċ/;'v%RLŤ?[& 0 {`?)Jȳ| 2FL=]ɽm2sl^oy:7'39oW׮QinQf;Óm υ񄘓Y6箻*"6Ÿ'gЃd|)tX^_1>]Urݏ{_0:ۃItN? '/<p'N7~<48 mt}n6&zQ6ɘG.U91RQ\O$1#Xof' &PLsBN۪<}B.;u`z-$m +1. W"C6'**";1s h,w`= v,rJt8qg}6ƮҜ`xܝMDL-?aepУ_Ydžpk'D }6xr.w)rB^ ?wAm{_η$:@r]2ENL6KvpHou|e6<Ÿ̂k&0u* 7?)ƿf8s݄ g3Vuo7 i@:aIm kܗ;[{Ic/ZE2(B\ztJ F I){Oi1Md&ѐ5K;,5aYEٵXq]'rR_˜-)Y~x?|ti+!;3Y;W: p;F<4G6lʥhvAl6|{L\ۼy3;77f-)ZU*,xCCC?SlG,#lK6K~}j<&B#m׆?r6 8A\ߦr`H6%y\[~6`?kGCHbﶰmx-YrM|z;T\uAB2Fb*Z˪Š4[fU$C.XIFvic'ދsOmRq|;oV;QR:ds\gѐ0<=^WdW~΄:@ |q 㺟{8 o {i{~PwO ?yxih>QWɦCv?.cQ=5 ZLI<^xZ Y 5(M ⑝l]f6<$ُ, h 1Ty,/g(ї&l8 75T9ZO/%kVuI1q}K; r[[V7+ʆ @IDATm'K%2 `ŪqXzɶN"s|+aE%Yg8W䊀mFOsӸA>RHs|c[tKuƗd1"aǃ-ҫ1x zc:#'^:'ν-񳍅PLσqHNmG4[YI^oe ,O&*pޞ'[vi>W\ C2 i'?eљN,>om?_d`>H0f\u&nʍmIG5W{O'KeG(QNpW"vԱ,9uFUS>ρ7oOBjd2%*͓ZO$N+1$u#M[+M&[OxfǥakM1:$J;AW%1d'+#%mu?WvَC\DgÞlxpe7i;x?pjF/"鿆U>]m_>ȾQMz—7N9)hxp.οpǭ+. =o(AxK1. } <؉D^vl1ֆ6v6OG 'SXa);xt``زUyt.|сN?+\Ӊ/% .lxх`>QO %5};[u`!-+VOk|gX1 7>{٩.|/|_HoC]`ǫ18qKi#<֣(5&+9xo &e#{l4Sac[lF`: )e/U;!8Bn PnzJvgƋ_ =nIėrW*).hIz(AKLǓꋅ|7jrXV6NYF2zt0_tNpgicc6t iGO3zpEhG w p{o@߱L㟲HyΑn'l\SoOټ9S|^?8s'V7Ki4Qu2a-ؠ-ZEZOy4IMʟh+3UĺzO QFWBʐO pSϳ:&#FdUR1TebqÆ zx5}91ۉYe.:mBNJ.nv) DxCVdɤc;z,8Փ;\;)o,uKW;[o*C;5_bv>W}/t!|2,"6&3,`S4D6F3vĥE1 GC]|aP_? Aԍ0Ø޲a? y׆:[ ?51fKT=PCATԃŔF<^HN)iУ!e>N-j5YϗE{?I?_ʔ>e@&c~嘍4$7p(o*7o0=['}\, dxOfY F [;cxnfybxO+уiR'Y)S\XqeH(g.?c(%e+I2@|dCX/KX/Q[L4aN簦eZR٤[}>^1]3Nq+#Q¨yO9=D3W ''cք-cM ͥFcc|w[|ƃIX'Y>IGB#ԏLW2%I8Ӵp’xe6hdG'Rn0vZ`,q z13j-zʍf䜑0>|t&gCaâҧ^tn/@Y!U kMYꙪ3Z)=1W`vo/):rE;Ej'Wb$0 pf_K&&_2 H>rYa)^v 5,e /Qkvr0H(VVRJ_ 05> &Ⅵ-̆xLPM$SyzVG?V~+ +dYO>3BflJY־ɐNu2˝C8|Q3f lE!FL1„g\1ii } m|`}g(ΐTLg%دʪA'Y1M~i`= Zc0|K1| Nd(A S!8T,CNk }`eG!l, +[<:+>ab~Əyx=4]RqgLؤGtxH]ض>~YٞƧY SI{y0*'X50GČ7=kT,>ō~FXͧ}}n2=[ K]~i׿:+IK:VCFiQ&`6y[>dp`ev73"RLfl{TV*,OFh1K+Ny Ft%zhXZa:?ʱclp]vf &| ͕i/Rl1;r|U)0aAj,S3F5Ulv&b:1XE3 bgaLQH 'la]׍;276I~m}0 0OQl MJ>ƗR5'{?ac{QcH4B)mr.J8DR`Zfy-lL ar [7.כD4W9=.1=56?V/X7~VkۇBAP o𒌅(XP "ëJN3;*,^h+LV31PE8%pvTǕ|>);F_u3ȑ- ,mχǗyBS|@P<SG֞ l U }}xhxj~;ԩXtw؇E:1EKUW_pUUW>~[s ({{n pXG>çJ@}}6C m0z)~w/լNoK&7I(s(~'j#۰dpo^faYL+`CO5;ap+,qt@W{Xio6s:w2ȇiڙ1R~zIWBŁ"颤>5,uVBWDjݺ<}~%8?OYj+s7uVXO,lg #.-]{|as/CCkbI\߳w֞)J_m:`mOEK6\jb1-B[ adjaEj_ p- ap%_?W_uUr喝0/U݃oOm7%.ŵ gt7fㅦ.!=ǚU6W|w^LG^Gg -$~NӟrI\6l5,'8[I0nՔh\DKy2~ZEqĵ`-'+$c\.?Ҹq̃nˆ>@E=SpOyS{@˒N^뜧gzr0$ D"(Ĝ*`^Ytt] Lf3 L_iW;uw~aKNSߩSU/10=z=vG9oh7؄$Gֽ8y[mZVe,ů~…YRE9Y[\8ˊhUIy.ӝ* Z. ^Y%'uRHS3ş^|$:j /~jYՊcW$oV!~4s3u:j.+t  %\*+T2'>Zމq?[,<[ӎ<և" JͶZ%' Sq叻u8˃,.}|_;yOA:.fiV2)̟4) a0"o:|vN)_>ExR!.JMdGg%@1{ :%Η iei,ex,ar](oS9nSWkشi۷ۋhϳ -ygzold )xo30&FKഛ@~t7LC"sس3&AxLm k۷rAwo{_NmXGNJZVxIW[__¿lwVN~瓊< H0O#l$/J|˜2%?X],+#PF<xmKyQ~2Ԩe:+9KZ˜? PG#4RMNlj0N1M `dU&mff>7%m8H ?6ĸsccI@oob 1;13g1[AÈAV(] {O[ 'X/k=@LoʕÃ:SzL~ꯠSxdzS|ِq[nG̳~3 Ik<8cdS•pM v'0Oal7 ȼyhyC7.Lݖ+3^3Ag;Wd `Ï<eFc}XiH(Ag^V&+ᯑM 3qޕ,3gx{zֻ ;a ںfxQLFH O5ypYǞ{v?c r ?3^ ,+ivq\T\{g4XlS'k_y==JqDr`F({UӠӫ:y,i!/ST%ô-Ic=#P#Z;)8SѱE4Au悢 4/8~ĐkqhE ˜FpC7mM0.轏:8k#,:#@!~Z7zѢSn WG4Ѻ=}[=g <1=TXh\u OBx B@+~0)xE<)%a5Cš˒'I] tB$ɳ/Jzp "O< p/c:V 4R q\ι 6RUdtb_gʦu-G~ɮ'lߒmJ`אzYK0֘xsxTmeSYu2R:}!|98ZM|GOQ-V&8Ao<^Ph~G1b4IFaPL^t4NW-G㢫Fxqw~׽izA>)7o.+*2|YlBgn_AσQMT\GF m9I5naS5cX<[D5Ḥ86I {Gl|#{SǣU䶄# | jfVبn ն\D9()X3:-zRz,UɐWB^ l 4-i>9~P y>e >2bh(pT+_%?1@^d.^"3(+s ;AY\#f*[?kN N>(O.0|A+̾ʚU3 \Nkpx_->}/?gTĠ/3EmP[TO`13f KUјT WT(tN5+H:6=xckլw9t56rN\VxTG!PlCNwPTY>%ԣߋ2etWY* {^͂*W!R\HXd|,<Ny,"?OF0,B( *'iHӽW[&GCHdPE8W?C%)Foyw[g&azb7?;"/_ Ē'Zѓ{Wu=RynՖQlZi1{73z4\oK;t(^ *!OD+~}tҗe,0lXV0k״X '5G19Ѯ:>%{WT,% G߇{ݡC:E(1Lq)&}-{S:p@l01h--EZCZx0FUPմ]iIrFGp$\!(FEK&CF)D:a}G DJ<·3'HA&Br ẻ^q+kg-0Kq ER\%ܘ5C#gP 4l uRf6m Z wNо8Ѕ%qO<Q77r rg}oe=2rɾdaXuwGUSIYC 'r8E{$=f~ T3B"ӬCSKh`zSsC$\v-*7fkj#Ѽ$~`+OZ1":=%={o-/QֳYXM^ 9ޕLmز;da1-|;1ZA+^/ϔ䁎LZi99gYѧc^}t#9/.Q[~m]֬-ph*L}M\;q+[iRd#iZdyʦc`T^SҩN`"vN淾ͽrtt=vԍ1>q98[{FGGxW58+0s؇|pA}jqVW2)p )IW,iCU2ୖjWpџz{;hz*uf'>!wd4ux6c\}Ίx'Bl l i}, ^@ ! xNd0 t( S|;(uQu&MxRa>bhGh%ןjӊטt6Ɋ2Xi @1.kq\Ћ?8ON.6$e'ZC..GՙIMO r`8{ph<輇ذxWIg@5(8I jg™X;q^>EU oseq]:?oe/wW]VY.wOL{as7~UӦݭpn[?w~ЭYU{UHr/D0x-, TX?[QRՔ/%pZ=v\`bg t0y XKVs .q [%P !Ktj\:zf)@PLraqgr:kM >` ^q yqyѸ5ZIi {^ٻэ+u^YW '/*gƞyy%y]a[ ;5?e=Ge)da-*rrV#IZs&mrr/l  agޅ-ci[q 0;Ɗiűcأ6Z FRqN &jimssx5l٘PBAD(eh%6x =^,K yM^ Zނ"+kv=SNNYJkAנ [ sSsc ,9aPАs8 Lèp\ks0`͌Ø \ hT|θ\rsk~ yIֻb>[i;y<]𲷇y4MLSJ,RhhT~J$[@u@^+# FT"omMǃR} w烜(LqYCZ2V WjmH$#s=a.[ئ7§|MjZm0 +ƁZہ "k(UQQedU׵*ey{8mtԅ,91=r^?6m+SڲKmJZV0kZceZz>aܒoj: uHy֌BC t:,'\!ʫZgyt<-YlyspL|(k5ƂQ^(f9, KU'h^F 46B0TQ&dA^ɣn~ S3n^yz7FcG0{1?=,ƅsXك2>f?$EpVg> 'q܀ܚ Oolp7|Ϻ]/qO=|oa˽ juN)I-.j?Ktl-~6*(2OyTh5.%=4(k?-M*IxyƁ|pwRMNY)+ +Scfx0lhhnw=]،p5-P1.at|-*[8p_TkMq+pD/B(W嵗+WBޚWH9e/@X=a X!?5o"Ƚ41X \.ܡQeNZFZJ,l\f^Mpܘe44|p0: i(8!nc9HtVVoe|lPMUlt)_ޘerQ^N]Y0m5Q; ܚOhs/i/ Ӫ”@m%VO(7.td HDSskǩOa!S>˫zT/iZۻ>7螗:~+E[f` :L~NvѦ* 1U]9*K>pNKozCk:|+:S!ikfA Cd.Jht MtoS3}2+)?5 r<07G</-+]p;ιB~%Ƌu%.*۽FDkaL*T X.E]8qL‘̀ͬ?ӊטt,Jm5͘ml-)z B[QSޕuqC gZ?N pv)T moyȠxfUи-oV7p`ay]w,:"Cר[|TQ fCT]3p<7 t?$| 㔇5b-j pk9s"Nja)ǵwJw&77!Fĉ8vfS8x4>:  f;rET7绌iH`z>G\t w>kB3o)MycZ@cU Sǘ$#ZCݘ?֧/(/籗!%W҇*~|R @h,)Oە+Yy, !gzU |#ѯA Mr*O(>MucǟTx~׷{Īi>w =svEu'x[`NFMr,9ҶgVgqӦMg >̏^ ո!S?1&^IQI ^WE[~1>Ng6kc G3MWyx~me}Q_C]KXi HG翓'"H1:<=pG=e`<>.iDC?fq/Ζ1T+Q/+4z|=l0v؍=b* {>7[M{}hUChQ3 ؾxEC]M4i=o:+ B1-N[u @L[Q#Ny"]i\ŸawǞ;*Y,n54߅t?5?p=V#eMˣSnk]05< t01lBbML-tJE0揦WxUJ(2ĕ9O_iѬFm@&is<IO_ձu\I7ݓ^whRF?^u?ѿu_XREՈ`hx0CbtcwM>!A2s <#8;k$LX}-пRw;k]m~'iģM+|ųcDZ\ 7uǙ<VnXwZ!P_0^bm{cpҠƊ*nY4l,l+51y ]o l|=Yqtba} Ck)N}gIU9D.7 C.}[t>aHI1NbIxpS0"h<|<0xq!GbF"(-rKT-еf;W %][g 0hM>_l k t?{wJ 5m {B6/<+ '˘L3Jۺʴdj0s:::tcXy,1)` Ep|pmNaO]kظ>["-:hת4RSM욫cvs-)qFf' UCwQ>&gİq L;0q1;z&u{dKv~Mo ?}M>? {(|.w]m7^e@IDAT26dm5"%+)]ٔ2et [!P*  mxQEB.*S2K[-6Lc3/(0uGQcRueUH?K >&tY%EtDpժepmY ^6f^j,PDa.yqq;=r{wP 98z/G[Y\/-X'| 4t7ܮWh7{Ʋ!:>ikhgwmy ڵϲFuˀU%ˊTB@8?~52LNqL+N*sYz|->?mS9?,kbp-4: lPyƻTUd]5KD(#`"CWЛb򲼄9.׺]LHx^f˜8f~Hu(x^o^t;=u,'FĬ,\Tΰ$AK#doA)&~P/ڤ嵰1-;\A 0x-,jU!DU͙̓#YXX; n}9;/+7>\Dk8 G]\.L`I#bg3=k]Sk ?aCIօ8ƯMbEq7#9rC'=tͅ}~xF,"*ky-t[.ka+g)tVrԩPy+`8lWp16xM\``V=p6nv y /F](Л[ [&4U==[ܝ*yo ^x?e[!@::%]͏Au+(-[Z} +N!O1 FK ?9qckC6*h:݌.?ԅNcn0CA`` ĈxObg^!r:@$wY3h=zy 4͇{T!t~a@BQ晷Css( ( fqbкv;zK\jyagV}7{uKC;5%^k\#1(!z군 \Ir/7Ds0RÀ10-:C-B1-ȯ6F\Okm'.[L5VM/`Z,4$+`vԡ!w`[ݝGpP[ ʳ։Knk|0pnC 6[`5nD^M~܎ȐgkDG'5`ޖ=MX0'LY I#U܇{a 'y.#b;Ƞ8O-ir<68I9p=;'p e/|#Qb^ ضOhhEgk!)Nj,*_^+>S^$+Ao@Wwš3;g\\XKC9_(~*GۦU*-S|钇GS$mV&^iED6ޏ 9Yl*#mpp݊mЃx|Z v@c WtlϜ ɍVoV޷9[f 7a;v}d oo+goԄ[#Fس<6/UJ#سv Eهtw} _"m tVv|1\[!/]c2k ^4͘*/V I|2f}9ƚe*/kX)QRpC| X><~wa~}ep_|Ycpғyi8zv!o|`qg /f,ÛSKwP wm'/>.z[9;@4ڰc8 "L.K2+'8F\ dDYH۹;O }Bkcl`N$5jxƫ",`+\)>O lt{$2VskU/нn [aiZ1ǎw Þp< `|lD<}0YW5b*B`oLW@n-=ѫ<.i[qa]񣐲V <\kSO T~|S)Wʄ)tz, rS(-wtK9lbiZ _8a9[X\<077/@}[^!ҽ1 l7=?qJx?lZgC?/+unsQxAwꝿ5di06I " QNF^|N*L9^ڽ=]v|36?_NYS{SC Q;a [Ȣ xMkL@fCT>M,*-ɒc瀸~& $A" ʨ!O8N?OwҍÝ 8)>q;?Feħ-H)q Ҵt2 k|*ӡC:L̛Q=%[f{@ߒ?R(bPF۷O](aeiӳݥB ܆)7}īƵpG$~ٵx>/$׉dPY-. /-0Q(\98!gQVuNN =bL<Լ+f'X=r8ݟ0?@)#YS&Ɓ|)|Wwz9 Ug )V$Mx񯵆^j t:by[[j J<%0o Љ#8(~`<2x DžLO73.x%:`3w¼61NiZBDZSŭݰ ,ah ?_ٚY3v5zaSV6ӓc^Cˮt}SatO7C{]gcKaz=L%8֡8;[zQk,9"z]aht g >eE^VԢ?^4wM.FKVR XY"w*3v V Q3᫄R)Iu7V EpNf^6\*lq+u 5*5*UØ}8 Ǽ`8{ ُ'38DPh678 ww޳_9]7>&LB8{e8[q;8ֻrGl̶i{/LO vv`ްn G1^glAoEpN.Ŵ:kA]oTS!P+f{S.4Յxrz5N2i#]aٺuk 'LcfS9mh'Y,l5cg";'o" {TFHNF \hdZdU8,BܞaGv6Ťy|v4Ϧݓ,56napr⏍X]c%d{zw_L2}叹;.<6}ۇɇqзZ谻WOOSN4 7oW >ۗ9X->ZzA# :D ,=8ky2ilTxW^be17s nЩ!AB$ qaFO,goy:LM0p}AkŘ 4=9\'+pJg%ez6,O gcwO'IByQ) >zr/wfm^ kt6\l+AF*WEod%vԷ/{)6X228a#h1N?mF(T@F Ν;u虘k#j wXAWTB ]>{'Qᅩϗ<4,_S>Kp Q>^0ل (]`֗I::d5g~Q<=U(,nj(x1, @[2ԋMġo#'k7[^sI%^$al;HZlwG^wÛ? =W?G`ϻX}W 4yiطw H+1?iX0j穄\>Dl̴BDOtES'yu apϵpYgqz?$ǚI˗^ 66l8E'4?S&i vH+…r`Pc?Wam̄秆`<t,Z̎qsƜ?XppqN*hظ|wݺ v8w7m^2@L\7Nilk,{\!Mμ_ڋ KQaФezVqs}޿S~3R-ԋ 660vac`<^ ^Mh2*< Y\Y9 ?輯]il9x.ZZ;كh1ŵ?Ʃ*Yç0ưfԀ >Le*?RДy+#TD4-Cب ;ؘx7nɍh]zkw K߂}%#/=kB7⁋_͋0\E}L3t[!LrT'+ ղ' ˝f3u2u#s 'b|RFϧ; Sy0˴"|bpy}T!*g|Dzʖ#hYD+CP{Nj\ ܉﫵K?3*㻣#^ιB m6ƏS OeƂ0WBJʒ'_qSSB7(,T8%4:fF-ϲKaT[q "8 3|00NsPxaj m=pˣdoo&e tQ_Mt'Fw>wzWļ/ &pBŸ60ʧCl:h1szޅih0CugƼZi_J89Z`NF)5$at@P>A^e }t`J`y٘oC|#IixX|T'u͝+WQLt?co@fhIy6wMJ^_um]Y,ew߀=Ɍ962y ?O5ms^l;8^>F@JS蠓$B eC"S&롤>E"Q[6j<]u`fik1L>i xe]Ti aqGdb$08,Hv1r3*17or|3OeP)Te̅M0(4iJODZX!3!U0L~u=zQWCsVu9 "0rǁBbؤY\-<\A C^cY Iz}A痓kw^G$OOcފ2zvz躤ΕB}uv"<Ƚ{%z K:]٢`H]'OMd#p~逨nF|46ָ4wVOQ> 0  M-~6\=nEoa}՛q?x]d:x*E<'1Scp ΧI2aw_Qw nb^wdzISZg6LJVS}*:mި,{B{c6,'jH$ZFKXa‹ѕo6RK5u%rvFJQ%Enj mk7zgqqzxtt9zDMXXP&"<@I@P;.xۇfW`'R7>-00=wÚw$>tC -?>k]Mm]kݽ7>ɺ%?}+OO`XӆnZ=uL^)guq}'W_~=ަ Dx\+Pe/- VVQE8FO x)p%p9grv"@_ [ 3FEcZqWR,6*U\Hyr`0 'fO 7e}IYX2Ƈ18y o'w U0Q1Fp]&83}y/|⥤-dy#,zqq{5a=[AX # 4xF8BT<| A4mM288? h1hIKx Cꗞ#ou'u$fp7S_›P%Txᦎܟ!K'-"|'c@|}O~Q~)+=7۴m4֟4HH!0Wd.Ա,mQҙCRU62S^ziGZhHhpBN 1xԥ鲗4xm;KaE6m/d! rCgfD£b s{ gb:7pۯ1QWXR/@mLk[ݟKJ]:z7Ւ*;,C[~ٻ?[dY5ء_y2O{{>ʑmnGV_^dC20 O ē/cxLD34tFz+&‡rRTn  eb'Uci<9saă-24aٌ/iX.R%lC(6Fq psLη:Oxz<1U;&K2F+= Hgv#lܺmزSR 2A #0p܍rxk[)j; jZN34qԴ;7va}A/DNDds;oLJnНϞ>cK(VE1}ˋ~={߸с#ʲ*ƹI%3 tύK寒^):K3Œ \}ޠӨ!3kѹdOԠny.Ceg<9]:#=<;p jP0 t.G`< %0 ~.a0xFYpτ(-|K7 ^?}0;qzoO=Tseaa̺RzR|^>w?x/|+o=uY? ,GS&rݘ3|*9yMxD;C8z2+ Ӂlt#x&PF%;dYMVb@ s,[aOie` N`ZU!Lη:6~ϵc@ P~ː+;c ^82V#U\fCI uU.7%&<Nf&~0Ƈkq<16'0si4E4΄\}gcog\;(dfk):Av{ wM缲|}83_h,|UoÏe ౧đfs?nܟo{˻C+uME}B}H#H(]&x!S iR:Sz<Ԭ(,̧#0 m"?1AU|+4%x5&a֌4]Rm-#skVx1a2u!^oG}9#:viNt< WCG 8~'o[aLCz@>d30 xcsWxg^Ⱦ?,)\LG&# ܱ.yB̛Ib +,啲7]xGܭ?tUmwv}ӟ~н߃÷x"h& , }YC'$&9@!L1}CIm˸ ?eX:tֿ7s ȾӣcKg2 E[rJZAm$S O!9~Ɵ-c] 6: ,9{=3}ޔW) EIBuM. yD|, 0hDp`+tݲ_X8$NÏgÌw˙zGEY{X|ߞFk]ʬ-xJhK]'ხs6ɒe`7 ́?Xfѽ"i ~ymrG=U>_qxfg'P-_BkNe7ymSES6:eIaYӫJGh0V1cmRy\ny>@*#^fr`.U,cm2+ l0xC^ώy$ңԓYAAyy2qHL/[h|= iAXKR|h˛ <=ϑN HT+ ca1 DZhtMgĈx׿:5&.&6mؚ;uۮn۷kŞg{75|(#}uYX2,m[ _㞺\3ƶ.s9bцQ,9OoWDž*JvR7CAc7^NgNx?r7йEJw-g@7-iE"NȈd |,_RДpjlo ʣH|@7 uc-|WtQ,%o/JN2Rga:779`8Lp=#nf'a4pbF\/xՄ-w=V͗%Ǡi__ %U/qF[궜Ҭgl\lpbR|7#tb /FW%Oa=*ohnnnc;lG}i[=Ac@;.N喛ݵ_}k}_~X |g;FD7 s []A'-BkQWMpѲ鬄gzC4xt<r3 =rq} d&:c6 #x+db5 C|rꛗ^W<,Q#u3ϹCa8b ur.z;׵;n) /{]47x&M<,xಷy40IG i.f>w Z5ax]—{rc2o%3,KiۨEɯ!#!鈏W>}k'x}!O{%;wn40ŧ=ZSimc+ii+VXc8^xᅽ ekuçpdQ ޲w^E]˹ 4]6yk,,\J[,W{WAU*ψ )Qyk{wg'5  Ay A.KfAhP+"^+D>ck 2=޽Cɸk]} dkvMr|y筹=Eˡ08(1qCT0'0,WkW <\*h> ǤQСCk[>|V5ߴ5Ves |pXFZڻ7OsliBGޕ}"-on낋^7 V)C_MHUIH'?:3o1Ad&L>!1¸D`)D>W>9M|LڞҦ>&O>ɚc6Iy^FJ%W+_A,혠αO|CrB/ x b>|b3 j%*-`_A,ttؓr|ṛ:b}TO!fL!E*ɰ|$Z>{RT2 @܂(>C a@3 cV 6mMGܒ0 P>Ňx֭S8g0R⃁ݎo7p \Uiʓ}3ު& p#} f 0Tn}%`@Wz9 yGf|n`\ga֍j3qIw9 O"41x堹wo\qPUK(YeB~~VQ%O'>~轿#,DhТ#̾{^϶ѠzmZ`z˸*y—(_u۵k1@/y? ZfioΗV)R&˒^I@+7ъ"3@OW*ڳɽo\1ǘnw?,<'8oV>oMMuȁ5t;{oBJfc–ycfxcSiqp ̒\|Qf^(7Tȩ'K_ΐ280ixO-0}xHGE=_vU0gFnպ-O+ [o?/N .<] IS8)t)UeWg^UgU4X?rm}=x ̺A3x#Hֽ>@ؖJ?q=Fq]!4*^Fq> 4c?jTXc1^+!mUFpݱf{@%cLFEқ73 { 2= GrǏ-Ixndhejfp <;}tE#(w]O/I L]zYtem5; FÆ<Na58Z-d y7b7ӎ8LmZc"fXm^|O[_n[n@l6b|Z,,!4 afaCi O"]ZB\{s vTQ;@}jH_ia.<*yn()G*{"fVphPO!p|R D%EB,Ɗ 9~5 d3&< 81lT%N*̖98qymWAxjazKOLo|oS2~hʎ/G3qf 4 vDi܅2F]>Dc$}/z텇\eHqN>D ͪ )[Npl4$%t)C-CL'ʁzr3ȓk;.k5?tQO/o{ Td9^FR Ied>ޒ1k:/ @S ZK0kdYil  3,{~v Eĉ,'Έ۱C 8 x H:$&iЏ-`# 363P-0lI/LZC58b_ iSE'<[t2SKq;j >P|Y(Y@Ģ2'S2$YE5o(:CiLtu}q~4V.sX~{Mݘev=ݝv!^!d'oZv[<|=vlI#¿~ogT7o? >K&X~ե.?"e=cf$; )xtuݛMÞ-CKYCKnjpC%.8f*^Ntd_Gi~!`4jr oCKZ5aNĐ2dՁ ٲ6y5P۳c2uK+ _2/KNdf;W$ZӧMT0D 3 ]#^!14$>?(\ hع_AЏta:TR\цѐ\PX\\vl臝95XBa)tJ[7@C Sq"m-p$-QVӡOdTS)1=ґX$|5X~;Y)O!OL72l-<{:3s:I{5A}L7fZ M{wXlҸ>=ck[l{DYnNtw'8ߍ1_৲[IYwf5դOfJH!ÑWӌh|1gy䖯Xd5X[oykm/9rJH5ǶDm+,lKk(shDPm7;^|1N.)O+# |N?gs4PkH­9vuww{*sCm@+~IC.~zZRZ{M0fLGra!r̜9 7S*8\'Š:) ЉU;^'ɂώtʢx֜|Da-+ӛ n_YNC^[~IZbO I0s&O+S=U7mvֆ]FCO1h8Гo*ῡC`Y~;̢.nGz%+#hiHEk #/-Myɗŀb]: :R/ [M+mV©80P@ Vq$>K᙮dv5VG(BlC8i߿tPu:k3 a 2Wo}p`efdzb_t%iq6:J/E%uhshwavqik Q .+^NBe11w~C$qUvx[ ?ж^`zFhpݵ%;?!ɀ_io~I'!C MЯ |P6pvŴlò)p(}ӴK0K, q)HӌZB   ନ>]q.3gN1 ;.5&m#`y̛+;O!r׿[1"j/uL>+C$VTV{`n TUB O}u02eW@~BVVy)+RqC~acT/ ^hreHyJ8#BPN;9C"ˈU4D eVוHt&9I}"{OP=+Wr@5d·t]v]mX\hjo+F?kr.>ά.B̭Md9$})V??!sg­#`wz . 6HEC1^e<,' |\H%4v6SPɒql3|tZŇWm2? QO.X0ԩSc3qm':Q/Rn 3ܶ4WW8|≬8+p b+8xK0@áz>$?xPXlߋʮxE  b<4G30kz{̴ ob,fB%o~Q%7Q}7ܸN~KOϻPaF˝4ϒH4֋D%δS$ =K>m7L]ex;* 3NB)[ dA`nM|L%ԥqw^9r?`=Ui&M\DJa'7![ 1/xcM~<ŒhC-7UUNV@g tw5g@P_\o6w4Ez{qۛԹ5NZądop Y- Q 2-;QC¿Ǔ+&4]|KÐe:[>ŝ,q$ q6}eי~G3Cjf4eiĖiO\} uҶGPt_1)T 4)8Ar.=JCHl04*!w #X<,Cmȹjbт:oa}y&z{>_ϛ.rs饗m۶]bnMK Vw`'|wI K|JB2bhkŊtkE؆E/[$8陋b .(- (a)]"M#h75.|i)ČH q00 id!GA,k`"Ӊh 18 Qڸȣ¯JW~_,Dl˪ 3f0<6nܘQdC-[gS op nrJ >@wjYi4MUVS&Gj806WC>1zڋ U>)Z&=/>i7n˺nngT%Dj p:=fۍt6F|.Zνt4jHY7kf)obgNk8]ixqb2VtGq6 utOqOC2*7l}EKWM͞.z?/}NW&պjwcsti(_DL]~@$iawLhJm-M'JL0!+p {Z)fOH,̰` z|O CC#Fnh9^^'IEiXq= N1{f]cj56″6:i,A'f:ef@@'G]T0f3k,8\`S4f`pNjp6`X΀fqc!]H{[y Z^9r$Yy?|KQCyk9io}tAd Mrеҗ,:4 Bc~6yKZJ Ҝ9o.63림lϙ]{n1'~@نjiQ3==!$2i:EtC]bDd>q.GLtѝo!uL}/۫O4Wg_hAj@}n̟K~%5 'O@=It"u0 oH[Y9۴˥+\џҠ//*>j0vqbЏ$F=<\@XF(xqfyzTǧ6_^ 2WxiP}ͼ:WԆRwU>mcoaˁGwzySgD'%˖#KtޞdC`3\ޏP6#>!UUԩ0,!M?^L`$ի} ʴbalTжCp!W~3 r34df'!-A/5A!WYwT^_' U"n |vWh`9zmT@Z FAm6~W؈qi5> Mpx)|4)axpA:X84] aLŧi[~ aqe_r/*+]7+듟:O3a-A52qi{Miן19xϐҙT%9$xH_{;ͦ;4" \K-~ʜ7ҺJўfHʵݴBGWO$Eq>~elqrdǦ3}UVp1L{ieH=-NR8l1 =񑉎IW^,^8fu`U b:l"N*̌3ğ^44Ige)OBI$(qMKiB'fQ=q9E/Pqhܻݳ4` Mx:i޿״0rM~:IY^\UU=l{.ɛ+O S,hbRF3`L*3XXnMdtLLadG\AڧQɓ*/Ni 50j;||^xU/gۚm/:,X$ࢸoG76|F'Cܝ :S:eK8m1$!+_MSD4'A>_4w`.\8@8h55k?͸^~#TXVP8N>=ftaS _=,80tЕJjG0o<%B9Ì[izN'NFJ Gu˫[ -p׺M6L:KʩFQVL ;4ּh궛,46p7fy%.`8}! Gm~&xȍ]Z 9<]G߅ǥsKqEC{"oA^}iV:o$G y!/N)cZ~|"8UœszcRd-UoxYz$^N~ IΦ',rr^,XimbDN'T&!;{V6BqO1>=4}g ꏯ={6Ag}W*x,'s/F@d:2?q`+lOϒ&qIO..LGE@#%ponId:OorhߐanhjGN?QFpRਗrh[ws.&M҇X-+6d92L+t  V]us!Db{J>03>91 vj \<>>E@u_. Ȉ, "*<r*ytf&֋+x:}Z.?d[X0}.NThVPxVNx(㾞(c.[4/ē-K(: @TCĸʴ^~\GjX96u@!Lw$韖va~R2k )F^]< `u`A|#$P7Ck|8Y! ϕUiA'y .$ mm,3p!710m^/ Cʁx7)6aͦqW-C=p `ZCĂeX Wu/{Yyʥ06a=l4_q[~/0lq#Ӱ#yK?m*ٻyv8u4CIy2)i^dSV^Y&P^$ƉV7q:ܦX Ǚ'6=R×08OERGʸ_ori6]E}!'[ e F TAqg$@&RqV4R|.EOg~Vk.&@2}†$ w$Ol#;kJV-[_? Ҳ2lgGnK'n:|%ǐ8nI/~Gz9c 4GEx ~kXQrTA?l|Z/<|^^? x: ^56Sf/ǐٴmk7-x%Y,xlm܃uE |fv]6̒c7]f'?*+8ۭi}E 93w[ ,:\s܍[L$d@$-iqx21p|HX¸oh_pVcg/#|$D&Lm9馛ig3hhjiBUy` 4$Ua0TI;b/n0S "ѯ[p^#!z: ]5K u`ӄ<|l!?X˥H:=Nyh+.]'" 2S!9 ?e_fCvǻMK.`oֆݘa~%&_LtbDC{{/m~ހ5-_c\+5u`$Zw|Eխ7+e"MlOzHwHY`(1ӊG(DUycwa!+}L&`6[Y >m.|iӣ]A;XvD-C9N. MNyReHf sd$: JARg!Hy#ax꤂~Z,(!-T@|"<$O>t(0 mw}ٹ3ϩ^.VVnT!ӽ1i'(?s.^ 7U0|5vN|А 4qp=h&(F9UQ"B9"VʈlAn#WBU )2J1ο8Hr%nu 4&Uzȇi4m'Hriio0N^qg·O?3g\ha[ZLL+$ds:H[A}Iqi26_M8͗iiGo^׷P;GqQA> ׽戕c/¥m[H[Mc4ڒ€GD e5?9{b0q8VOAq waJkHz̙3K1uv9mCg I}>*+~n*@mmٷo6pK r|Îycx3,y9@=؃-p/L#c(7"5Q:0q06HK^84DrƕV9O p!exTOګHDyo8*eCZ3K2Փg:kr呸r+ #Ie mQѸխEk0LsB|#U_"` b$\u|"c q;68d`VaʕpoeUiZC3Z2&!i#e~tRWi &v6%c%lNJ3ky(f3C"lۺM\Wu. {}sQ'g =@.;WQpTWWٳ'8bP BH:!y 8g996tHB,3 6\cІz|`tbA`ub6^zJ4A/nl4w'f͗HEnCiYK>)R=)t䅦ePo@WzL~#ޣ/s}|f՚̟YuW؜z"o^^]y~ x B]` O'"5!PǾ!Y(… 0^ff[#獏_yYR pW_i6E;$΅dxvl8p~5ı'@`7vx?mbv`,`g{a04ȫY؇Mmԟ p g":P'd5˱R*4XBYG&EL lz7*'ƫnԳ G >}t_#YޜOZ֑"} Mj(J јmn۟wsb=e)ūO͓큜f<1Fq-pyOotM[!"r' ^'yFv_ƕՌ4]h_=Ɇ=ȔO.y+“)g1؀ǐDFWf4@ʌ~ZWL:㮀4z&k3E2'n/9b̉ KDӽt#?ɻH4ԞyDy8[r,@l+MirTU%0ic'>҃b(O]ϖE6'ǴMɾ}_4_cmcYCCڼ5o2g̒vxm秥=pӶb@ ^x xDHeN1=q7^bpn{ hUfH ju*:^lTƜ]z+L߯wvN/>ت0mL3uLU@e'| Hxu/%r?m g&Lߟ\Dg=E̞]Ƀ~L>@ Hpimd`x7P[8ۜ|I\kP\L<rN]xsyDۘlxO(_.GA[*?50qX|Mk("/ı%k\ `e2[JNp?4~iG,]ƞRiMzӋA(ũJl37씥 &hT!|8t fvmFNp3^?47ûUۛ1:7_ i*|Gţ{Кw?em2801`^| PT`Hنy[KUl5r%1*@+eІtr`7f8OMg}}sGPY:(? q?,4ExgISg͜ Lͮ /Ȩ.T$G{Te2,[0uMOXț~х>evx/쪇86ա!eQ2,dfA9 T9י%8<1MP|fvz-f_N1@zDH⿿6c^ɦ:.~v8OMGsq} ~GAkxYl Aɖ'[((٧8N-rJ6Ky(+өXH%^}DQ} ҧۡwz[fP?p1_ͼI@O_m0 \cmUCYpAVAyMϗlgH!0L9gm՜c5|e,H(>- iOP&Onܗ Ϝ6([ 1M_>;%А3*<?/_+.ExyYx9&읿g;ӇqniB0ڼ!Zv}e,ϼ?$7@QN#Bތ٦m^}Da;׉q2xr82oi"h1d*'!pi`ѸOs4uP?u@TyWnc}֫a~_elQ֚)k>3y8ziȶfB*q`CL!dsc%>20/cIPw wH*{a$0PC-B =  oTm*_1eRr<{0jK[drA̜+ZV{xfӦM؏{<ޯWp}6!IcLO@Bhܿn\lMJ]z3Aj43-K+Hu~^_+H|*+j|b>mBf^V!4jl+[hc1-'k_~:_b|gԁe` YOqLx<5z,`AqtSDI\,/Dبj\COEU *zmi<=']uY^_Gl|d4S+^T^s^As h3g!m[l# sVyX?-IR !f0PO 3p0VHZڰI4G5<@Xq8an^GoiÁ$G@/3# O>)>^x!,eh@HbР@.i@L<ë_9Ep+ WAa LlI/Oz7p͇5x`ߖO(xI0͛ Cf.Xaf_AnA:a~yǬB3f֦֘5 ]ԇuτH:nk~ɒ--֙M@P:ۄqںw}.⮈;~~)_ĠeS% l}p2`Q`8VCPD #hNy8=eweQ~۟p6hdA]YKbfI5к2ϾൟčippDn]_\/dѢE2Oziz9$=ahP FxX"^;v䂤@_w;><sg<)S<~:|e[^]_Pa@Ȁx@`c3L ;M>/ XWk75.w;u'q櫃u6 )BcNYweqD3WY:P֓ l@263U7YE8,;Ad)mᩛ cO}Ǻ-b "*ShK @IDAT-? 1_wݓ;+JpL(c8r%@H@\l#P36k=Pb&<'ihU4| EIW^+?~ylpZq<kXTHl4 ppf 7J8 .]ى* 8w_'T]^$;r|:p*MW P |3 A_c1y xPibwbvaik#7B 8: e kʹ6b4/ݞo:fM֝yIl3a Ҷ. & ZYZySӪ:x .y2tW1a|?\kq 4V?zͱ?D]*Z!#@B}ixYL?>fcր;YADf⇁%GH*WJpq:8Ѓ8e-/?!ior-S,|Ύd `@h(@Cx=`2UG2-1B1qxgkieWWZ%̼D. O7Cp0< }ۿ*`{3_QٶYt2iU$ӕfU*y'O(E|j Q}yaB%BF,3쒕ǙGk}"^3fyfwԌUAsӭD]}m]5- -Gcm-NA"yKӡx:n>L&+ǥyC- hPaEcpl fE]}tz袋̺u묓<54_Ns}ZG@{2pÃ7b=# gh<Јl5&*838 ra6R8hd¨ "exƁ7LW+NgD$4-UL6{vܗ(:~tKW h zҨmV)> h[Dс^dA={ %ɫ~ ̌e }O{y 4uԬ0柘WuQ}Q7 =RcAQH n%= 2|-4]|4*h a:x)V}5 b7vڇD!_Ouɒ%rw%i,477cNb$PQ\i~ZTī ҭ/~߁t:;"d1 YR;>†E1РSWf#`L!,<ӬxO3xEPnv`l;+f,VƿTy3jtcOKSˊ$ nƝ^^y(+ő,/[.<){.V jwט_1s͵_NlkvL047ጙ3R~WYჸ?fB]G{c0L6Ț[ jP: $O𔕏'@>ɍ4̜9H>O~;Ν;w3uuf?>ijU騏q=8S0 :JLqu\WE^ 1+Np"Ng]@ : :§] enBbd00ξCWKfxٌ<^,;MS?>6A#ޏ+1yP>RwߓK]OfQ,ba+tTh;!uLh'G/fD(.J$E` 0=) Vm `&#J*P"7& <';L7?m;Dp|xs̪5c@BB]fNxc}X7C {8pvb09؍.x~<k l2SYQ.4.d,_u\}Ru+ţ4~KE+7H^>CTR3))N0:[*mQI^6yUFs#8UxmڪIғκ+ī|շf:Ѓ7z?~ZsG@a4+%~ayY(F%@8km_ 5K F(]=$c%2_q:B TJsL_ԔLiWf >i,|z(6(i|*vɏom[[05 5ꡱa waPwFA2?} %rU9b X[i020`\"|:ZW%9a`rH';#hmX7o"9u|}fC("c^>+yXb\efmH>󔙿`lp6Uf+\~IAq.\0k> ^ ‡V'&qlKG)4.ͣ ï,iR风:j<%rubC48(,Iث$92ܠ`ӼjTZ4 ^* yjT4odoNvV[C *p&߆'z8ږ# nZ.l@8h>o1fE.g-D"򈸇fB'LnW4CGg-8k>-o;i"SIȴա,:UIH<83bY,W~aK+)vԢq!Vs]YcHC i z(8Ǻ%y} ؊k@ia'nM~n 4L4 CBxb gTLWzI+&t77-*jeM$`/-ּ?/Z,\BlY6?d][MUl5{jBcJ[_?t^pxJNt?kbE1=TjN偞>7`,sWL>Wڂb(4ID鸱>~}5xjC*(T~C,'*+Ɵ= !4ӗc}OO9-#ch:ЩUNdP.GIs]s_Juufqͣd?xkmD} I^i__GuX|>l@'h4 LHhxP I6I+,9sL;anܗ %)yE H}7%Ҳ c YB  e$ݜyK̺2+ WlیWM]vcq_-v܏}3 \0P;E:S͙/9~-'u'SzRّȃC' !Nh`bn,IyuN-]b!.W9[oA3<2*q.M*gCNճ"ql9܈Pd @ ''sKO{DlmݲL4%@RZ٤Px1Nl>Xm=I฾ i 1Svt IHwqosw `G?Ha(8x!b݄< Gl=yBU DUBǣ  qҴ"I2r^)봊Q|o|}ŘEeo} lxBEMlH݇ @G?$-k+QL6ԴJczT!^ɊA~q}Hlďugnnl gϞC?2G?CpҾ@ 0* p \E#i`nKJBdP7!qe@m܍9,N8r(`H[04Lnl90F^k( 62`S^m:)G79ƥԄG"Ajh˖M.vV$Qmלr[_CRџ%<@}$OȀd|8α_:h7ɰ`,]q$a%mi5̟{,cvsիך?iSֲ=#s|tuTCn՝4T< {Ks@!! #^#`!}5Ԋel]GH8=٦>8iı wE0c*Ё#.@Yla؈?xh 9s͉'(l~g1*ϑCژ~ 4n͠i )ʸVv4NZ0P J^I<#V! (3#zCnrSR4o2MXcbDOUaN3%0p\ ] 8S5z;|wO m KY&trxsi>ʫ^qiq(kiT z=-cwyaӝLpo\3"qv7tߺ$M">Mb3 :bH=&?*#6{8 H+Y.ǐ i[ܲ#טy [7X|ϧlWoG7a6wk wQd>lq',R{2^ȩӕ$IhaŴCH\ p; k`%d+]cM;Wxo&Oh4Yaa tNi@6tmqϠh`|OC9۶#!/Jt:0HHÖCnxzO7_s̅?,6ZkTLy)>OMǾUVs _1񯥥Ź(KX ;}X7EG2@う; UbAӄĉRY1,ghGDGGbrc~>wF #O/ɪ\W+y/Pb"7x[Rb|aZtQ Vǐ Ky::~h"*1y)[&[az1╲(cȸx5fx_?ɍSO5y{\[g?T3 %USLgc'| PT<HȲ02,l?፮ٳ &?ðzx5 wecǶ| ’jsEeS^kFк/0gxs3 h4x;_LSF!tBcpf O(Ƚ_-M rqqbm m-q#3gy޵e7"f٨7z,򝛟0u>sy E"2tUf)4KhyUiK ޓQ~U'0u*ҋEP?I2*&|̀te29"/ÿ]c`}o߆A}yGL>\|G5٦Sa¹YK?؁Wzg0@k὘>n8aY,qQj߯V\µkBw|=WWghqV#M͛ͶmP}@#BScpSVF{i ;PC< ,UiuKG38qCgH`ōؓ}oȾu3*Ǎa|2Pb`YlZvu t,|LXD$"td5Ozep4qR<:-Ǭh&Mb{,/ٳg@yK̭*)N(yHL_^#n;T sL5 ".2v*!Brm+> UVi?tl27Od+7w m)u!Jzd s@T"W͚5rd+_/<2.MCC(p  N jf4IR %S&ŸYJr趗5/4:荛wD+<I@cI:48sЦ0?掛-3tJs֔tw=r"vCܟ0׼\3.ve愳_cfzO>6O}R^qھTp@e@< %eGP;BF~7+A?3 cNsW/ˇ: Q6j"9O[0~!V *VS`; ɩq- q, F`AB('?N2u((W`rK.Wis `7 ͛_4;wٳ7h#b ԟd@(^x*QP-7MhT<gbH1{W4(h;?> Doցd׶O9_~_k'faki?7gxl{+,ǝnXuYbhxEd8C<qg"C$qmWM e4CIN4{I§%ơ:U?3.4hY`4M߁N>o̶ޛ{TuK|3*3*(mdoDiD?fuDFikQq?ԙϱADapAٗ(2r}wnxq{e߫"9'N{7΍O^)9aFWcaT l7`PxS@AO;v\8_/lc$Ξ=-~a9cNr9L9H9u/Z8ѫ?nEc57] 0mV6arUgk!r_VKDY1_׾Cz3;~7Z%1@FB͓2D VZ1Th)?xp5+s-!;#Wv2>ʝ=Eaߢ8U9\bGvXad݆<Ŗ ,ͲjT6Ҍ--B-ljv^x\[砊>6.d8 CCdhovz>3CC>$=9} =#x/V>ӣ C es/~OݯLMۊ•*)Y8 )<?rQl7M[7bRjjyiqΞ r̼>wuCYf񳼕3_+rϵ4O mrZsKK_RG?*/kjytXy3kHb5,ۮ-[zUf P0]M0cli6*'_@Ȣh2Te?xN,YYy)K=˔g3IO yXFz=v^S2ZN?Sݘrx>!0qSh ݕ@p _^ڷ˲{耗ڢrCmcϱ뮑?ڻdG_9}꤮E,aQ;D{eifȞ屌YXg7 f,/JҀ]~WvB g/{{ 3O >Νs|R:Zߩ"thk_=rDh|+}R*.`RY]C9ʊfG Ap+ sdBat z܌PFUkYLOIeIqUաE.F>yavW79Gc3Q|2<6-4bKj5hTT!=p`U=/3 8h{z{=rGS|\<ΌFu#i-eD|? 2chKc_5  By|f"Pq}'_ 1`6O\i׎( | 8M~[wp;k hU_Fs=5w]}N/BMo<Nl)3s;ҧ]b \xň+ɯP$S K{۷gLfpLsGg͞G&؝pϱuj oK#_y830)- i2_ʖ4L+ yǼ}tsF\l#Ff<*=G97m㲳Ѫ#a5v{ˡcTO37u\`/fמ-){[YG͛B8W*5M u<5XaZ+WQ~_q=0g`9co37gVeΝpzSךO}JnF?CyWeC{vWeڅuz d?/0څÔ/6+YAj&xHaYnyVG*hO!Nzqy.g~g<N">*ۮ+r*C(0ײm[ne__&G.f2bkc΍hdr ni%Wp4Pcwl_w=쥧0GypLV2WZ? (7i!` cN *C0mxNe3|XxYޗSng 7Ý4=S˴f@?N g ILmh-5* J?º0PO s ;{v,t:xgBca}#`yO{2"qUv$Jp WlJaSXwx3 _yC?C++zp][@͸F6#[_q;Q@|Xb$_2 14f2Xw(|/1\zS0JqEo6pdլ>VPvJ0{"`6{8TXErxTLkPf\!A:on:*_pX}Xx Ci nȁ>o~5Q!N3飇U%Th(42 4vÍq#eqnC4*1f9T bMܸ phu%/Ӈ7@-@ludYOr9! aL{T}fȢxjXPVqQ&^Hre`!T^<3eE Aypqiۙ HkyL;ыea0%"Fh0 =>|R05arbFwRJ|Mr;v핷{~#E+[%mѼܵM2zC 1Q`aȴf} 7V8iªf} sҏ6r~F1P:` Z.g˷b____m>?_3mXrB:=lXy(FЗG-m1ffa- X8Fyf? 'V :cn_f9x'O{57Hkcw4ķӗ;Z)|l{ew >  /!WӋF9y'409B_ aAXE0ZsYOo;w՟g4vGpyҙVcc:bpK3f `a!Xlo*\ mG7 9=*Wl`"zSAI~ pvmC`$/`}<b#9tщ0l{'.B V~9uM3Є4cK*H6/gӖBxOO{=Y/ųėn!fh\fCȣU8_F}+C@lp<Éd/;.Kt+ |='AG6~,d i}<F i.]-* 5ES88lY.[ ˛Jo$Bj< oyc/ҪUPVxl/gy7:GًW_(ӛإ&%?\˴D%ܧ!(|=h-ǘ6˓,0$g_Ed NFK4^t4/?tMuL3{;ݧ)y6`,sxFytdˑV^]y{|_a Mk4Ӆ~86!~T;'zf\~y [qbX+W 55;xRW 9Q a rπWadk0/Kb"O2 >W>/|c#8j ~'q<9>kO5 p=Z[`.1Sv+Pv \Ɂ@K8Z)c]q nU}|K^|`댟_Ք71F㾃ϗˑ@K/Ύ_Jڗ?/7_$,ڰiܣ$s Z2㣏wHOMGp3t)hȗVf'F4:`˩WreEp=BqBO:*SǗՙ =&!(rx˞nz" z\FGq,O0q<=*22E뎝#4Fk{}T9;&@IDAT> N.I1=2 @/{tc#ȟjȨgTK;+ }J3 N ,7|6c ⭷xy[rV`ǰێ93&q [^*g1O1WG߀vjvwU\C)*H&G1Z<pBf/|3B1|UwbiHvc.c`ux>s8:2\ep:ݧWE]0$2ku$r'KA++£:@ee7ӎӲJ4o4 qH^ǎ`h-M^L3Xw'Sj4\pA`SmI2 b1 QqYQ¿{Pc~`g/ KAڞ~[W&˘fAS>H۔ Y?L g7 7zez)tU8-?η_}z)S?111px+X= x@WY,K}v 8f98ʯPT5CS ]ľ~oh8GhcqQyznY}OP}[v0#CIOD!O:-w<4y~jiOvr=*,\]LN]]0`u) vAC\­apf22/˫}&H(N\1 .VFd4ŋxyzD@ YcLBO\,Q[O .@O<,@GNMG15GEp3ց@zh\fSiit-[䪱[񚄵2b<c6<լ{[J*XHD颏 :Ï-o%v]eyOXo~nYR}ԗ+ K 5e0B:w2}6 %ɃU87pC<Ɨ_m ܵӹc43 [NG'pEeTBIP=)@w2Wam.o!Bt%€z+B0rXv^_.ZӁY O? 8@ n /24r% gg򖷼nbÇƠ\GYٶv3S|Nf3+5B4a>Yby xY<},;Z0b  >CQdq~HV]KrK~B׼ywż[}TnA`W0Dop:Z}hY^[̪+8O\C6Du# MխifX'֋Q8:X0[l<-h!\;@4XV 5嵣&/W>a o< e"@ZG I?ɏ/O{ -3z{P rG>zK dϞr~9z֓nw.2ZaL:  `2}}?ZҙGd=20(#' .-6 v^ٲm=>{}r±#C{՟v K7\$_t@6\σ t|6|V]!_G gcBI|@GmIahX@zɒ\b07^3R2AȨ(%7N/'4͂*5Joz `0[gpr4bTW Ѭ1CSFߵX`̗0n_"7p.cp1%SO[&(s=ZD-vgp@|s[Ƞ Xy^yv P2?O:d 2,uJ*PuFs]K֔L:=9?"$[v;e!مF_{H;O}5m:q¼/ Y"/J،E ^<} ٟV5e]Vx{xÌӇfxOv$ y4vi=D4NG"Lk]q}&3zeϦ1 R kfwYu;6)tqٶ{>}(㤷1];Z@5A]WD9eN\ػGzp/? N~9Zz3`jbDFW\Ux WcGӖ`Bؒۉgm[?$;]7љN޻}v#(#a|]r{Ԗ VjP &p -ϸ s~HǤEo/M|ϱu4`;I{W?.YX\,ӣV}7ALW 4?-ӗc" C[GtsAٺmlߵWvcaQ8rp\CF~8 'Ov>DrtCu˙ž KIKx1@x?EB34[qC7.c! +9b S]Sޜ 2z(TQ>G{ɢN邼edy#<c[%M6 L ӟU6S̊ zX8 >И0  ..@Ǐߓ!oأ¢8mbo(`e*7}#s 5idjq[v!{LSausH5rJvIW:jK[v<%3%?xiaNfFuqG˚kooݭ;v``T(F= c kA0 |E^T$eyvxL{pp0㥰JKqK^y dVw3| n`ZA>@_QaM?˦g=.O?ؐB5s2?6,8*&]`vcJw& ZSOىK23Q {EUe. Ge46F4\8${>('ŨuGq0dI5EyYDp['B-sFq/v͸r'aZP|\z 'wxq06V-ȑYAR<2M:s֡:ffUVo/1|?ex ̻zsH*jց@0+ 0wӹv8oWbƂ1,m1i5m^Z:jǘǥ$O/XjjbLjs.Sݽa(F؄P$) cxLe= 4Zq1&?5DZD cErx9>!_3O>`t35_@TZi@xf C'EK-m1Ly2K;P}jeB[O9e_tHo-i]d3ץ2ƨN8qV&:8dg'?=5W5L OL.6BMLk98 0+㥎^Y"zmnDڇчeiQ =K27/𩉫6@1y&HcGy?> N \ЈK~X@>Q z ?yo!]ݿOaˆ¾}~8:=y_/w S!1]WHXN82QA˭еKMIC}Ƒ)ӕ[?ka=E0x=y}?iT~.kb?WBGZbGPAYF[~tY4W-4Iz 0 -o1q/VK][easZ{I]/R阽-x)Y= X 7?u9[T,)ng \3/P9 XA]90g .#Ѓt\И wP?Wz>;х}҅NL ˨j-_K;r\qGOTMm!M"`jd2XkGO߂7<=@X@k]a `#u\?U< Eaq"6h Vp_ba:"_k,SN5$,b-Ǥ{&[owpbu {MmY}“0 Wdv CWPsU%pBWw.j:(tg! _ܳeS6+a}rJC;qCj( n-IPGa(#;HBQ5.x{5`&+iγZg_XF-iejt`Q;bb9yP!7"^*ކ8Wfsqo0򝉠XYyQYӰmQ$|ۍ78@eR8G2tZބ&EکEK"{_>ޤ}Fˆ#~xR&0 v L=zL+s~eC PQzor]85u gzR4xM{HΠ2W>ʝ·Q.`<-\p`N6by cG=D=5oAPj/S^uL>e ?"+xxFO+hX,]f*!;ܦۥsNup o|Ri+1L0a],\:Be0Lw &l!C^T{q2Q? P`ʨU =,K  eL?PXS"o(|lDSQ@w-s0F/\6`%<| y|%{Y? 8 (SvQJFAVɸ4\π@Ǹ!NJ7,p# ft&$B|[{|D@ߦ|\`xg"pM]}_0.]+b@+1X`0A-o0-t2-?p@2t {honNT]yw[7Ŷ\QD}|(Fm~L'OP8!~ ѡԸ/Xyr,U)P?tDn`,fD۳|xjC s8I.>Z~k8=3s匝;w=҈߮+ccGaaHc[: \Xi;p4 x5X+;#̌WM)auVThLQY{;3f>i+$-m//^e4o LFg.UI[0򕈰^i%ӿоBcTnp+wE i( 6r,`-g-3% nԇ}Bms1q bF.d|BGv=BFQBkt3U˕n?'vR]9c+ w/y}CL_!E@R88+O8 DKC+v/}#(F,"G=։6p\W=>¡̌q*3>)>4)jg c|$R]Iȼt@ ncG Ո7vYN7)"ױ8x`]/J A@ hGh(O .x ~8[NZB8:uzcPŚ&u$v`LlB(`d|J((pGJǰ 6p|)=sJ(*<NtA.9]Y?S\̘]9Py{:Erl™;qSkp #'5r k0\=Sy.Lۃu_wT>XP)"vqF"ij-0 Iɒۦ;q v>I7MbDan ¡CP(iX@V>\ix+2hƣ5¤5@_w`VCdFLkP\OMλ-:[Bx[$rRG,lYeNK`KFΏc0FƱA-u.ft\OcڀW@хj7O|b| P[$(/OG >xh܂wˆDb0(ff WB֬&Ξ[&M5qLub gt_27yeΖNAƎCAOl ]483-DĬ`^# =1·EV~{̇{JT։Favl){0pHy} |W3KȨCW:q5 3m^i? 4pds@Dtu-pB~lrbYta k16I(':ګ=\ 9Ud_O٪;oW+ j{v+Xtp'a2͏a_8j lA Gq-U%ݮ̇(pF<~IOl$e7d N%Ճk1UĴ~_鿔i8:zAc^W9^p9//7e,U2+ͯ`ƍ!LmۖE#/7qCr7}xHy|GWp#c_;d5+s1| LC zYPA_J"8m0ƫ1BM`m$79)$ LWS+^B,m^q)`*/^l[h- ?vťF99t4j5S𬈫Zq8 .(/^3Az$|S$[kԤZ.[Mzu-۵y7v>ӥp匝%:]ҝp>|͆eB{ןX|HgPa'j=GextB?eup+ '[0yf8`yef eʔ ^FsÇ"%Zei\oCO|4\[뭯`(  b#/r#W~ն0 t =G![? \Ss4D!0Xx4q Q,锑KKy `ұp7?vƔ T gGWZB!ô/7/K#0ݤe4P oYC2Y>ՄˊVj,t[DxvCa / caF‡w<`}<N=HkNPɾ̗mtHΌpSu9]혞߁:U3?#Ʊc. +#ex߶,һ9Z՘;lķŊٟWe[iae* M)^(zZ !y֒]QP>0K;Fa[zC5nlŭl ncBWwOt >tbQcVcX 9fI>պ~.N y"ӗ +m'~eIMe;keᖷ</ݾH$,'Qֲ-C^* /h .]l=ߏ푸.d .F##4;^zB5r[#y$s+L\U<QF ն·Y"9?q[$Z:*}N|?WC7xۯC=n2Wp#@qklbZڗ .ym'?5`?ZJ:Z ^ى_ JJȥ]ϕ]!]N=t/0`[#QS#=穑u,"+Q^f]H\Auj(lw湇=uH^hA"vc-]GhVyC"PTqQCnmf((_% h|J un&nVIGԆFPr^#ό/_Șnl{M01P{:^*&M`4W7Ō4HnPXbEnΥYxz=M[Kk>/pU|U~ ;['z[9vN R뭦.2 'kr>`LO!i i`u5`?Z\{aV(zQnQe*۷^=!1 K5Ҽ% JvҌ˚Rl3 Da,  6i ⤁g[&BS2fx[/X]VϢf#2(^6W7OF R[Ȩ[#Շwqj$|(0#.0|Pfe=㼇qR.HFl! s3hEl ·FnۺGz6mNόɧdI +8ml<=u.C0=z'8~pYf4/EM„Ν;s#p<:K餁@OHԆCE *at̾Cd*iW#yVK]x2C[# @#Ζ'@(,f(`, hȜ.:XZyKXNZy]5X6Tg7nr!n(fE3[UaV0 r("{j``K؀XyrT( |(L‡I3c1#3 ɑonE h41:Ks2?Ś~I}k􉹾8aބ8dT:/EmaE"X̵m`` wlIO Z-.HkS^#plƦJ[ڵIoWF\A6OPX3-w;&/̽u5=*f[M1a2r}Ti08ϸE07f[Yv)O^_cj;ƦFB"ҋ=Ev ]a ObDA]Ш;Fa&pp3NPT7ɕC8ߏCw]'#K'" oVM|%+.G qY'^\yKXb1^t}_L)NHhI Zkk.jFC+,R%{_ p!c 8SK8җ؝ͱt,A*`oFE)poa_*=pepӸ^ GTae`D3/ꁇ)]J68EB@@Ԁꑾ]*4Yu@4$64rJoL}_g{v׮]=ϟbiP=mzֳQLWj(FkTj_MtF0e,7R0e!^Sf rry"O,0TIJ' $ $ h |JxZMgWW t}~Ch&$c8A 7kt 0]ǣ)5b IIIIu\<%Q 4+i`"wq [-21o25ja,P&plVˡvK*#IHH(zU*o Tul&`:r5sUie˜,/J] \b a :29[[V$j q> r[' !BNHHHx:hZ1oJVT#caea ap8`< 7|A@@@D&rl>b™ceЂUA&D(l[__sp胁S)$ $ $ $ $ <40vY_y8.7J/e QyYl<,x՘*R44444]0>a}i2-G!5L` fo<D]$i i i i i`]i `eَ}j6r%@,-apc3ٜ+i i i i i5}0l+H'-f,m52f\P9 bVMܘqJ^ze7'EF⤁uq^rOZ2<< @ Z"x+ҹθy@` ۱cG{$=fw.+"()JeR=99)|4VQN=uՃSO]4*w<kmnXLڕjQ-FUae!jWZ Ьn=76/tW'((Qx#@5F,ɧ?iyի^UFIIIIIR\p\¾V++aW ^ X,VIz!,~+%K /~ǭ+3 N|K[;@X!| _,GS&i i i i i`#jɓV⾓VGz J nq q8 r]w^2ٿ5T444445p(+K]KxuE@ÒKuYXX=wy`? `|n\1 7d.y+mϬx8hp`PM$ $ $ $ T@i 4Xܶ9AḌ0 yrZ #//<'/ t@OO.rSQ@@@U@rdhܵx|r'Ev!-"Go7cALG.F#n/w}Y.(?s҉aAX)$ $ $ $ ZH 諹Ī[`㛋ߔOmaܾUZvߌЃ @gl70矀0}G oz9Ԓ2IIII%h)_qY"w˂9v#KW%K;|? ݳΟhpJ#݈;Q12ٯȍ7흷)fe6[0ѱbΕC Etxvb]'?._8QN=Ѝp IIIIð$k)X)?]/} M?9oW&|!1Z| fzvL ^7_Gu=/'"eH^s*IV -e󏿞[IYd=8(&t]G6Ӷ]ŔA2'jf98 ^7ڿ/'br)4444pU4 *jdQp܋fίy>mw``hn  =0"!poFgaڑ⤁@KZS=qQZlu?;re{[`x;`hKˈp`/b L׌LMʖv,,zaЌLHHPGb+35e :~> {X7/qi[n< ,1tG2C1ցՅAX: IIIIkdrs<mGOO>v6 qm Xޏ0aY׎p / #i@U$ $ $ j rz mK<͢E~ي~wֆ~F%0(8Jut4kNkgNh4(#%ZDi ʍ(ZDW劸.ó}C=N~:`p\ c .\Xq?; palY_vIII-4PFP9{z2FOpn܊q.N. N~?G?5#8g zGa=ڟ⤁dT}On]zĴ|wRd F9  tg&P^~j2ZCՖw/C+oc@~GSp?Nc Zaq _pȌ?.ӌX4B:喤T@@@cקZ>x2Ӎ^e|_v?rmYy&l@@@UVzW_j[YV+ kEU-E៕̽F>c3+:vPǐI2Qo /i i i i`em?Ԣβʭ2RJ R(0,oey5ֱ>cؾZ'UI~O㻼VWC-.@iԌ@AϺŠ5:9T ĉz$v84 ⤁xjMc IW T E0O$l*b¸`[ݻWv-}}B@@@@@kk`jjJΝ;'O֭|X9 }gV8J  R7^TgϞ^ui^%+v^ܲiz, _+]dWֿP4,Ϙ,f.pd 1Mvӽ⪾nt{>KX IIIIIOk `; ZtϘ GĩX4Wp JG FYۿ7 4 RHHHHHxZjG#F(@Iuce1}݇D1Ϙ-f@n$/|-a֭B@@@@@5 {>~x18';8ˆ-)tp?o_qmx۶m0Q| SHHHHHX7S w}?ɟɧ!u᰿m1[_6`E9XYg:r:~8 aL(ob`  ⤁F48AhyvsL5։ۼuqvkyNb>`u[lPDò2ѥ8i i i i i`RB8vYoa'c8O700T1bbb+g n2"s ԭ&-ˍ7Lx" q)NHHHHGk`y.|Q_zM~r+1 SD9[Yۈ=Xߊڜ\5LчK?U T*P>K9k3>yzs=wv=f~ 楸(9_´E[t?~ N0HY+V*P@HS%uz\3m̿ wΈ^.ŝ^fļ8/)kh ȬOO΁l0Υ֨U T*uyY ƳC1D#Opq r|+}|19Gg%U T*P*%_{Ӹ.:Ϗθ9ή`:%49 /Q9/gŭQ@Ui&BY ^%]x\CC@OGy9=͝t/Dž5 s؏h"`̑šnX@U@ff99>Ep =+?c-u?PL4\^ yx!^M?QEg9_>CU T*PT }\bDM\SH 1N(Oi}0,"ȚKw#|6&7@U <o\2QpPYVZ}q0@Lk.A_ {읁fS'GMQ@U 6r=NKĿ둻df΅Xg|0HǃYsUCG Yso~ɷ҇FU T+ ̼}׈65rs3ξ|3W@3#N5뚿#J"g>~4U T*P^Q@cܜ< Ϝ3=۵炄şw?rk\&a/"~O?9ρA^@U \Q@ϲWbmMc Ç淖=Xaz3afMN(~93|qk~gPkT*P@c.q4o/ rcrc_j./Gke'7癉m#fG T*Pzy4prͭAx ̓ɹWs79x T*Pg)+ON+`Cr@gY?p"&OXW9k Z',*P@Hǜkpr#?X'X1ˍ=,r'rp5?"=3$gxbU T; ̌ 3=i#gq>yZ\$uLO8Dg\'gU T &gk05,O.?n8ߵx?|(W{w}c8{w]@UGy䜽2앳'9U->Wr?kr\6r_b\}+U T*+k͉7ywM@'jXs="əw=c*P@wXm#r.9gH޷U}YE7\u_J*P@*0fcl?kh64]5Z5$^*P@+n$g(]VW啙%%f9k{U T*PU`4YO撻&^0]e-K FuY@HW 7&[ղj_Y6g_K_[ bU z+=)wI=KX@U/)pZa}gϻ,^@UW+&p<8-V*P@b/)5+U T*pGo3e{4W@?_}*P@U T*P@U T*P@U T*P@U T*P@U T*P@U T*P@Z6ȨVlIENDB`x2goclient-4.1.2.3/res/img/icons/x2goclient.xpm0000644000000000000000000001401514447111614016113 0ustar /* XPM */ static char *x_goclient[] = { /* columns rows colors chars-per-pixel */ "32 32 242 2", " c #353B54", ". c #3B3E52", "X c #343D5A", "o c #383F5A", "O c #3D454F", "+ c #3E4155", "@ c #3A425E", "# c #374263", "$ c #3E4562", "% c #33426E", "& c #3C466C", "* c #3E496E", "= c #2F4575", "- c #2F487C", "; c #314373", ": c #3C4A73", "> c #33467A", ", c #374B7C", "< c #3F547F", "1 c #42434F", "2 c #4D4D4D", "3 c #444553", "4 c #464851", "5 c #434559", "6 c #47495B", "7 c #404561", "8 c #444A65", "9 c #494D63", "0 c #434C6B", "q c #494F6D", "w c #4C5165", "e c #47516E", "r c #4B546D", "t c #545564", "y c #555C65", "u c #54556A", "i c #555A6E", "p c #5D5E6A", "a c #444F76", "s c #484F70", "d c #4C5471", "f c #4D5872", "g c #46537B", "h c #525672", "j c #545B72", "k c #5B5F73", "l c #555E7B", "z c #595E7B", "x c #5E656D", "c c #5D6074", "v c #57627F", "b c #5D637A", "n c #636474", "m c #656B73", "M c #6A6F76", "N c #62667C", "B c #66697C", "V c #6A6C7C", "C c #6D727A", "Z c #777777", "A c #72757E", "S c #73787F", "D c #797979", "F c #334E85", "G c #3C5183", "H c #37548C", "J c #3C5489", "K c #3D5A93", "L c #345A9D", "P c #415587", "I c #455887", "U c #4E5D85", "Y c #455B8A", "T c #4A5E8B", "R c #475F95", "E c #485E91", "W c #4F628E", "Q c #516186", "! c #5A6482", "~ c #53648C", "^ c #596789", "/ c #5B6A8C", "( c #476196", ") c #496093", "_ c #466199", "` c #4B659C", "' c #4F689E", "] c #526491", "[ c #546993", "{ c #596992", "} c #536C9E", "| c #5E6F99", " . c #5F7194", ".. c #646A83", "X. c #696D82", "o. c #626B8A", "O. c #6F7287", "+. c #6B718C", "@. c #6D788F", "#. c #747583", "$. c #767A83", "%. c #797D85", "&. c #75778C", "*. c #747A8D", "=. c #7C7E8E", "-. c #616D92", ";. c #667394", ":. c #6A7696", ">. c #6D7891", ",. c #6A7A9C", "<. c #717792", "1. c #7A7F96", "2. c #787F9A", "3. c #4F6DA4", "4. c #546DA1", "5. c #5770A0", "6. c #5C74A3", "7. c #5774A9", "8. c #5C7AAE", "9. c #4372BF", "0. c #647BA7", "q. c #6E7DA2", "w. c #627EAF", "e. c #4976C0", "r. c #487CCD", "t. c #7E828A", "y. c #7E8293", "u. c #7C829A", "i. c #7284A3", "p. c #7C86A1", "a. c #7184AB", "s. c #7887AA", "d. c #7A8DAC", "f. c #6683B3", "g. c #6C89BB", "h. c #728AB7", "j. c #7E8FB1", "k. c #4580D8", "l. c #4C85DB", "z. c #7492C2", "x. c #7F9BC7", "c. c #7393C9", "v. c #6693D7", "b. c #759EDD", "n. c #78A0DE", "m. c #518BE2", "M. c #69A1F2", "N. c #78ABF6", "B. c #83848D", "V. c #84898F", "C. c #838591", "Z. c #858990", "A. c #898D93", "S. c #86899D", "D. c #8D8D9B", "F. c #8F909C", "G. c #93939E", "H. c #868FA2", "J. c #8C92A2", "K. c #9296A5", "L. c #9C9CA2", "P. c #9D9DAB", "I. c #8193B4", "U. c #8A95B2", "Y. c #8194B9", "T. c #939CB0", "R. c #9EA0A4", "E. c #9FA0AC", "W. c #8EA1BF", "Q. c #A4A4A5", "!. c #A2A4AD", "~. c #ACACAC", "^. c #A9ACB0", "/. c #A3AABF", "(. c #ADB0B5", "). c #B3B3B4", "_. c #B1B3B9", "`. c #BBBBBD", "'. c #879DC5", "]. c #859FCB", "[. c #8EA2C7", "{. c #94A5C2", "}. c #95A9CB", "|. c #87A5D2", " X c #88A6D3", ".X c #8FABD9", "XX c #94ADD3", "oX c #93AFDE", "OX c #ABB7CE", "+X c #ACB8CF", "@X c #B1B8C4", "#X c #BBBEC4", "$X c #B7BECA", "%X c #A4B6D2", "&X c #A7B9D4", "*X c #8BAEE3", "=X c #9BB7E0", "-X c #9BB8E1", ";X c #85B7FF", ":X c #8FBDFF", ">X c #91BEFE", ",X c #BBC1CD", "XE.J.qXfXlXnXNXBXA.", "x BXcXpX5X2XXXx.g.8.7.3.` ( E T Q ~ m.Q.).).;.#X|.0XdXgXbXMXBXA.", "x NX,XT.p.>./ / { ~ ] ~ ) ] { { | +.e.:.`.`.`.S.1X9XwXgXzXnXNXA.", "x NX@XJ.>.! f w e r r f c N V #.C.D.&.r._.`.eXc.1X8XqXgXlXmXNXA.", "y NXuX+X{.Y.a.f.6.} ' ` ` R ( ) ] { { e.y.`.eX,.1X8XqXfXzXmXNX%.", "O NXuX&X{.j.i.f.6.4.` ` R R E E W ^ / 3.I Z Z k 1X8XqXfXzXnXNXO ", "O NX,XH.>.v r * $ # X X . + 1 + r.+ 4 2 2 0.8XwXfXzXnXNXO ", "O NX,XE.p.;.^ Q T I P G F > > = ; % L H 4 : 2 2 7 8XdXfXzXmXBXO ", "O NXnXaX5X2XXXx.g.8.4._ K H F - = = l.+ & N.3 2 2 '.dXgXbXmXBXO ", "O BX`.J.*.b r $ $ @ o @ o o + . + , J 4 v.;Xg 2 2 q fXkXbXNXBX1 ", "O BX,XF.*.b j f e 0 * & & & & & # M.3 : ;X>X*X4 2 4 4XzXnXNXBXO ", "O BXBXMXnXgXsX3X-X|.z.f.} T P : 3.I 4 b.>X1X7Xs 2 2 l bXMXBXBXO ", "O BXrXR.y.X.k w 0 8 8 $ $ $ 7 @ b.5 a x]/tEGZ5NU3Ѳ̰Z8i2=*57Tȍ(25!oƉUBq*O_(6ұ4u ܟG,Gh'1`

4~R,hUJp8z*6j5S| 6g룁u\Iqtsq/o H\{6q{~ȡ0%&,2hCN ~;a8{m?Lrbtl ֎C3sxRHn ]$Ќywq4*]BY&9cWߒ"C@4nf{ثj /YժJleCzz(MHnO}̞e+`ͶpH\z{ʴ Im!| LB1y=jsMB{Ei> smdarBcf|r{=@a98"բyOBΔnFoG7]AlIϼ4d[ \ _NsЮѡ"`bq٥ŖއabMC}9֟]{u~*0ԷXŲ'^AhLK\v6Vpx4jϾ՟}}pg?7Ƥ~ؘjG|Fa,TBI{1&d%Py4S^eāɊZ1{ <IK檾&6G^pYkbR#* hIJ h_R"קߤO؊FC%D2ƹx+2 ) /sx}auw'P8TbG2wȣU)XD2M۾FPmmH`9m3.^.5' {ʌf&}CO]ryaU$9^mNt -Y-=om2τr6  ;q22]YH=eա_mu$D"3O6v@bӥ6_@ (eqQ+'cXjL7Qy4®RG3 bğnN#b)aδ%&M' m,NR )x/Ė3I o]q1$6&MmKq67B67 ⽎PO"Dm"im;>Vs# ܗlENL OPywK2sqn`cG`*PALƈ>CQrhϋ,ߝϾ՟}}pg?hh kr}*r5Z!jqC/Zc;um+14㈩KGI+ t>tekϭ hQsPtkI3vkKPӾX}9=4CIgՃm.*2sGiFǃsb6bLQ3OlJT;2M۾FPmmH`9匽`h`;`L0?wc2Zi ,|ylY:2EjtQX:ʵIyns~"֘VG? ܔUm ^1bsy 0Fk<.Է  !]cr@kU&\9pF<a_i|߲JA@ NlնӇ.ǡ|IC v%Gݟb9e g=<"Ȳ'AeI˶uzܯt'V;x!12hqVb.1I˵9Eye,N-5G9¹iB %NwCxor~w5E%OD[J(zFSacgup]p.h/ўb=8gƕ  gpvI*}Y8%zDzFj>>|<ç-,[}T\ X|*A@jKT(tvW}Rs;2V \SUA4*ƅe] 5"D%onh+AE] ~Qw-}dfڿn]^^n8]jNד$y2 r3n8OJ-E 6iړ~P PT,J~QRͺm8NKP*@oH(TsNJXs)Ń>͝hZ{ 6& B=cJ6!mO18ܩsi5z;Q#S|/K|PC4J1d.f˝[¤JI:7gTVɛ/KO6jp&l|p`&4q(ͦ[^nyi[fL& e4`%Rݎvـք4`%2<قR[\8DOpSBFClR߇Fq4 J&_ffVd/힧  "|(+`<4GodXCF⢫P[lF[€ێBߣ5:I>M]!<g7pO[# ?n=6<Bذbq(PV$8aSm犲&ȣPT u9OpGƌC?ą3#Y+Tg,NeG,P(Jȇ;ϧEjNg>۠2YԎ5v0uco:Ŋō/ ݖ‰M#fMɼ]gGNLLߛʧlu<]Eπn&& M=zJIKbSsc4[M>ݍ .>+.̨'RR?NRo_2?$+rLYaAZ|P;=m#f]Tg<3I^Lz,>/ ΌNoUiq*bˬp J<п{tB l[k4Oű,,U%(Y9{!7O.jgt]%vU EgȹZ s[1Ck&2P="T^Mg4u1M,K8kRGBe?X3y@:O~ f/&,.&J0%SWR-7!ܠ^/#}bγg{*ϻ/ 3% B{:N%?kIZwIY$٫m쯃6u`N]ce Of A3 a_If: ea6b'p(Z۠nťsf2M~ˡ&@V@YG ~Jmڈw6Y+d)*z3d(G=6Ϳ52ĚHQ-3+[,M + a7'Ҡ50R(dd&'ik6 O/o@>OH,hϿ?@&G9s5GU+2[vƬSp_HeDt9zN>H!&YZ<+jDlpP@XTl 'sۿ:~HAXU[?>MrLq>ƬP]][>o`Ąi[O ]- T[`.~"Đ7ŐB9a!EA:k?۩4ҡʹtKeW}`ɥGڦK툺TX02'E<2253=O;|l5v:J&U'˺ݺ).yQ2 Jj`dwW߰>Q7A8L6vHkwj9w,qIigϼm;l#H.H" s힔A5OfwwSZrHedDAGz>oEB.6^#-VS.y5|18Mӛ6RF}9}:#̕qܿr+]< dfAYХLжB5SX=Br֫rA%ã_ ĵ)\bڔ8n]MrWd/4r*5kk) ίVj^0V[>9.PaߡM8ٝ@?+mY-͗/`O%?o GZҵؓƸ&M}CmifR2gÖw̤z.p [C-}T"qVoK t0 ‡&F%s"Z73!"]WE_as9IjI%C-Xs{4 |?$#LuЕkIH`!u ߀s5'ޯ 4\35M ]ST=d~ ]"fL$*DۼH4pKSTq-@ 4T 6׿/8^Hf5%{HWPY"_ZZ4F5Lܲ}w^z(-VĉVpAbO˶X^-oaCUo0`9M*M:î;g:MdǚOf7iDZ!ŏfNQuΎ!p`D x&@_t 1_0&ܻp#Ԭ-vSLQg(0 xjsQǑ%rVA: 3pM"4V m SD'Xo.[ް$Vɲ3j H.]h&۶83zC'Yh=q85W|.Q7焯Q1Vާo8g|!rCcuO5S]XePzW|z.eګEG?-幐04^Y+.e+_4#Є׃TK+EU4bc|u]L5;@/1|gy-:J7YFՌ,'Xr⥇E&ߟNw}5#_ k}NZ`sÞCO 5ǩ6".뷏~c!.Iob3|*8Bj DH)ǖ\F!w8Ứ `{$nzJ`,[-_*SnBr1zTUΌ@VTHa?)2R6aϰa#@.᫣(!R_iu3op#vX4CiNKΈ XwV|_#>( 1]O6VR;a>=xUJplO`KzĬJ<鷋F80XbC ˣr? (#-ҕaՅjLC-c?)>Tὖ|5,ƇWLY־c^8:ZQkZA.(˩4\9el(,x8r:TY^qża0J xI;RL"ǧb.: [آ"x"v6D R=i^זy'G]*Hs ө$ ̭JцSU=^g+ʒQl 4ٽpH#)M\q4}ӖWDO5HMX֯^5Lzu vHt>JY9̳DeO6#{Nz'{+ږQ(c iHWk Dr K9:9$cCoqWH~''j,c`w/;#i`*G:2)5m6,DKruD @R7W αIgzgG>`pK:6zTMQ2GY#Uɛo|$(3TΨ,k U?(A)aohQm}km|֏L&+xuf,,Sٹ]2M}+Ӣp.o޹.{hXWp[(V_ W-g<[4ü*[[AImԒ+:h7.49i/5N|P z0$1cD~BC„ %HAE_2>Qz0E0HEhm?]hDvMAjm`)|Ď@qNg(^ǏχDb n /ÉT*R E0#lO"gD t|2l_(1s0N%?2F ‘# /z.m,!&Kf(=K ohM n{H%,Nzo@7naզb-;Gs3睆V3ŁP  <Z^0CX"M=***u#U$ qC<Nta|Ј>‘Hkn*{ jz/JKb7aCm7J|y57f⯺ Ad F#4ɫO;+%K8 ^wCazI񥳏hLr%(g( <h4a2R[UQ׈Il1BOvxnѐevi99hi(Sq_9sn4I[Fn:K*SreK2초֙vwF5j 6ۃ7Ծ"K{ GqP7Ф1`Y~L aH:x4@3$Jm$ Љ1R{5#ʃ= p9~+u4Xnpb&j ` <֍}8awu.1"]XS҃7!0[ ,tLBJ8B^EDO{ s8&_-O%=ʏy0JE#X>8yv6y=w 6I!C)\W|L(j2 {9![~y3>iT¸zJh@M?W%nXρlNɺn be|JW$PT9=@f>v(MRqĔz3=fN*56*H:X"p*`?C"mPILv| Y;gdun/N}V!x)/Pu\wط-:XvL1 S@_Lad aV赭^Yex,zhM_j1.K8)2v۝Q}JYgXD "fjbVc˕gW8  P[5AWj;!$8)[2]w(f)U2h,`$:;) :h.5ԗ)51d@ˡQn{2[x̘Q-a>=rnaaԬ#>  SBGy,% Le.[o_A!SQw4Pc% /Ce˦GBbԝ6՗ڋTo%1tme_73 ){2ItR]i>)KyoUUu䀋:ؠrҖϯ-R y^uTڒ/A2JH"<&q7}-E[瀦eH 9mD_I3@s 9kD]n]6Ibb!3aj+RJ;짍芭((3="UrTtVՅL3<_4x5W8끓r5: UqnoZvdL̦ωyi^] .I>xͦTHn;>6З$ ʙ55bW:v=j;nO D8ϑ{>_Epĥ#a77̢_ f9HV݆s>ɉA2Hs6߲1k $u@2 J7uS Z6 m_d1ɽoHͮBӐqS@U4ufy/h&|kQJp׋OzZXUH$ќ!ӔDv?(d}X˛!"%4>JaY m?Vq#Z{'9LB:3Z&{AgMK|Z{1\j^y`ӄ+3eKrHA-W ީ. H 845&[ l0tI"+emCX&B䵽Y\T:c|WV"4Px^P5dXeL 7BQ\ɭJgh$~{ƌ[jV'<H\/'.Fc I֬DFփė03h.h=>ޛdݮVx$1JzS0OK.y>ӳĈPB:9Pf`hS ; Ml㸮؛$@{XvѲ>SQ|xxv{`u{CηEwl^M4kХ^:צXfLO3'@5@^x9CN_C2MoVG[QGAe7z'aȱQCa`?c2 )Ŝ(?.t?R Zxq%̼hڦIXlRQBlHdd1|ڪ}_|.,` 꺖|LAO EsΔ: TMOf3zόPY!B<#xGn:mꁑԣ.V`㖹s@!&pGbusyZs:{6ҟڦEv:/_2=w0"(vDW`MIXcMۄd[7S)AAYӳX}ty)E[ߜwY񦥏Nv٫ϜVȄƈ A n=@J(}.p QԨhXd:i%3R H!%)lQ=X?yθuҒH2WNpVd =j[&˂M$M>3ڏ/'"q˽pt1kl>[V%xbЌ@~#1OJe ı&S0 zMVQB0?et^>-hp?9eU괅nSqT T@XK˪ +hG_5މgpq]oˤ:Dź I{yG!ŊN;մs}EpV/1B B%%>v>a7;aT b'خ0BYHw#F1 b^M{j*^XczMsn= G__C[sž>ύw'gX NF)J)HAtѮ02;T̿y=dmqHWOT8п+"BTG' IE{oUǏs{.r$3#-=\+5i`}GQ*+Fū*iKpf0ИU-^~΄ker}h+rv I>бϑyS|{}KGݽT_lT&Z]'wH336#'".}ݡGryҺ$:-@d5.z>P hYlDZ3c(lC#}Ԇ6L7ӮBՄ .`/"L/`[<d:1ט=ޚ -{y.& Ok3 d4:B o$5j#41)f1 ^=H˓ճi;?YԎ(r_yrai(ZȋT-[K^vi6({S??puO3pC\O| g*KuabEӿّ~ !*r?"ę>oM~u 6"αN,LAl =ug熿|70@1Lp YHmn&'+S˿&.1itl C<ȵH:IG]M \kvunD9?4`O!݂3EOB>~\*Bv-!w@UVQmr֮y]d iը!ܟ}uC*޽y_U;agL1tK̤X[ehQvro n켠@aR]8svf4dHզ{Zll{8H۹luJʆڥ0;\Zņ̢`jN Lhp5b'#X}^Q4m#8CWZādX~ ͐еDRzk?^"-s4 z*|d Є?:X=K ohM&d9eP.A / Ƃ:D6ox>ʈ&Psp0?H'wv#bX,JA)Oe y$^6|*7C HrU ~qH!-i}Ǒ(L.RhTﶓځ=G+2t\l L nABp( Dl’`l@A^_ b r/@hqfXNT #<"̘DO`@G4}2;Oj @N¡SmmA@Eg m'߬<hͷD2 hZݹ  E.lm"{%~[2J:t2 -5է?hoqMaFN[?uH 3yH$ܦ"kB)Sم~K9]P Ukq3q,qc˅|=4GiJD4$+vß3(cé*q;RYzdVS!2kpG3*`P7C_ MU B#:T+&jsy\=hYk-o b y*il5 AI>=ꚹm G&;J+'$`4yZZC#V,8񂻯E&%t{T T GuKo{^e)e,6@ȉtbddFYyMl;3J E x3aԉf^1Hc^={L:`<Ԩ3|JEV!U1ת񥛸%\Hg +DG֪Fa]Ye[䣆 V-]_l:pFo*M>Qc2arfsf~Q7T4xUA@.; YhBs-SBei5NLR)k;RLVb~ddܮ25A313o]nwSaZ|չc+b/ȬxvOlB k <}Z/l(ol?ݡ.0zLh9g&L/WEf&P&]fv|I阜/G$V 6ɪ1&C sx>mqP~pEߌbxmBLbܞ`V\䙒 mPhEZL֦vz^.ns"e!f.s$ꭻ7 ߟ"Hjz z1+37d8RdW*)^mӁP,kc8!"]O1{{ 4-D@7фE u ԎL21s)`d )ģ@M +%?IXcMp!Hvjs 4J2#<W?ԺL&g[z_l_3Xy.WΨ *F§a1Jc~Z8!#h"=8y Jw?z )#)%VM=ck#\bܝa@ChM=D f(#@4~PS㔳0,4S[9Wu#\wt'`C~NIFRjFYˎ7ٽBdSN}喦}[%*SpA$%^H[%b@pvOU"joCجr[n'y3•gUUjM]LK0"fg_##ِyϳFP|}&1w:jCё>OP|Q=J<дf7l^xøj6cs dž] oZ5_Luή'>T:C-2|&wVDx8G}p*xAZKùCI1qLqٗg0 њzZ#?y֗j+H(7y,V țB> uDfbX@1baǤve;|߁k-l%YQ~*+?]bPS B2|ِўU;#>|~jOIs.(>+vLzn1cR<ٴθHb~X=c5oq=筸? Ѵ&3R,1]7eK=ԙn?I Q <z֓騋rdr"X&⁗́"3n$綑 XBdSVmrXe3:Ap]wAWr(ULNwF&|oLN=F!20IMZ22a89a×pOw&Qs>֥avDz|xlǞSهM# %9/D=dsXĐb0.E`j~YL+ܞĴry-:INyv!>EsXA/8|&Z*yƜ3L4z *C . 3AKVkST0U/`AnZ-*doէ d˪U)!_l_xӞ1)KUVK㑪s*gEZ/N:e2YJ(NJX;LU!(30Q|U:H5D5/ix**j<.ꍑ4Q+I@Z` M-rqrIO<Ô8bZwslRvSb?|BA3CҖ c/2sltX;;|}V2( 5Q" Ig⳻p ͖u$f cuvJYQwO{T8ah 1ɿwsMaQ@Σl(MIrT-7hx$ )Ϋ4$uEp⯎vQ%M֧ܛ^4$λ#0.+ )#-)`+.?Cw>o ?OhHÆEJX hHϴU3!fyfsnπW9eU괅n ;Iomw;IeH5!'i@b7 @ d+_7wgIxWeZI 2X/NzR_ 4Vζj N25o$16/^DylaUvZ $_WqdB q &ZwK_nk .E]! UՕ;+y@ԛXKFd/AwQBƁef#r~mXm=V н]*3uUGʼ-p'>bX'ϸqߒ蓒'C oOc}D E1un M7DEIxI%p'ݲZץI~rԣtޖ>0"dNcp aRC+6$|P#+A.9(V=e=2Zh\Hծl \ח͜ B%ϠF(r8_zcs$;kQwp<$ DPsRZSWB!Й/]HpGsIZTDuvap9wZrzJAqQx>z\XY6MXFU?H}yXA$`y'fU}xHpn=W;h,X&ŵn Puȫ+!?d7'\ݪ6%o{EElCJŅ&:FVڶ0咱ig*i` kbћ(g IVϽqaCz3"|~]^a,bPq0t\{9FޞyV[^aOmZRyLA|Ӳ,=syhNBHM_]Q gILXS{hiM e}:KEm4NVQ3 .xlmW :jDq7Hkc>{3u|3BNs;K7+wXZoz}׆Gn yZ]wHV\ L 0Nֆ7SjCF^E+N|%t(v){+=̞bT2ٴ3&DlW{]} ,]Q7| oM@ ) f/E狺F^z ^V$e317'oN&5@rPsd{lq5.d}&rfNVrUIlab2%W H(U7*I©hxQ U<#*屖}4 җ㒜p:0& D lX6)j`ޯ xvې.ʿxMqZj"z ۈPa`G:oZ8bf^sT3j%إ&/2dBM1ΜFո*P"(c5*üڢ9ݩSհ;qBҕɗ T#qWb+$`\ Obo1B!'^Dq||k> Vv(*=< >e\FqߥZ>VAsL¬O_j}s֍]hf2 WlTHX6X TQ&ښIK劳E-jnep*HP`X6}Ή0'~q<Qpt?8WR}E6>:xI (QLI #+Y2 ,m巡(YwA.Z".Eu!"fKs˂(8]AǾ@DEEgeN!c8yrZUoVy!\2ͶBߎ0Hy8<1G@`_>Xk[k;K =-#fd'DK"UOEeUG{X % -:B\jbQĮXTg/.a'R $0 &.)œSeX <#7Ty>+;sDJQiPOғogGؔE@Vmhx 5'=-soX A[c2'VͰv a)G&5 dk+KK7.֏]>ɸqϮeZ}؉!XtJan>)Jvj"$}G/.=ϲA҉b*e0b\HbTi6#Qo"k00CہryyJICp($ֱz" ؁<Dnc&f9`f.!jhaatO֛,Vw('ٗDZq`0 ⑐RUU\qfc|{/pq~iU{Dq˃EY͆Pģ/J2vX#A q/U8⏬~UNߦ"N[e_7IE.v)=w)-H ;%Ͳ]߸I"ִ0 2\xoM9}_@%sB]ɽw&&ɇCǴVl xmvX:AL,\}fS OCΥ3pP,fJ}vq*ɐ5g>m&0W(1Kr0Y:'  +BoMNzp> Ip!.E5>oóZ7"+)3g%e5.a7X { Tf@,g#7$f;%"1ŠǥTYoL΋_-vt5ˍ3μ'p={DҺyR'-xm U'~=OUaONuW'# ЊBH,(뢲ǟ݀e JOdޭ%Pϖ.#CR(}yoEolS-,' )}huĀfH MhrGQd֔@ &-n3>%uwh{"D&fG174b~hAX޸*aӜ,Ğ.nm*psT列 9eٸDY hƦko1|qi֙Oٷ`r]pjRAI^LKa ςO9_jG:_w(*ĜbEZr> z̐Yatlb}TB+lmR $;o^ c;RJuC? pt>[Bvs T3+}#Ǥ})?{٧ 5[ixK3 $ÐwA\.TщQ&UoxBJV6/!HL&6jk}H~̨!f,h`V,րW>>7>OcшTz8RXG)ؕH2r].,׏\nIЙYUJm۪F-}(\9= <}okHXp! #}idljĄf'Q`e)o&5 k'8&'  -_kvܣib"~-|?"_ ֘AQOTL & \( pWGD+ 7YUOՉb9i&h)zCMk:TeLY§$xP&IW#'9ʗ 'g ^RAU]~ Ӈ}S(zIqc2^fcu{tH* jpi4>@Sc~`5%t=緐tYS)Р5=!i`%/=zTTpK~{rKO⁆@@HQhz` F1rt $сd|(CC"9][}7=Bb\;DU<׵5?k̊$.hNO6i#]6gg㢕 77jC$i%"SU5congؙNu=$y $ʬ|aG[ ZsC^:/|Qƺf^B"u&[3IiEUm[UX[G咀sr$ʇhm1C ެvQ3LIP57?o(U4\J{mnzU vq ]IOsI ^}?q/nFE*W{.>rm_|[ԌQWoj$:=OԾ$HX`jAݓ_8:ېd҃R_=C=hRQXj!CΥ&zF@(CxORN&YW pf7U2$E݋ ZxC?n*~=$ϰ+ea9 WJ.mpݳ[W^羾p8m5(і1EpJsPjø3@ChMjZiqܨ7f3 +gT2G͒" Oѫ|CTok8V>SVKbX˿Y ,Q(c4'hjo7YekH G?1oNHJ6ۄN*1F!Kr c%y]!]H dĬOƒ_X IЦHBR7x1q/ܦ׉P9/]xoЬ8UVpaTTZ1z؜ bDUEp4͝'/kOۧNTAH Noân\>݊g?̧afn`}{ɧv7٥ZyF2¬c~ԎÁgSmBٻakiSrmo{oS"\Q_ިw(}!QV%N {|3aO8=]^QVØBBtp",3R> Ӹ-wk}O~a#c-hђZмjR:oGzŬ&{L j9k̹4(+;->V4a,~2x=0 .-mG]Q6=ԥv}RV) $u< hr7Ʒ +DJ A.$B-fq{i}1rtB: G$gP,4i|9Vd /1zBP)Dv[hݴqE6`>1PoW!66<="pU\^Z=#0]jV3:ewL+qXޱ4^ѡWpkBrlwF3Eĸt=|3ێNi w*)!\ÇYjrE&;e~n'`k=)J 31܈*icҜRwB\f |^F9ά9j|9/](yS+VbVt^]E_";! `@I/t;\$s 14]):2@2K!M 2P qJ&r4T zDʊ%}_ħ\/iߍy8NJ'޾P Ǹ֠?'Y7e3P*WqBC*]f ak3n{A?7}o?oj[Oi׸e49j8ϩӭdDӕŹ2҆^#~4 '[24+wj4ւnn f@OeǟɟMg9`m4/T؜=HӤ|C$/̗MAl'(xjn ,x-IfOI.5.M/KxҁxaH=lp`O) s5AteI9pd1$Pט󐆄 ZEt=uxɋ+67:GD5kҜjcb)*d*,]X͡{8evϊ\sBu@!X^q| ;;62Dr0 ^v@k]Laf -=RpdAǨV)r~j؀呌DMu!(G;{C)m+).$z.@0=TY%UgNI^&Au쎔b9=F-ìe$=9F]A5@pNT 27瘘ҰL!"dId0Mv`!L~hm.lV$rz"U ш݃Ѳ"SMῥg}}8Oɠ]&!P)hvѪaG"/~w[ڀyd{+{ ʛ_Na rK"'Ncs4; A|pQ9ćwMFn^A֑M]ۏsm8Evp\ .)`[&/_x V (Tж MVv 'UgAb77D8 [:*fԨ"JcY+*$Ŷ {ST`ޱL;}"sɛ'?ro&cs|f76s0#N1c{񔬜&+gu1Y `(Q. v4+d헆!:[[eoADyĥ t=V0ч8ê>%"'C-%SW3$."yay9X˛qK50ZAO=F>RBU C&tӂxWF7޺CtWqI5OUdʹӤ+wHmy5?4V,wō/Zw݅C*//& X-f\˒:Brfjd#3{ƈvSxxK1Foz!A[A]녋&bbJh^W#~,/ J>mEJfح|IR.m$[ ɤ?:0s)X+6@`9AʀT|3=VjW7f *{`%$F2rzI%z]?_PO{f\e"J?s/JOE] A1Z:\TxGRag28j:H(%?xj`D܈vRB͢(xfaw8Bʌ8)q|AHh8-@;ZyV#<I"KvUKq) 1OLE0(%v:+v6h!@Li DA@9˧[f`_hщDO.,U)լlI/p i)úf⌢_)-m ;u犬`ёsFne` Qf^lv8b[0pPs&76>ec\Gdkd +:EOC;2l)_D\жH[gI2n(o<f,MeХ H&<[.=P CYn#!sP=uXl~?pRB9Acl aZ#\\RKPw὇c!E&2ed Uo% Z='?tXkׅ^gƻOD|p{ 7: 5lŻz ?"<@ )tb7xjY {M>wBv2O  dE_2CXTo$z)@NͮxD컮OuR<^>vaXyށC$R]S&&ÞxhB}aob\2?cʲKM{vkuuSxUKu!/Fs)_i$MK%GٲO#E#6ڡV)a뢳=2Mg~=R/$TQrsKZR3@|l`gTbB~Р4 tS"X;+Xa jied&13LH=,qi픙ںo|F*/Uif<OiC!u^0vMDV}BO;Q_y;Q"=I*"Gҙ2'GAtEsW1ੀ5)HVCRY&T.jLy=ꑭ<')I*8Г8SտgHe푎9K0i3po*5Љ1x TXE8s]T7EfA$8$NcQUͲ32t qPۛ! 7Dԭ,ԙhdƎ:57rkhƂk&ã|_}`01y ],a`)5w%~cWHzG6h҅ „,LAwz B uo'g_=!a2+p+Cfee^stH<<ՙ"cZx"E7 x7 xq@ p Kl|.ƹ燵O(YHZM mۆgŀ8P&{Pit.8q}~<-uVcFxC&q;`V& `|&@8. <[!lV^:C|.8bQ'USt[R'gFq鶟U2`NK\[>oXuK#>WʒGEE~ݼ%<=7egDl>._2PS ۓv# V(OkD4AWQAf@"h!grMX{7j 1MsfQ֖JDm{LtK[Ɣ8pFEfGvf&6=# $G[Z9Dg#G7es9DM2 1wʷr\J ׶ĨHڑ&3>=ֲBJ} NNՙ? ަ\\:k&"k"\S"Pl$){ ` ֠B^$SK?m(SDIyJI;AB P4)U/4 Bz[CωLR0JM KK.*{R97Rt$hG9bGB>Wx`hUjX%ƼG>uBw T7O_1/|5A ]xRb)h l2{"& |&K 2ZR"K1zIZgK&,M2/:y#@k! ,HL,5l𲹘3&1QkUj4Y{iesF&=0:w&'0ZH?w 8H֪h=(O Rln Y{Y~7@ Eư?*nLquܰyXdch8K鯙/Q^69Dzw$xOu&d|JZb300l1aZ鳫#k,u9_oVYB4"U;9}b4{6T'X5(h[nƵ =3I\1Rbh|e\q0:%_ zHN?0v /doĘ~ڎE  (c|A'Lk]mA9`N)cacࠅEP7 hMt'{Y].$iCEMcHG@h0M%EՈ/xL˴0y^oIc0J eh<'%CNyC `?>=)²_7'wPq6(9(=:fꏟ!]l(&-|ZU+9Ϲ%TsPj"b c!@f&`f8_Ɖl3'SQ햩 Wλ|whc˟ +x$zm"ڐZqȨ/h_[-'=E9[!(+"4̴I8;޲%,4gqt8 ݣcDZ)4SLDi"(o<A ꢫjgWiGhBO}g_81v)QCǟOlu=>-dCNv-̪cح"A]=ݰF5{S[rN[\5Ý౞U 'Gm4ohGHYőF *}⁜YHAk]cT)ɱgQu%n4GyW&z$ɛ~ᴂ$L0 ݷu\-TFzaM!M!3Z4NJqҥyepix=cqR% -t'%@+ rJiHhWabsyu!iKC㎠5V E80RHvVuYqti!AO}TC)X%5} ]=B{TAUUIh:nt%?]:nՎH"J{I"HfTXB-љ 5 $iZ%1-=kZb7(3=fH{^=ǩm Rd;r`T>|0$IaHB NyI vu!j)ѻ(l䟃R~3-@'jx $F%Ju0V?ZCC;%W5mYW ]Bny<Lv-\=ZM^,s,,q$}_Y_P.Ht&*14=h_*% vqSNX|vU%oЬ?RB6ζbG]_q5\G xa%#‡<lKpYepJ8ϚO 8ık9fb;ˤzŹn۴ey/sl~g`qk9Ca0](3ƗsG,(/R[XEhi10]ߌ˝AjF ̲ ~.J tKPQ};̘W& L}jVh~'%y/lӣΤJG CE D?14jy:ЕNZ()z*Z6=ŸFy^P.&ZH+ G #ڟFB6"dJ$hKUrp߳vO'}?4fyi۲k0=*36|/SyPu.'dS f$)Q )'&ݵ2&t~EM^̳?ÂP|_F3AIWt)TO!AVsO! B G٦ҼG !QWE( l8knlʦҝ$\Ұ4vyKO/;f\**ġ;[F$mqᓣ7hNa]GPԁDilѾfP=p0]IBLPG,IXA[poͥR_/,Gݲ01J9(?i n̆rSY$j@~X L!#go)VYR3y==8};QZ/wyv-n w:( gzMjNg05MJJ'! ܈J?:Ԃ!9C-/y0OW4cr=N[i)AAE@` "#whmv Zd91A}hVA?x(ɑ/RR5[s::k\e\ve'6X C,<*Ɉ&Lލ#ʳif@B~x)4Y^_xQ04izX!q/j7\eTfVkT!i ȥ+%W͞_|-MI3zͨ:wӫ]S}7*΋2!\N:Z˓\&g(3 nb%K!us CxVvU-2Lʍh .$H{*t_v XفY8mD۟is`[?ف]Ͳ=%cnB5nsc[x8^ '.X3I"SMVKސ=vW+݁},S goN+VPov;d%]x\H蝬 TjO nwZNqldZz;<p@̔8R_R]@Pl(w8-f7./w͓i{-%jW<}SN"~6øHWlh6[Bp}K_ i>T*m]oX(J(9=m<YՂ[4SY2*%<-A"̒ YTHW>;,:\AMGE~LNUd͡ T! LD$RUb+*x-hEI^ȃ]:7?9 L9@.CtMV5ٺQa"v$vo6S&WCMuPPFap.Y  g=mwҍ|`UR"{#9Cж _Y` 2D*-{{uml(lFA1}_UE.3 %H]5gCBPkcHtZ^ϘT;~\f ,n+psϫq,K3Y%RVW_ҙmZELՇٴy<Pvz`4!N'" .NcG׌sWV2U :FF<$i׍-ʲw[~MkLјO:nk /&,|eӺƿ]e!kX>dߐAA:tK\˭jmIcNN7ǖ?=$/V=>~.{D{;lKڏ܀4`٨ LJh+*.8{ bHfBߕ/i9*S,h}GZ&ǹNʞfъ>w~,7_Z>י {&Y[o4;*BŪ>0YuWJn1#^fE#&{m#LYeFp.q6}]yXv `ez4JJV LN \CuG$ 0v3Z㵹&֢'N@|K:͐H`;&,ІS*hG|85WPx܃,aTȐ3D6Fh1 Rg jN$srXkWe rgs~4oB)yCS?^) I:x'SmiDۯ VHU(xAkyPb`,EKy`DrqFQ> rIeF$ڳ:fIY{v'38*ID> / ,zxmm;۔,*I;W:fn&Cm EE-[u*C[~3TD<#Otg]LJ17ȷXVF2"EVqv*ژ~[hygR~Ɍ" H4Z-+3Ϟ{7X1XHM$*MƝ=B V|. Α/E,Xus͍SeMnv;sDO*֔F2 1!9λ+X`}س6 ^o)Au.aؗPoF\H|'Ch-Vg0:k!\f' l#Ww;t<艼[m2GLaTC/jdb`ąc898!tQKPak<@(Ir{3UÖ#L'E4ݱPzU놀U4z]P8 -?=~Tz* d+p^_#ϵ~%?yf0%V[bͻ#.+ilnL͎>TȔv0Mi\bD5PcJO6 ~Fm"Ƶxq>eG\x[/YRb춽WIfӄ =e5f'&UK -S2]N,k%WmsV|p2tS$ԾQ= @kd&,O[^<Ė $Ħw4 A^}t-vCQP[j&~r>}&/A~6*SNɛwn`m]١<=غ ׹6pjضJ Ul YӖȌKv}) ?r:b_˵ Õ.VEmk2OATA ؍j#RB`O̩G, 6ׇ*|OUd8•9qJZJqT,ћ;rS;]Oa9}9F@CNrUV`)[ܘ̮q#S=hM^֌HOC1P3[D"BQ4~ >j}Nݽ k{"'ܬH2H!<vZĘjԺS?SXWg@ @u0C<8`^0hpR|/ t?>C (ؽ'˸#) aJl+^WpS$ϲcXlByW߉뚑O -@f5JmːXRa n!TP|e{KØ$ɭ1Xt\.^w͓; jtq镯5RX?P@}'&Vg{v3{gu^XP:x@8 eSԠ!9HgȈ!#L죒 ˃٤'P3*lڠ|13izʀMr-C0El\*/ @Ըg\wӮ7^R׷t2ғ/lգ.B,<1=z3Hm; )<$ʱ;5Epm1fWS%/@R9p{ E#8Ԁ6ܘijx M[1Ŏ*+Ȗߗ}|Ý]Y2({Q<;[8j.m[[mš DIh`h *Xmfc=3 --fԺ6Så9QZn4|޸Z*Gcg&#SCîT>'7Fp2.e7M3=-I`j`2!E5X%|A1du !vsE@M%ut]ht41}Qc0t"o[KvILx)\;ft9@kMe] Ӎ-}3Ϊ9zJPfF-3ƌf᷏U 8x$i7Єc/n^~7ژ#.F1;t>ybLzXfVب)d`4c}p:#D&93:{0z6lAqi7Q{rW~#gq\{}SaC^BdphCC Os 0lsm+!{Z1 ]`BBQ=̪_C6F4t%t72ߔ8ڭnHoO<ꉸfZ y݂cS1bB@AFLUCB'7 mkbQmN,գfgoGVPk;Tf ?5gAYsvwz_LWf"f!"+Y`S=ƛz 8ؑﭲ~=ľ8[Sԭ`g" 5>w<úB74YJǏ,/@uBs&??-W}GeJ'2S>罍߱ {ہծ[YAY=hJz˷Y+WI\pHJy r~Z6}1̚WO,gdzD|3)e)$iְWGr !Q\MNm/B_>(HGh<̹aY4ZpI7i:2^F Cϥ9$zp~S^ S# K@kGz8q#':wQWƱm I OIN*>'H_(0|+((SgX6m+Q*&@dY.õ6̧kj\d@MޛajΈ˃P~<~t0ʙp}d/!]wڎw=b"}i`o@&cwi4ǹ{x<*0p[`#2odXNNIJF:+!g>W(], lOzYVYAObq~*D$}lf̖ՉKCjy^]} @t<'2gJ5>\6۱%D>/)>_@T8.3VS:nu!ԊCfgd dgNS>qdnb}D2xsY\VQr y™ْ}@2+pT\և F=>[Z{d4qzקqdQ/i r8`,"~М?^D ^LܧxH|S5l\Ҭ "};qnM`\B(07>ɓ*.?\| V_BohAz(b~=u#RL`%׫JQo]N*R-̋6NOdʎ1s`JFX<9}rDNz%H@ -~FIv@`]Fp܃TҘ*53@l$k׹*e9F9} G , D2S hJit]8+CB:v"ǐokn$>A[_㲆}%X:1ߏfmG-d>QYoÑZG/:Pm5k< rtsʫf  &"_crnwh4#^~S O7cXD䐱*zƎKӅ@%(lr ˇY#H80~ ħ٘uz;%`]5SC6 w)&$$Fd}UiIYB2gc3y[OFG\{`A1m]2ޟeu8v gY8&a`Unܵ{gQR7k?MB;Nab$T@靣!- &Bx t@cŝ&dnqsd]_,#*)EJblja_}ןD_D#QpR"srӵ 3: pBp9zT.(SbD!`\m Ei4'VdVV#dr,CCqemmoQ]MaWoȩ-LB} 6x?L)&I}4Z(&%q&OAzznh7$n%?jM(g$!383]Ej&;0zG)yN-Fn:iq ڧtfӘҧ+ǀ!v,lz5$WAf?znc#//+v8r{IMZ)4HRVB8$VGQP mv:Ca#i$;T:a>8/!xWjL:LIGXlxΈd/+6Dd>|!LMSysjFX -+*l*Ɏur|nӵB HoCܥYIQ|qS gH W<]@Kzٟ%bF=R}KSjҌz;:?1wDBPYV+fjx.}:dQvz\ I`oiE'm>M<`ټdE`F<߲Ljp˰592.|O^?Z 9o{HnN;aĒ%ŧظ YUyw*.0'JCZdݐBA+0%Li\*O'Q)Yf q'!'=H#H-nc姠c D',] H%(aF0xD+&G)whzC3 #oL)YK*,U,37cIM!OрĦ>qWl 3X˓fv6p7NO(-^om% K78N큃B"{Z"TA`TEPb$яN 7B9[TȏC.[3FtΘPJ-PAP*zINZ)ES7b/f>u(Cn EK#zwĴvGM U}=pNI[1=]ُS9=YߛX%TS Ȗjj~yS3F?Z@VU6~Ƕyty&PC4&c=5Y* x|ba5!%%G[5|:'uAM7&6 uNloHdě: ˧Kz tHkT!i ȣ]N՘s6sde`ľvkKվDz|o חy~yZ:8c6UZd Wc-N!O P0ǐ4ĭL!@L1m8a]3ȦjZlɲ1=ˆ@*%@dQ-Of qRckc}' -RWދr3,]{OZY0c!|+ECYX^t., Mh)^D+UzM4glb(mnʥwRu`^ dj;$*ޞjwfP$󣃀5RHaSK1c\B3e`\ȊM 9UmH͊ϰUkdXrHJ]c*̲T3Л!]ԧRbqm:lbǩ2 ̫}܀CQ.m |!Qntx*y0טVCt&D,:C &Bm _>KSYk@Rpg ]xの57v6G T[h  |M{y#Z'~0A!/WyFݢ^@^6^7P!ϧ+?Z#uu68Aq0͢SZ쬐uB $/ ^ |űYU\:5:HOf\{\ GmD>,`7Y.L|vG4w..Qu2(]y39ZaXUb chpF<^3-U$/QeJ(ͼ6Q[x6iFKh6oBӇo zl91'#dP9G]n3!8gQ*YB#[`,L9|=I palasa> i59b6kM hT(h.LaƐ@ƴ&% %G@0lWIKKFhA*e}M"RÖ XiZ|}H8 ;>\o& )>A[p|p {c_ ї-hIŸ;Zہdh\@ 2 :>KQ[hQy؂&ijS!F@Zފ:NaIֿT S('l2맦7_0P1-RCò }gbiόy=eQTܜRo|m+}`(5r'n'12(<HyZ#>SO: tPfZ7g~8P0+*}8SIbkn+lTPEi§gHI& 6~wyVnBTiS%#ᄬXZvm!bHX\;&%] E;c(bH'{x. n'jj"ִuWh<韖XKS1A90!!=diJ|Wy_t,ִ1"}..F歶n!ACO ^}uWCfoο#ZӮ&TaBUf$5Zh\ ~̝ }Tc6?2yjѳEV5Dk|PcK3xȭ跄PTʮT~ߏmmB0iFDV/+g:ƌ@(aG9C$kkJ3s`31~ś0rx>p-0NVQR"@6V* ha[ӏ#&f'3ɭPn3Aӓrĺ 4aJzh(B8-^k~elݹ6 v'IKA4Av;4+krĵN:PoU.b1Pޑ;=Oݳ_KS o jESw@:_ XdazGanxyLHYPhwMߍH;:m}LM61 IFW17*c&zFqzت e!d\=y';b1P-QYD;q _~2kIz{TTQȴF.fbu0͓Yi ~Z^STdpxO;u,t$hqU1B6 `Ynk3^  Tbaeק,[y/jp'/l?C{ FW DJ{t`A|0c1K' {lC?{s0޺o84`٨ LJh*kQ`SF/AG4dgֵXLp\:g](g:-jDՏXOS4WM'o4m]hɈ!'mTx̾出G6 BsnsNWFo8G?VmZ m7l ~@"1O ڽ]*4@׭g}Ɏt'Cn+Pg[w$ڣugZQ% 6;S]**@k˩2uP~l̮(蒙kzz E†n2Y旔+sGw5L''i~ruj*so&.c 0Ei,P]g *! yN fVNMp;<h*>*D~ b G$gD,@q,+ aS@'l*p}&Lnt 3wu @bD+`1ra§["V6܅V@|bӆtSk)?Ty #Հ&}$`4YVﰖ>Nv򁅠B&Pb>=/S`D>7(>RtWFTy#p9i,~wS웡{k+05FXPY~ǨGث˃*wwetg]oX}dR6.ؐQ]>F6FNFU)e$\àᬕMb H2Y|`,)d"CP5bH=G*d0aϢPmQ.ݭڹ1lسBcYrnAX`}س6 n lq#W/2N2zI:{3u-Ά(8Q9aZ.юCy?8 Ee0Ʋ8[ 1sl媉>_Dԝ'7dRL^Hߪy 0$0kæHLh` _tj*NaԢq^YTKr#A$``KߕJżZ%^Жiyj㨔*U~>. ma`s Sk6F "`{>g=}Kh:k#~X㭖wyWpOAl ]lCѐ1 2SO;; ?Q].g'_E?n'$E.-:9`m [;ǐE[{-nRT8 tڵ>8b8<%M|"K?F @j9З5m`k̬ AQ ve7lYZT&/ۙ*Ͱ ikaoXyu:_!&Ҥt2'ը,L),0|]P܀toKE{>w#+DOZ0ҟ8 C0LJd-Ir3 Al? GՎf?K K +.p$NrهI@?Udr@ؼD`]PVt)Ce"_V>v?$S>_$Q`P}ޱ"4?7_/ pLi4r4u.286=Z:J3* id`qRV:q߃RKI7)em!!#t[vHYᭆШtৈFŷˁ~)`[mh!D.#WEWcZuK2mo$u^m6UC$kܫ !349'{տbk4G5"*Ԉ9МH0AQo0g!ne('.ZC2%MqGU\Ϧݲi\-Jes2 We!j H]w4rЋ†5yHs9GVta^|wNx}Nijә&AEޕjwV#uh9GvC [꿢 pZ{!h:-n')Xs9Ƌ6}V.0T".0B{6}<\dRo&S40M`TuPq=zX!luX'#*9vxh " 8ajzüzUg͞ U:A^ϙ׏4lj6?yLCq} 8?v6XYS|)|[%HGQXwQzqm2cYWEoc :Ƌ>7te m?XmIѻCߗFhxMʢ(b"ȢA#TPF>~<L7M]B+F&+xXST%%pGy].qHbk)ͻpqǓC SM3keh%P/|ͤ93RMHW I s84%clLQqi2zv s9rǍn1WNI&<"b+f*n[* PUopoԙ7"UjUZв홿9XZ4|f wpyrUGbhW 8k>ɴJ\+Hšf,Z@My'MK"yܝg株cfjO;p,h^&TJ:en<.-h`/bDXV8ТiF[Oy:R5be%kΤdDI0dwq/\';Cîȱߺ,wEb ߡv|#EFPFxLF6 ;y hA{Z6&zȺyjàYϯͪY u/-]VѫT6+  ԶUmL_"smmHt*k[wA&,9Rʻ[U .HIawpKGK\ۏY( AND"a~)_/x^7c{ Lyi7Y^=Jb쥴1 lQfa\(4ߙҒdIfҧ?L7ob]V0ֽP`dc!{ ѷ?:*֨5l`7]Lx ͙VD_EJq[Dh$@p*/~s#^}ÊiܰűiPjzrٸ,$SkYpnL!e@jDfA/Iϲ<0.wu'%A+|s41Z$~q+JR:h=0BCk]&L5 U&:Z\. oxV=CΉɊ u^)XkvyD0燜MI:Xt"zNEoxy5jox^judw:߲4x5UѸa @%.a̮xü]đ>2XS*+qwb۲!=s4HoAd/ǽt<}4m>P0Ñj~KX,u&d|A`\ :0oGMP0"= DM+禯8/'`YfhrayF4OW_u=YGN KfpۍEK">1cg%=YԜӄ yˬ@[N  *39k-T^|ߤ v0]G!{ݷz!n݈u8S%B,;g9#BMu.)3hhAlM%esM8#9 ?jKc~uD;H>W >B~gƒcȊ>N5\s`9r;,Hi#@e z+9+ᑁg$ Ht(,%qTn麐+cSS\N_X5' Z aJ.ޮvB?sB4 HH؉Eq0'oƒb> 3+ J.Qur 2x;ԃhAMw;Bzi٫ߔdySY{];9B>t[ݓBmp(u-VHbdx,U ,΋DmQ0(qڥ5կJ&I1$0AB \I9nLL{Wz8"H| hv6lU˻3]Wx1 TtaQ"QvPEpx\S+;8om u3,J1C^%jM=\KɬWwi*;<5*Z+&P&0Tnˢ"'xXj]tӤ^!KeH|楑W>EGRon{Wh {>)} *:ޱ(,L[d$Rh(-PXzS$ƭ";+d/~*I̚<!_tg?d|HjrS?;>z%=콮h^ H/⁜y$_w$Zp̨gPb- 9̺4 uLJ-)i.8n,03KK' 7\M~1\9?vK bm̴13hiOj4,,tītz%CGJ Y[W?o-=J6\KBCq>{q~ 9xGUd5)lwzXGEDc$Շ8x)j`ǕWB3BpA^_Hf6 φjX|0cDg |fS&ry.9ʲ6{,nt_`Psl6ksf#T8XEL!sS;Qu(%1DԝR;OInד\[%GB{K \;o9Rb\xDՍ)Sxj ӆ= LuѝE yS?Ymi&JAX+Ij@ 5/OȪy&1Vu@1_Ua@`vѡ ?)j5ڔfQ`An_ULC=0 _b n[.>@ OW+Tޯ6=Τ2)w&VnTCN {z,ck<|x {F8m&[]6!t_*f|ބHd&qqyex\~{`S6bjTT]N!6溧~p*LaGYU9WQIXOv$MtŨb(u-J;6 3ARzf&z{v%wq<1[p H}Jl6Ux"H$f+y#bkfn-e>D\c QA  L7a1j-+jTp/ k#OٽdlAMEc./o8OK)Em0Qv׮ c*Ge*g>\`3:?j8 4kKrnebsFMkvUkT@>iͰ9>0\=yhܭxB-z&^ԟ>mCXN>WZ9YfKޙw?τC38YRkХCs3e43: / ;TJD֙664Lo{|1dJX5΍;,Ы1 @,AB&;ɫ-4,dc(LeO'`{}>v0vsbNnb𫑪ۖյ3Of U;ks&Ĝc"ChQK:ʌ_0u<7v~v?wP]\t*ZBbc~ x SVƀl.YAbfm-.x ˵)MxVz7 "tja>8"8}^$.LzNo-@VQ_`5R*|~v UThQeJ(1}ij#lNzc O 0!SEwm0a*#ꔇmŖΔIk& =mo@JB[5 ;ƿ RL@S]JsDjeiKb..#u0ozm#,d 8NoX6Q-&F|bcAIqY0 noigxy??.Xz۟KOmAXE C4Е$<$ı+ktPG0.r}&'ڟVCJPLV/7# A<څ~\Ѧl%,W\d&5u&cy;hn_1Χc=WaECicPBn[ZKzEq 72~uw&ഋ!OM͑X~GS0Th7,LpTq_2?tn&jk( 4m%=AaI"nTXG!3Cߢ}|l }v!Ndz!  %=%FJ+E.Rj#/:*1z ֯nm;!'֊ +8R/isn#p_f rx %\HFc}v"gLqTwBmٝ*37!!)dMlx$!lRv^~hժb^98PgBu\+aCt܆i0Ո"A=yL@ziN i?&qCC!˼n- N nqn(xwҳ^w@)xoJz`Koq XR[VLvS^p-ܬgɽL}w-̃[ n7Qa„ĕh]y:yZuE(浉$h[n:~I(t&'PgOAo8\Ԟ8O-0pĪAf-uvnT!jkڜ&W+DV*5jl &JwTϼ9oƃ,X=/f&+hU armVzVi6I0>||uphܸAH~#p׽UgGʁ9lj zʼ"ϴMf?F!l90bū .12棎W6?ڢs?wC|ˌRO-6)QKq5g{4B=\}]Vr㶠bNPV2I}coZpT3~{ "f? ^e m!<ɨޣ3@G d{"?~͸+{i'Gx8 |66)I+B1U7ޜz1,d<aoz@%ztq&B41c-ibXpj+U? NbG4rԕι%pڀ U-?LʎL!J$ ~d|7;)_fgLAyPSzڅ,w^Z7 O,#j uIɈoťªb gJ72DE7ֻGf0_%)p!DXgORK?"z 1gjM۫P 30kiq u@RDB}iHPrFB9GDv4NBBԍ<<[Fʽ#x-{7h#>>,*ukvB(j4JK?'*»7rrS{)IHX§HLLZw0&<5<0Bp p{E;[hɾSlTZR-]oBSú#U}tRL*mLdP0Ufi"yWzrʽQū-z%+ϥ퉬&2c\vkFľlEݺiNۅa l~IʰрwumtšܷŽM,2 ~z4s>$Ѳ݈_2ZThbd zHq qME^8xgŬ$D#HIZ\mc4ĊMwjSl7n_UHL314D=0 `Z+mϧ {)=[8v E{G'hl#}$[ξ"li;]*c;K'cXNǛoH'G:Z:׌;s#kXW d@Bz&'CKZ(2D)4REu;a|bxGGg!NrǓ\̌0 )2C~Wc>4G=2GRX?pFp4i:&K@oB-jit"}[{d5A~2R>0OX5e %'~g aJ_lǼrkV(>^,TՋ@]CkYcrd$`[o ]Wb>p-db^52["\ޤŀHØFqsBձP^;IP E45och%^? .@" J/;GwPՀ]j, G7 aQ"\ZfY<~g:#|ll"V}$ j.mE&qtHJ*%|U閘/5!7PW(Oh90s vv}Rg a: 6rVa AAk-♶ddDf@ꮗoKB)Ϛğu\ ^[MT6>2֮9Z 0_鴑2;kuy;MvkE %ABU8ZOIq(cA5ﱜH Y%w(d?yG^0 EE"D 4,Fi@ft$jN{b o~1&Y?:$: l]5em+?=HA[ g%Bjry ]iQ/rRRlᅳfp(w0wM֦jF́M*0UT%|vA;P<k<' KŪ! ('D'Wo -'ct Au ducW8jJrUds[a{Of7B_11z`Olo+e'VEYhkx,y5⤼ϮD82d^i( v[Dxdy0alcaSxZk&.OCtJW 1-ʉoh0Ҍg9}Yb3Lذр!Zߔ!,2lP0`aN}#=˒B'pc3S,3z"7k U^ɃHyt'fE@gNK4%p2ģAEo 77.+ϸUA-XޮsR+E"_ܼ]^H?y= h3Ә0ptrx _ Б6wNgeE)0 :Aqr+GJ;IOޝRUybՂ#L]8vfAt,``O ר/ ls?kܤX~1:{ bKIF=tvΠsX1n AlHbvixycz̙1uaIȽq=ڬH1P^R/򩥣X3&;s =2 ͗g _ 2LM +`ڳvޤ?JNXz>30=H#P Ǐ TS=s˔C2J_k"֊}Q^_ܸVMeX}o6jGA.-H? B< 8;j%UJ9B^rg^ 7۰dB3Hޘzǫ LOZ Ql}B{oK*Tm}#F)|xF.TLj -m[T:7W3#7H"͈WoI$0!1v\R\L?Dx DygyXVjijmZGph@M-A^_p&2i⛦ᚔJaw C^5E˨B^e*KJ^S3CY#[Cn4xG(/)ih3:wBFcDE B `J_F,.VV``Y>*#"-6 DM R$vиaXFh߈XmOA߭㉿di/\$X .a= dt=aQZQ|7|R1y-^{ *}~@RXq1|H(Xǜ}  Iz(\M_E`EEi'}r?k5q$KO1P4=֘3wEi}pit32sj  )," #-03>ADOSUVWWXYZ[\]^V*- )./9?@IPRTTUVWXYZ[[\]^_``a^XPMGHSgijkS  ",.2<>BMPQRSTUVWWXYZ[\]^ZRLIC;?JS\gpyÂwwc4 (-.7=>FMOPQRSTTUVWXYZ[[\[VNJF>9ALU^irz򞃄O7"+-0:=@KNOOPQQRSTUVWWXYZXRJGC:9CMU^iqy. '-.;==GMMNOOPPQRSTTUVWWUOGE@7;GPYdnv 盜M/OLPQQRSTUURKEC=6=JR\hqzWZ[K*:~س_dd, 鿱lp-˼m{YzކƐx"ڀـ؀ѐGօې}p҆{΅̾Àuʄ#止ztqj^UPNNOPP o9ɽú~{smhfb7>TMNOOPQQRRSTT Ţj rk^QM mRNM ^UQQRSSTUUV@;ίf ξsjXNM eM"G31LhǔWVWWXXYYZZ>}ҿ bـڀ ̀ˀĠeMNOOPME歀[\\]]^2Ѐ`$^NOOPPQQR$SST0h__``aa?[$cSSTTUUVWWKzcdeZ?V'ɿ}riB%zZWXXYYZZ[>ghi׈PźtmbUNM 1]}k{\]]^^_!EnkllmMqGºOyh``aabbccdUfֿooppoB&ddef&gghg 9ӟssttE<'miij&kkll.уwwxt 7'ý{uqjc_\Tmmn'oopp]]˸{{||E4õ~qie[RNM2Uqqrrs&ttuȐz 80}yvtqomkihfecba``_^^]]\\[Y;~uvvw&xxyQq´H--yzz{{|}| . ()¾~C M{")¿|srqldcc`Z3l+{B "}xwoe^`ZRKRXYZ[\D2)3 St&һzwusrqnjfc`^]\[\]^_`w*qT).¿}|zwutfkyzz(Xm, /~|zyxwwvvaf/3¾wpic]WTWWTF73]x%*^f4'¶xoomic\Z[ZUPMPQSTV]chjklm S&n%Nt; Эxsnlkffkkjijklmnop `| <d`C%Ľ}{xutrqpononoH%6Yg): { J/¾|yvspnljhfedcb2MiYP6|yvspmjd_ZVRNKGDAOf'"} U6¸xph``_]YTPMOONLIEFJKKIIKRX\_bdZ[,p^~pSYʺxl^QIIRY\_``ensvxyz{{|}~!In*){ ]'~}}~~}~ Y-T*Yl|wM`)þ|yuqnjgda^]\]^_^;KOP|&:zc0½~zwsokhda^[XUSPNMLKJIJRĀ@ {Ā~Hh.º|uoib\WQLFA<8424554321/036799:4; Jʗo!UCBFKMOPPQS[`ehjklmpu{ 34Z̀$$хCw4sE~w!~$¾|wspnllkj>klnprux|,Amٌ=/zvrmiea]YUQMIFC@=;9789<>B؀'#y2ü|wqlgc^YUQMHD@=962.+(%# =܀'9퍀=zE::<=@DHKNPRTUWWXZZ[\]_bfiloqsuvwyz|}~C'I%'r쐀 <%/}.ÿ~~|{{|}~ 05]#F|?ÿzvqmhc_ZVRMID@<73/159=DMU\F'59=#]L/;ؽ}yvqmjfb^ZVSOKHDA=:63/,(%"!$9\}#~~w'xX"  !@KM (pMIͼwg]UH>7.%!!"#$$%&''(()**++,,./0.?HM G;MI(þ{si_XQHC>83/,)'&'(*+,,-..//01ELMMI=þ~zuplgc^ZUQLGA<730,**('),,.01'/@EKM?OMI =̩}zwtqmjgd`]ZVSOLHEA>:73/,(%"!$'+04;AELMMI hM   9BHM4eMI rqcXI=5($!!""##$$%&''(()**++,-..?CKML )MI!m}od\QIB93.(#" #$$%%&'(()* +,,-,7AGM*{MI-h}xtpkgaYRKE@;730/-+ *++,, )@CKMH?MIe񻄐/}{xvsqnlhd`\WSPLHDA>;975454454:51/B    !"$'JOPM#Bgjm[MIDMIAl^J:+ RSOMGeimpmM!MI';tfWL=4( !" #$$%%&' 2"$!!""#%$ ehTEGIHotvy{~gMJJMIJ!¾wi]OE90% !!""#HliCDFH(Euwy|~M#MIKMMU\djqw~xncZQHA82-@@ y~XM;MIжycR>/(!!5|y>:<>&I|M 0MI C¾xjXK;0" p`79;< ~QM 0MIH-+7ALV_ir{zk`RH;2&(U=58:$KtM KOMIB"  1&-5,.0!O]M=MI!Ix,9FR^it¿|m[MMI[<­~k_MA1&&(-"٬*JMLMI Ȁǀ݈MK"UMI eˁʀNM > 5MIЁπ΀tfRMdMI&jԀӂԿ|o[NMMVMIFk؀ׂMI 8Wp܀ۂڀMI $>]w߃ހMI (B^xMI-G`|MI2NfMI  9WqMI   )Cb~MB  /KhzM9 "$&(++&"  5SmyMM""+.02468;=83,'  ;[kg>GMH "-3>@BDGIKMKA:/(IMM *2ADOSUVWWXYZ[\]^V*- )./9?@IPRTTUVWXYZ[[\]^_``a^XPMGHSgijkS  ",.2<>BMPQRSTUVWWXYZ[\]^ZRLIC;?JS\gpyÂwwc4 (-.7=>FMOPQRSTTUVWXYZ[[\[VNJF>9ALU^irz򞃄O6"+-0:=@KNOOPQQRSTUVWWXYZXRJGC:9CMV_jr{. '-.;==GMMNOOPPQRSTTUVWWUOGE@7;GPYdnv盜MOLPQQRSTUURKEC=6=JR\hqz WZ[K*:~ س_dd, 鿱lp-˼m{YzƐx"ѐGې}p{̾Àu߄ހ 𲦜ztqj^UPNNOPP o9˾¿zrmje:"CTMNOOPQQRRSTT Ţj Ķum_RM rSOM#_VQQRSSTUUV@;ίf ξsjXNM!iM"G33TtϘWVWWXXYYZZ>}ҿ bـڅܱkMNOOPMO[\\]]^2Ѐ`#ֹcNOOPPQQR$SST8i__``aa?[$hSSTTUUVWWKcdeZ?V'ĴyoG*"\WXXYYZZ[?ghi׈PźuncUNM 2 f|͙\]]^^_!FokllmMrGºNl``aabbccdV{ooppoB&Ƞddef&gghh FssttF<'Žqiij&kkll. wwxt 7'ǾvlgbX mmn'oopp]t{{||F4ɺvni^TNM2mrqrrs%ttu ޕ{ '0|zxvtrpomlkjihgfe dba#'Muvvw&xxyRƂH--yzz{{|}|;ٛ (-~~DŊ M"XǼxuuof>{VԠ "ƿwlee_ULSYZ[\EE)3 ÑS&һ|zwvutrmieb`^]\[\]^_` )rpΥ).½( Xz, /(aɩ/3|y{ytdRL%:ƾ^u4&·}~|wogeeb]UQSRTUV^eikklm T;%Pĭ; Эxupnnghllkijklmnop TdoC9½~}|W:52*/nbM@lMI =Ұ}|zxwusqponnoqtvy{~VMMI iN   xM5MI s˿}mcRD;+$!!""##$$%&''(()**++,-..=XM 7MI!mǶwh^VH?8-%" #$$%%&'(()* +,,--}zM+MI;htleZSME>92,*++,, _ZMHRMIe|xslw}M/M MI  WL%   !#%'S\MF9MAnMI _ucWK:0..-,+*) (('%$!uM"VMMI9Y²~oeWJB2)%$$#""! +`MGXM7MI8Tvm_UJ>6* $yM#m}M 6MI8N}~sh`UQxcMGQM-MI>C    "%(+.1469BGKOTX\`eimrv{mIKMIM 5MI1 ,ϻtcL>+   ^IHKL)hRM/MI" &͹j[F8%$!!""#&&pEGIHzMJTMIJ!ȶucVE9) !!""# pFDFH)gM$MIKMNW_gow{o_UF<5Zt@BEDlMEtMI@  .%,29@GMSZ_flrx~D?AC(gMMI ¥taI:"    y;>@@]M;MIŲm[D4( ""KC:<>'fƒM 4MI C̵~hYE7$ ~79;<SM 0MIH-+7BMXcmwĽzfYG:)0tC58:%f˂M KUMIB"  1#-6@IQZclt}2469ͻM &MIŦpZE*     &D135#frM FwMIBкkT>%y-/24ҭMMIİjWA-#TE,.0!gaM=MI!Ix,9GT`lxнkZE4!“)+-0 םM2MI#C#   +7BMXbmwH'),STM2MI%oU<  "mǜ$&(+ ݊MLNMI҅ ˮv^B* CJ#%'$Ȁ‡M*·MIϸkS=#Dt̖!$&€dMIPMIK]%5ETcqּ1 "$䝇M'ƆMIM1 5"0>LYgtN!#6ԇMI9MIÀɧnS6    O "6bM,MI&ƤiH-  !#"OyML MI&ֻeF-l8 "$woM;7MI<˲zb\`-!#%'+*+ M$>MI[;vhTF3'&(-&+JMLMI ߀ރ̼ꍐMK"UMI e߀NM > 5MIõtfRMdMI&jԿ|o[NMMVMIFkMI8WpMI $>]wMI )C`{MI.Id MI4QjMI !:YsMI   )Cb~MB  /KhzM9 "$&(++&"  5SmyMM""+.02468;=83,'  ;[kg>GMH "-3>@BDGIKMKA:/(IMM *2ADOSUVWWXYZ[\]^V*- )./9?@IPRTTUVWXYZ[[\]^_``a^XPMGHSgijkS  ",.2<>BMPQRSTUVWWXYZ[\]^ZRLIC;?JT\gqzÂwwc4 (-.7=>FMOPQRSTTUVWXYZ[[\[VNJF>9ALU^ir{󞃄O4"+-0:=@KNOOPQQRSTUVWWXYZXRJGC:9DNWalu~. '-.;==GMMNOOPPQRSTTUVWWUOGE@7;GPYeox蛜MOLPQQRSTUURKEC=6=JR\hqzWZ[K*:~ٳ_dd, 鿱lp-˼m{Y{Ɛx"ѐHې}p|ͿĀu{tqj^UPNNOPP oĽ{tqj=&KUMNOOPQQRRSTT Ţj ɻyqbSM!yUOM(aVQQRSSTUUV@;ίf ϾsjXNM!pMG45_ڞWVWWXXYYZZ>~ҿ bڀʹsMNOOPM][\\]]^2ЀaiNOOPPQQRSSTC j__``aa?[qSSTTUUVWWLcdeZ@VźwO1)^WXXYYZZ[?͒ghi؈PƻxqfVNM 2! u\]]^^_GokllmMtGús``aabbccdVoopCddefgghh XssttF=viijkkll/ wwxt 7zsl^# mmnoopp^{{||F4º~tobUNM3uqrrsttu){ 1¼}|zyxvuttsrrq pmk.4guvvwxxySI.yzz{{|}|N (~~E݋㊀N"!xM*Ђ|s "˿vnmeXNUZZYYZ[\Fa 5摒T!&ӻ}{zzywrmieb`^]\[[\]^_` s)񏏀!-陚Y, c/ƽzq◘R롢_4 ȿwttog]VXUUVV_gklm UYQ;ѭzvrppjjonljijklmnop qՠweC(k]<ǭJ ˨𰱲kPƾ𬭀$0͵U/žyuwuqkd][][UOJKU\acdd\Añr€񸹹qY˻|pbTJIRZ^_``fouxz{{|}~$嵶Vҽ]چŽ \\x~`ԣݾ {cЯ ĀBǀzh́Fſ}xrmlnnmie`[VUWXWTPLGB?(ʚ o!XEDGLNOPQQT\cgjlmnnpw~ 7̀&чwwƃvRӀz" ~*Blُt؀ & ;}zwtqnkheb_\YV\܀ q퍀=G;:<=@EJMPRTVXYYZ[[\\]`eimqtvxyz{|}}~G) 쐀þ :c 3H.ܽL/;Ԅ}~~y Qx]$   !"[M+ޗMIyq_QI;+!!!"#$$%&''(()**++,,./00 MHsMIijxgYPB2)&'(*+,,-..//0OM MI}l`YK<3-WMAMI =ۺeM)MI kP    M7MI tн|q^MD/ $!!""##$$%&''(()**++,-..ojM KMIo͹}s_QG3&" #$$%%&'(()* +,,-.ŊM,ڔMIj͹wdWM;.*++,,;pMInMI fȝλ؀ˁM2M" MI XN%   "&)-036:=ADHvMG9MCMI `лm_Q<1..-,+*))**+)('$ ӁM#zM$MIZ(ѼlZN8)%$$#""! K|MH.cM9MITҾ|kVI4" ?فM%M EMIOӿЀMI+TM.ՑMI>D   !',17MI(M# MI<Ѻ~pXI4  !" #$$%%&' NM(|MDMI7иrZL7&!""##$%%&"]MI&ȇM MI4sv~Ϸt]xNLMM*dM;MI ,9 $%-4;CKRZaipxIKMJ#M@MI -(¨|kRD-    LHKL+UM0ЎMI &|lRB)!!""#&)EGII MJbMI!!ԿoVG. !!""#KDFH+M$MINPZcmwsZL@@BEE}MFMI@  ! &/9CLV`is|J?AC)ʇMMI ƪzfM>$    ;>@AeM<MI ǫ|iN; !$$ lJ:<>(M:MI  ɭmS@&!)79;=VM1ˋMI-,8DP\ht˰rXF,;K58:'MK]MIB"  +7CP\ht2469M&MIƧs]H+     4N135%~MGMI)Ȫv]D(-/25 ˇMMI ˮ|eK2hQ,.0"fM>MI!x,:HVcq дmQ<"؀)+-0 M5MI#D#   %3@N\iwT'),kVM2ňMI%£pV=     $&(+ MLOMIӈ ӵ}eG- R؀V#%'%ڇM*ЇMIˬw]C&Nʁ!$&iMIPMI^%5EUeu¦ 6 "$”M'ƆMIM2 &6FWfv [!#BMI9MIĀʧoS6    _ "AϓdM,MI&ȦkJ.  !#(_Ð~ML MI!ƦlK0|? "$sM;8MIĦlgm3!#%'++. M$>MI[˰u]M6'&(/,͋+JMLMI MK"VMI fNM > 5MI ɹtfRMdMI&jտ|o[NMMVMIFkMI 8WqMI $>^xMI *EdMI0MiMI 6UoMI"<\wMI   )Cb~MB  /KhzM9 "$&(++&"  5SnzMM""+.02468;=83,'  ;[lh>GMH "-3>@BDGIKMKA:/(IMM *2BELT^kS# !',29>?@IUbmx} UB9HXep{?h_s\}?#ـk0KŴv:H#ͼl|wrnh^H۴bQQRSQZ~v)HCŽgMNNON&޹\]S_v$V@ϾkoWXZG2ig7v$[8dcdXκqOv^4ϿzrkY:{nopǙ{9v)d0Ž}fyz{O;Zv)j+~vqkgeG97v)n$ƽ|xtlZGKiyv)rǸ|xqnihee8A:v)yȽ|uqmjZL9Xyjv){vpnjhgeff&J 9v)Ȼ}wqmjhhJ>&m\v(װytrnjihfeghh]}y0\L 'U% nYE7)#PL_nNLLE%}zvqeZQIC=94SN@1pxaL w% ԸlUC2#&YHgx}MLL=+%k_cdgikgbZQJEABgG:6{_L%(ۼmVB0!!d<rMLL3K%(`FBIOUZ^bdb]UNIK}D0EMTZ`ZRJ[C'BELT^kS# !',29>?@IVbny} UB9HXep{?h_s\}?#k0K Ŵv:H#txtmbOcRQRSQZ~v)HCnMNNON'\]S_v$V@ǹvyWXZG:ig7v$[8¾ecdX$qPv^4ɽweInopݡ{:v)d0yz{OK̈Zv)j+ʽzuqQNϪ:v)n$ļGdějv)r̿zxsrCa>v)yȿ~9{y}v)ij{ywstq/q/>v)ow&Étv(ٴ~zyxututs}}Bv(¹_vКjv( ҩ}{{zywutuvvpGv(ûO~r ƒ}l\NA4--,+,(#lS {(}rg^UNIFD<}L <-%{jZK=2)# !"#$$%&' JpL %¾xlbYQKGCRHL 1I%(ygYJ;,!FsL$SLLK%˰~rf\RH?DU>M|L 'h%xcO?/BzL#PLLE%~tjaXPQW@MuL %׽v_L9'=H"NLL=1%kbhkqv{wme]W]Q:NjL%(©w_K6%0<  MLL4R%(`GDMU]eksyxtld]aN1P^LLK%ĦrYC-0ЖL)x%#X4,.8BKU_hpkbXoL'KSLLF%տnU<&JX$wރL %mH-"0BELT^kS# !',29>?@IVcpz} UB9HXep{?h_s\}?#k0L Ƶv:HȻ~|tgX eRQRSQ[vHDӲxMNNON) \]S`vV@ǼWXZGGjg8v[9Ђ fcdX,qPv^4Żt^nopσ{=vd0ʀǴzz{PcZvj+ž_l?vn$ѐHjv!r żS'ȣDv yŵͧ:yv ɼ=CպFväϾ'Ɗvۻ-~IvĔЛv ձ0Pv(rʚxi[M?889:;;<<==>=8AS(̿zockMLLλwhkm2|fDͿyb|}iO`I˵{upmQr5`M®yrlif4mYwSι{smhfHv3[Wֽrg`[ZMAh~[~zwvx,Y_yvtsv{~]Ha!ubQG@92+%&-zbD뷂|o^M?3*#"GMM"뚂ѴsaRF;3.--+KKM5b횂jWE7,"F=@ML.{|hTE7.-**'!8M.iMM*xxcZXTNA81++S>Px^MHGs}l]QF?97JJ1zMM%~Ǫr_K:+[2]^MAlj{]B0$%-zD/MM+co\I:3)fїlMM;fߡp_?n &C_|*E^y /EXnL #%)  !'*+9HXiy˽FR3}1"ڀǾ⵲.ĵlMNN<߾hZV:óz[]7P>ɻ}km3}hDļ}ieѱaIh:ȜgMʺ}xrMnzwS·d@fW|loh[ǽLg_ej䩇!rc\XTPLIHJCc_}naUKC<:5iX=NM+xlfhhfYOF>B|>zoMHQs}odZQJEoU=MM&~ȯnYE3#"z2eMAtjbH5)$,8O9˟MM,co^M?CLNCe$}XM7_f[dneXP>tML4eٷz]D6*tpMM;f쥐p_?n &C_|,Hb} /EXnL #%)  !'*+9IYiy̽F R3}1"ۃﺳ.ȼuMNN=iZV:ʿ[]?P>ɿkm4~mDƾ}iaҀIŹBrMørnxρSSwWĥ[ÿ{}_½p䩽!}zz{|}}yszc|qg\gMM0˾xk^TcKM5°lZJ:( .=fMLE}qeVNTX_^QhQPM+ʁyyx|qfYc>MHasukbZeNMM'ɶlU>),2oMAkkQ=0+7G^FMM.doaREMZ^S~$[M7`g]iwpd\GML4fܾgL<-uMM;f݈p_?n &C`|.Lg /EYnM #%)is32 (8HXip}Xh~̱֠{ׄЫgK{ނܹvhl{ˀȥvjRjzͩwkeqzieXQQ7.&   ""$%&'()+3(   !"#$%&(/DPZn|]PB4(   !"#$%&8IRbt~bRA2%  !:ISixsaN<,  Bqo[G4% D|fP<+ `ˇpXB0  3Ӑw^H4#֗~dL7&2ٜhO:( y۠kR<* ܢmT=* ܢnU>+ ܤnU>, ݤpV?, ݤpV?, ݤpV?, ݤpV?, ݤpV?, ݤpV?, ݤpV?, ݤpV?, ݥpV?, |ݥpV?, tݥpV?, jݥpV?, fݥpV?, eݥpV?, bݥpV?, _ݥpV?, [ݥpV?, VݥpV?, OݥpV?, HݥpV?, >ݥpV?, 6ݥpV?, 3ݥpV?, 1ݥpV?, /ݥpV@, ,ݥpV@, 'ݥpV@, "ݥpV@, ݥpV@, ݥpV@,  ݥpV@, ݥpV@, ݥpV@, ݥpV@, ݥpV@, ݥpV@, ݥpV@, ݥpW@, ݥpW@, ݥpW@, ݥpW@, ݥpW@, ݥpW@, ݥpW@, ݥpW@, ݥpW@, ݦpW@, ݦpW@, ݦpW@, ݦpW@, ݦpW@, ݦpW@, ݦpW@, ݦpW@- ݦpW@- ݦpW@- ݦqW@- ݦqW@- ~ݦqW@- uݦqW@- lݦqW@- fݦqW@- eݦqW@- cݦqW@- `ݦqW@- \ݦqW@- WݦqW@- PަqW@- IަrW@- @ަrW@- 7ަrW@- 3ަrW@- 2ަrW@- /ަrW@- ,ަrX@- (ަrX@- "ަrX@- ަrX@- ަrX@-  ަrX@- ަrX@- ަrX@- ަrX@- ަrX@- ަrX@- ަrX@- ަrX@- ަrX@- ަrX@- ަrX@- ާrX@- ާrX@- QާrX@- ާrX@- NާrX@- ަrX@- lݦqW@- ~ܤpV?, $@c~ۢnT>+  'F`zמkR<*   "#:RpȗfN:(   "$*H_zx`J6&  "$&9RoݘoXD1"  "$&+H^{wdP<,  !#$&(9SnxhVE4&  !#%&(-I^{|rfXI:+   !#%')+8Tnjd\RG:.#   "#%'),.H^zURNG@7-$   "$&(*,.8Tl^@@@=:5/(!   "$&(*+,---,)&! h8mk   '.2)$ %0N^m|Q)z>N-V# BZ% ;Z% 8Z% 4Z% -Z% &Z% $Z% [% [% [% [% [% [% [% [% [% [% [% [& [& [& [& \& \& \& \& \& \& \& \& \& \& \& \& \& U\& \& OZ%  -HcR!   :WruA  2JfmM* *>Ytn?6&l8mk #3CScrd3 $5FVfvWj7 G+L&L"LLLL LLMMMMMMMMMMNNNNNNM *MlG &C`|z1  7TpY4s8mk)9JZk|b &.. ...../////:-+Ig}x2goclient-4.1.2.3/res/img/icons/x2go-win-48.ico0000644000000000000000000035267614447111614015730 0ustar 00h N6 ( F 00T hl 00 %~  &  hV(0`pqqqhiphF fF0hFxdidq  q0iq6aip hd  d`ihhfip@ a'f hd hhqicci dhFqi@ ah1 hhdcg Phh8 dchEEhaa* )k0 h(Hh bIhi )(` i  (H h hhh   hYE{hYtihi ( @QhHch5hQigTX85FvixAFchaFTtFhx h& Fi&hhFaa)hhi)ib(ihi hdf (0df@ Y`YdhikddXEqah`8iq6Jfhdh)hk)i i ( hi( wwwww`pqqwxzppXuzpwuuhSpq1WpwUp'7ypyxpxrpWwpXpxxppxwPNG  IHDR\rf IDATxy}/骮eg4FHBB#@2:݉oq,~/ُxsI"a1fAB Գ^{UշnZg>̹ܺU]S~'p'p'p'p'p'p'p'p'p'kԫ'p%|[i ]5l=0 d2t|F?>EEsaN^ |ϵl@ö<5 0 Zz5!H \K(0@7^U<N5V WUh†at= ,@ד1L&ߓާ/}t/֮߈GzU ^|ϵ*,\)p pM_C!r"!-`*RiвuM{/2.Bs=(M`'7>-%a:͢Mv\31A"iZEZNNUU}sE^:ؿص {vƺupW.O0onUX)ᴥ0:03@u膁\~Q"#:D-XṚX,X,bt|g144EQt0::1$?{b޽(&-){;wb g;}`q|[YZmC7]OObHfEz@LՂcyHR*BQ /Yl~y`tl)016a? )Bab~ C!]HidT܏{qo8z(FFF1;;sai]@sSL3ЛDja0f ZWH2ci=:],1<Q#ɽYJ~`:Cp 3 |_ Z1bԢX{FIfJ*fose.!. ́ UJJ04TDqhW3O"n!`d3d /Q@N(0\C{<ޤH8IDb7n?➗m|Iܹ뺻 ~;`֋[bDqiY/',+s|WT/髪* E濂>X2< EQ0>>a !78bN濃E`hd)i_W(›tMJ飞ݹ ?V*Yئşٟs7-WaۿmyZj~$juOA $2vʴYUUCCC^J&bKB}=RdE/MGvm7m-AǓ)$Hd{Q0nN"IAR\hȝmעzj\0 ]_8l2lܸѓm&tl@ъ'-zEv=A5IQEʓ8bf[/ A$!hu6}RlذG>laL"l̸iBUҗw]cq\lҟ`ٲevy |CjYlK gE4ٙk^὿~\˰bJ_Iq<h >>[-@lKIB$MI q?JC ێwW N *R)s0|лW-rH9{。ιbΝ?HAܒ\ǞyS+>M[cIA:lw9{=[qYM!QߒwnG]#l~طv7Аo',4 , /Vv YdcQQ'apIl<8 Sqî#( <** 0'ԧZ#򕯴Lvq7|b1( c(6)iPc"I$hXǨ@?[Jx/^O`}Y/OCH*q14$u^&h8۲EoaC̀N"ך@@VDzM3¼@icBUOe|>)w ^UBd~aj=>5Ui a.yHq"J|-i PyTmJ!{>pC]RBGI}%,$9' z 4K/ ! qkh$a}54'Ƨo  įiFh. xIW<΅@!V5`bO,0B%T!-mvp!h+:'/`X5އ6nϺx"~=lJQgyI,2^xE KE: >Q40JV(*-am~<=as$!]ߋ6˔`kdiN)$_EɠPЋM֋d$0 p<}qv,Xسā7ni/(fb 7.GQS5'Xsw-O,q(5||Y$7"o=W*Mj]pmJ=!JDZR #xK?ÞgX̋$QQxKI ?[iQL7َCgIg8_ `Dtײ[[dNayϙ)&)WkP5Tfuo=.W*T*ՑhU,"y?>f|b9>я超4 4 d`0O=TZ΅q88<#J꓏9nKM"A{a@t_ x)0  s7Ai{~qJٗy<^vmiZ}4xEFWC3U8I5Y"eD Y֬0Mh ɩd!uTuT Feyn?LqR,N? QVcazv~GGWT4e; Z3B9 $|\ogqxm4EҠ5E1 //M^ GԳ3ӘFAkJR J/瞉~>#{=GZBDH"dRڷ'e(0|^Eun J+b劓pѕ%Xr(e !Yg`⺷&N|_UglKp:u=["bTZŮ]l //xۃy.xZ((@4("65hޛ'WT]A:lOLL`5U MHFfޱVmBL(I2 Hrw%"t^\e4m t:((M4<וt[旝thjމf>zsǍas<ϻgsu?aE'{ŸY$%`Ag;>oۥ=~KЛ!Mܽz|gW֭RqFk_M_"UT`a/XLQ~ "' BGF[.[.ߟj0pz.Ǣ3i/׽Baq`]\|Amڰ~-.2׏>_Tu}?22۷c$æ-&CmlBM$/ctO갗6n/+6%ayvI1Zl2\?%rΕwaA)QA+aFj{w9[Ooҿ`ZT CR@T?^|۸c k3/[ogm^ -l0ІE0/](Z@ٖGqRe5 |, ۟D]+G![(vo?vigy& d|Kގb! 邩!īm CZ??W]y}xߺeF7_at@㘼aN*aqҟ@`mW5y>>mfTd(0*glڄΏ|F .B `{}wιo4[a! `RϋyoDVH$wXK8 ߋO8CU\w!f z F Z BW(YD `/;5g]%H(FdS66@RJֱ\߾z|_җ#xM+qvBa^F&.$ `i$/nm7n@tjhZޫP)@S]Umb߾k\f1Usf.c{ylLcu\Z1@1~:{6+ztOmcqSHCrJ+镗ۤ<9F\=+?o/(Q4j QSbXTk8@^B>z I_μi)T@EY 95L[hiTPu[Ob q 5Ѕʛ#`y)ߞ-8n4`_#ׂ5L^}0fv #b I>Б<)H$ilVր'ͺ>G[{koK" gO>< HK ҒٖoCKY)/?ad@oq. ҏF<1Ѽ$\_R%Dž҈bjzKWǓ|4X;A¼ yQ/ H:OJDq;xa;f%Hu1Ӵ4ViU*m2 AUUHe~nFQ\;oC~~cݟIЊ;$.4x#$ݏfgQ6 T+gT*jVh)?V ,P'`بä @&իsWx졟b>i,m%ſXmK͛ q{E?,Eĭ#^WHĵd{jr2e\͑7%olGy H8"YTz4FN n#g#)Ih/'BƎJ7.8*__&5k@oa]+i6PX *O00.!@ӃteF(Xz5'cYpŃxKޙx:hL< @J p?] Pw$Ԟ !4 9g0Ba+V7u ܖt^vi3Un{үBO*=~2 ыu'6M Rm i7x?621IP:q(1e䴿m Y] #@)HGRA0 %#C*c vvt- FUU#,$*8pO)83&Q DiQ'vt2xs6Z6\ xZ@6 a ^bd06 ܍Ihٞ D!a~C}yH֛$;>Feׄ70alG!}G. h7@ҿ=Q+BJ/De3%Hlv?ӄgH^  âH J`ntqJ%/ӭewH 3q"-!(AێgR;bORKΜ37c߹Gӈ %@Dƛ0<٦cǎo}oa| n7B8 iNGYIAaE)|r&d :,v J8D&δ-U3H +4KEe[]w܊Zy*7!*aʕ/ rbΝ(~:slt`ExEM4^)?[wūGK>Q~MH(p/7IOύ:;1+/Z` <F>sII<~+V=G :p %|D<Y?2(?|qH~h(5ߨOUuwRhZ"luZFHA6ajbtAtV*HȊpǶ ½kr]bvR[nr ?-7^N|e=Y(anutܹ30Go \$g&@$ b$ KIz Z&`sP k|z)#j QQTJPG*\DžyVL&$\b+{}?{c6 Fo,#Œh6nh8.~ 0~ ]B=1R׼z,]6&a[0ihpX݇qbh2iH^ibue:q fcU/_\ngl0Lfb^B:t Kȡi9O PxoXұ%]u^H] a Ŏ4-l!²]h3\f-ضm+n=qWD i њrZ]~?K0wyg@2^K<݇ Pxe4z٫PрjezJD^A|Նgm6 HiCɴGA6DbeӄDL14{`l@9|3@c@؋‹ʵ%IQQ@Ȟ(J\^Xy2iQ+Pi4># *a33(&Q*CR $$j՟6(W0L6>@ +u=;xۤ/}_{~}sJdJb6㑇٦~x'?%$ZA<b@u(Y]w< D1vwz\^S6C0::EQz*n_j5 PZ)q`X.,n fPF4uǬ0 ;f qвu81ZDŽL7 Y{jx¦m7 {8樳(=&N]P@g6\|~u;|#Gv8¦@ ?* X43kRٖ#6AbtMXDa3C0dy9]K~'o$",20 +=̛$t-}@ԟ;d5_44ؘ}$LVp[oQ7˘Bcr^8tS/e)a1$j 4t,K/V}^1z IX3Ow1(o??e C7 j}@RZ5F\'OJaaa÷%\ Mm@ZК5 aU²,4U iArjP5 ,L;}O;, upʖpݟ~Ta4Չ xLbg90v߻+N= ;_2A!dۮIȵ sjO<,l/CUz=Ie2 4ljm؀>&RBvP9L\d***j@)`0LF֠uOrPvЌ3Y Ri AN{DIo7o:=7/~w92=p7 wƪ'<zcaL@6"A]3V:vŗ]מUHةk- )FhT$QQt<$yiTUTUmT%AX#ޝ(]-A@Aa X@Nw28%^^ukڄZlFOJOssހAg#Rk ]sy79~W\pr(PKxC] '}I?w} DV xˇ&~`lqU 'KBa@!>҆!]ߍ7bժ|f 8t]#P0md4f ՂUa;-v -ˁŖv,m+/tn Ddm 'qbwJiSc>3 p-T`7MqSC!sӥ싮ŦIj1vЯ`NpئE?z Q XUԭ4$ӴPSH-jAEM : 8bӀN*Ү SE#m|B@ f$A6Ǟ_>fE6?ip9ʓG>Rqr,ـmB$܊xyફ~{~9\L6ans 'u]W~$сaك{ |0o@~@>y6:II-O) ԁbBϿضP_2\»"EYwr YG6? %kX:ꆀC{1yF]AT\Y(i! $hZ U3AR{LC7Do꺮c=|z|GcT*_I#:DJ0pA@1R#.7i$ayEѭFvxOGf<#_chV Rg?+N]umNlн!  ;y ܊C17Lu1 r`IԞVһW ^)HA- ]kB0vYr#e1[ vV ;f÷1R~pZqV8^L@T@K$(o*=\$@\(MYÝc.M[C ^$ ¢iz;AG#-?L!)ch`]KeR=+j9w3,P.{}l#:Qxm`S5 =H 膅Qk5M؎2E= 2OҊ!@DȒ"Op;-4|48eg\g_ Gᐾ)ӝyۼo`Eow@,BGp豟aYob\"qƶ9|;kO i ë'xNbdM0_[T Mh M}jiCU=^aеDz i!P7a 1eOde@=s&C E RΛN 9,UT<0Ȃ @ BjHIBtkRاV*\oʳnB_Ln k, or k>?Z(|4T*yK\<= 3H8z7.88W&ƾ//ڳ-ཻ7x4g>7 0Zk f1~=Ih@j#.F1Ep 7t1K0Ob9ę@Zr"s&z!tz*$5 eܕJ%%&&fj?ެBZ,ۅmlB'R޸)y-3,=ޓx8-] x[onp.byP.G}`}2lzQ o7o|2Jֻ>,bZםvֶ@qR zYn~" P,; ^2 St t-M @,YexV+OؘQ襢ϩVb]ގS$2Aq7°^ 8@}]ݵJ!3Pc߽1T5h&@_CVvA4XH8V' B<#y@OZ;GI> d1>f(*ɭ vUNRNg=ˬ\kiis(%ȍQB&7ا–YyäĪիy;82l=9Ywܸ k6)TG&6$Ţ$N+)ѳ?[+ zI> 0.+!c HS9[^qKwϷO"xPILsA.g@ZPrm)gP y)26l}+'alÛ[v&Vr/&J +NcQ,dq[\/㴋 U!k;sw/0ќI ' x5}4^@:Ge& eIc$ ]~R #R̙-(NJ(PTC ~OIhӗsũ_̼$=q .ZfV )MnOg\5 y14ߵIx^Q{Q{]$WY$aϋ 2 1O0%,̛e -gCkXќj+@ HYoӴiCwF/ 5u<>vƭfYp6Sd5CDM?!M`ຝ9tF!yd3iRiQCNpR22ԜTHA@:_XNI#AɤIY:A G 9 QhW:NH2Po|-N@[|pH] :nFRxյLx^?(6"AͫJj IDAT>`۶ǚS1`ə@LAOӈ%֭[rzxx?vŞ~)QFF`3`}7gm $Fe XP(JWijcxl>|J9眃f8kuX_yh HZMd䝣uYرcg@CRxxrW|!y۰\-?׿>۶.|5xӀ$?/,84 EuQXS(\7 I 䗍{wdܯ~Wgб '10͠s?m ^Mmx@0Md4U  #dfE(kEJumӭp%b_|1%KiNpbb).Jhd=H`5\oεl󽸁T!.W`/,j PMRMG{ ˺Ӌ1J?uӶ'S1S9(p`OKX8cC\? ^})RiA}50"*ZO[)($jaw`= *σH%Faq87>|z5OXXE$y!3p뭷+W׿ߏ*;6dߜI֤$ s .j1R i`/zE@IexB4gȣ0`!MhN dHUd&V@+]@DcspU)CȎ`?+ׯyz h4HG? DZUW10I@G5=`AKjer%y]]GBiUQm)G"vb[HȬ-|BӖ`[$FZ|$$עBl5*W7,$U iBw:nSo#U\k2jՑA uAV|cKE`чB3BV X?Ct} \C#nI:[KVys<;@?HIoN_K/hy4Pрɗø_Q EFA f FӉBB;3oMg#JY%)p\E *Aע ?i fڑ(u\~).yTyف馑SڑriN!,%яR$e)/vAc{)(_Pvƙ] ?6h@+< u<@X¯hk<%X0cn;zJV,ʥW/} (]JG)–Y ˋû\mcqh-瞅˻rSCϠ@-㹁E1F[k㝹","0rlqف݁@aAVHGQ\m ,\6z\z9v^nCpKEрe9͎ʞͦW,K'-(l$J-[D [ꅶKε: ^[s Jឃe D~XO$uch)KjS_s6D+L7Q?:`p1yЮin.($)eKaLREH~) އtK xT'pi7v]{px8iDva?$?YXFo{6%[@ *^~GG`j[Y5D:$S]7.]]9םnJG0ygMOaPi?^^SՐen38l1 t U+,j0׬#/4?Z:_VA~p(&އ4i#,?u t{E ۏNxH:NZ}Mz0 2>|_WEVQб4T4cO<_Yta:dq Q@o˂ M`iˁ1Fsj?ac/8O, ݦ(g"M؎sH6/lqB4EB(_ _ @|$1[a׏bBKt݅UJӳh6К5rlajM8EifRpBtv=@ 8m)NZ8ԢE`9dMC $ i"n/E`:Zk溮cɒ%] x_ #(Mj:.wW N Hc>nw9ERŶUPV*M;$,(cyjz iٺK0Өj.tT @ 0^:2`r, }"ϴ<0t 荹*k?% ZiXsq '4tt|!Uكvߋ [`я 0O$^6^㉨0{A$$cyXw<rQ>c*W*0k/òli)*"ZhkI8`:3S 0f' і^s\I(O7l܀=w"ν(#~rHjd+QB~ 'S_G"=VJZ 8}ð%a꾼4`$ ÂW12pY*\ 훪W* mM$#i6J'HQcfӴRmΉu}UͿbXǰgЃf*Br9G6Pwcg6>֬xw|Z5f1`y fOM , B Ó{~~f-_nOhqF0l{pNܥ{Y;E_whr鸺8Cޅ \e"ۃى#iڭAbfYc5fkI3{EDQyؼaK42P-T%:}59H@.1jRU_˥>ɨ9Z9W$9Q:@ӡVk~|QnDxO@'j෱'Fk2su[@{,E Z^j@3Xe~*GX1XRD:>XJD!5 TAFv!0R2L^FQ̩쿢ETA\@N:x.N30hT,FgM[vzԜ^9${)0. ZU$0K ByTr2gR>?8ykyQscO 5^g‘M[Oo]mgo8tй\/F<,`+03<ϣSS$T)i[X* C0 jU@O\((z^G4eB2P߸͍,>@6DB9@ *5Z峨egr2kE>dqM@8Fuxct@P|` 6mk|1 tiSVeXE@VLUA<=؀k`gT?J`3;({ɎX`(X:ĄJ T \sϿ~/ݿk)/Z+t\WӡE-'4Ux͛5Gۮ^<-8NosƎnU g 3/(  ySXVqq\I  c'~GoX& 88s#@e^*ਕP:TQ e<^@o(F_.C3^.᪗+A5:GǙ3 =SSŚ.u?Ak1>k,&ӫ@@;vb˕bU[ps׬8@2< QsH $i,dIDQB.*,@\Vid sҰR+%n2J ysBS&IO?&ta##հP)bDbRz7>P|Vh>y}%ms+E1M'a)'~ \3% Y=W**S\,$TVFni!W"4<$z~["VvItPjI|(x8k2}C˲E\\u |^x=&n· >C3x~c_VaȠc݆K *rcВ<=XhHe~F?h;@_w } k+R1d4J,frH K1dR1W%R VP-U@:55j 8w4V$ ~o*:}$y/$tWK6z>mܤ9~'߰5ew#^(IEx}A.; IDAT խ!,%xn]8b%#@d;Uh/@.`?g hu 5hM7srZfLb>F "&P5Ej.ΥȊb x5^R-+"kNn·ѝh9c's;Oir;>p^_'@ k ㌋2ywݲi(,{ܪ|U 7U trՁX zUN=h^,T*KHe}.Π. H@)T\jLC_H4GkDBfz>Cs,_N7ٿcivupېPΛӰ2kN8g0.ra'h\7,@Wm-J@CFNSKL!]@U,M_DrԶTTd ``F drU Eȥ2jIE՜m" $𸼪! J=blƖcnWcF~|V_; qQS>@䠑J{kЯ /r3fXEi,)@dfBkg,G!0Gli>prJhܸ,.WMcQ("X!+PL6 ($ȹ5,ƒ< [. M-kɦS(ڇ;ro8(xuCCx1O|v@vGa&=wߍ{w\ͲF+I98oǥ2]_e @iV yT6 $ @GK pu<{j(깼'Z89I >f7l"t{JM\㏨cy 9ny0IAǷM-]XK;sb`:/r !\AȗP&I*xWh?.W#[; =*CO LfMGvYK,MæW\Hլʦ-P=k12?\n@hNxg@ˆP'.N˫dᱍ-)u5ۖ3TX0$&g@QnXDZ 1ab"!bIX!XDl~DZi ryrJZQmZ 2%z5ˤג8An  (1oU.jۇ,CI( :P}~+/>EnQ4n%T+hv~fײ tUIw^oЮ2@`iB:YЫl J@- % G&K3(9HE(B.d|{5G{vEDD9WŸ1;< 3OG tǒ.Rs@1|\Ȫ>/Uz7bS_(;H$9jF`3F}iͶ|fG0JVufUPiO~;Œ4ǚ X%Z- wP, "@H/]0?RH'Pdvt}iW="L~*Zjd浑>rj>v?rk܄pB&dby 'QPN)AߴJpx|W826ehpyoe/6͖zG6(7rX:r{p>qe1LF@T. 䦱 (_oS"L Ј>ϸB;4)F,M;C>t0@slAD^d~r֯_i(*y"y jRaE=8T(P/5*jOb rRW/W?SFugb>ckpz5&._QrcAV@-hd/J.G?o?ľ4n+5eGRu.Wu'S.Ώσ:T aq~^ סe~pKPDj(z7oЋ?vjB^ g=&oگXvU-h  a U)8J`gn Ivk|7_I;{Kowoz3{4 GF[[?}/^ʜ V:R*СCؽ{7~`Cg d^)p|N7rs;x oP)~J| g@!p rX) "ApK8(CȗrDkXv(b j?z5k>ة<b6DzU2C}ث& O=SϹjvf@ড_.L0H`ݘ.x=05;!֢KG4$ ,A\}٨$erhҌ=`h'@BӉ+V)^w];0Nޞ-jSҡݨ䎠Ex@K$4K?"7rH|$݇S0qv҅}w~ smh~i,]a h"f0 -d0d+Œ\"7:H`GJekB6Nr.W6#qix(;<#CЋLY{G4XvXӃ‰[ac:3?𖷪XlN'+XWK{z*nRUKz]=1m")UJ\3jp1Elb2K &>Fy,PZk t t0U(FTQ+j(CV!PʍQ+myD#g9"keW)0 p{[ AF,k46nMޟhO@b!!ZM .'ہukZ2w0/,T``ͦ,=Ќ@5%gigZ<4tR ]?|j!#FtZUT(8x #'3&F}BU,'p*AP I򪄠Zz5!X#OKNNs|3,=c%tv(7[;BknNsŵ-r+FN/pף-_މ?Oc[*o4z03T,x@!G9onmh}Z/NT(fQ*WOBH HB*XM IKJlZ=٨0Rm6lPHAR-W0v5*=P]x5_U/ #5Qv|@z0Nskd"jrys[R<= H+]x/Pɕz وx4=X\ *'hj+b8͔%YfRE<?B5\^nP%NG +Po^JIc[ˀBi!D[ e͉ڃ.Lg\S9|&-G?'g,k]@; q|\qms?>=m~@zfyxF%$m&bl޲{zJw|`6*(`p" -WjxGq_nq:,AC Bϩ:@a: 7 ?ӯ2?^eM tܨ{sCAN:i@pe`&c]AAHS+hj AYe dRq{FxLòryFz#@<!.|'@ԔG?>=~9RSOGۙ G9/<84NٶM,zebZcUP(੧}߽Ȭ*ځn(L  rT2^_^_^>k; ۏX"W%TZqy _ s*VRGDuv?  ҹtޟvb[>e:0A4]nLegXpQW?NMua#[ p"wdf򢌩pUW!avvX )b.;3JU#p{ "4b Ep4tcoHay8~N_ʮDexJ ɇ*BwDG%b|HxSGV kghI ͬ_: owCOGgN@ |2=: {8 b 8"đ`I#H,@ٝHaUU8kBd4a!`^oۄ@'Xj=dٸ~ޢ3LMN|8Oe`?^Ɲ8z8p,iD1wkyF?F1}-jT_">tukhR(JH- $15=d2 'M!D54xi 0 }&^ݘ Fr6tSߤifOn@$˚w#ЩT>0v7#Ci{x=f;@#@&@,_҃UO/{(suDf,y<AeR򐥂: kP*CХP-h:gkr?(~P)$YǁƐx5-7G(2\'Zq4>&Wc qIJhf9K/;4a4c+zQF6s^m c ic`{-vZUߣ\|FTFP@"@APBH]:6 С# ڴ@-QTuj1l=}<\鉇CH \׬Oy^I1kFfvf}Dz5UYXz--HH3}0՞CAF`5,^Q-GVZO8KŰxxAP#Ss(YH"U-˺5W~NT`jҢƩ%<>ͶGo\7~bL?0\~238ieJJp,@#p`^l2Aҁv~zX{+A|Eb,L.Na# k;a BwEUr| &@B:A)BZH#ۇLFPΚ ǯzKV,9qEpޟ#κݨ9H8枿_m?BAIю{o' ׍{`s5UL@:LOs;o|\?ydvTYX7ng>wq:  C>`IJPۍ@X +]l̦HORH"A- y%2KU$RQB2n/{?zٿ )$'ЯϽⳚo7z V܃ގRγ̚`thn\WMF?jVTŽWb>o=O/KtxWAxWY<#/ׅ@`|D.. =!Jney@^")7fLA>WGQm-^j_TC.U*ZK[4T)8 ߋhwV̬e%YΠ]}70"Y`Ӧ xQ% y j2T\B#}?#+ @_^+qXwyWK]α y^|w4I]^aݸߍWlGl 9+tC=| "<_(Xǧ8xJU7hΡlu>.# (\9׃M_w ^?)} 'TXڟ 8.=3M@` ~@uza}:}|J;b3H&f}.Tc勤aA_ZtDšeEwBi5/HMitvvb?7-{ѻO 6"2Y_v6ȬH& lѤh 8_lVVJEy IDAT7 _n?V%VbUzV,@!0c8`ج;IfR \Al ^ȡ OCCUa-J.Ґ=^H(7:W>_؅N!STݙY@+>VhOf}zͯl:X88~oPY0یUsL#F( 4b w"֗#@A||.$/~7;XJlj),fڈz" ̀g ~Os9?b^@_o/JW݋+yiN @\ ov<^M'fq)Z~zF` @$FGHaGpGr"0|N;cir"FŖcGjImAH~ LMNB2żJ9E1 v@nDO'uDwHW/"XFP6n܄HI%rW br N?_mf}V ,ca.au۹;`'"ph39d 3S;<$|21(fQYGh Ǒ%LJGӁ*4P\A\bǾly^ ʵ5B13˳`V>p4Gw+`%z z^{mo#p;zv@ePY?VJf#6OkHe !)Bʧ1;=i,.&azzZ<,-.?ƃLkJH$%^Iaju5鴋>u㦿#weI K(ϭ9hf}*Oge6<~Av+"+_h0m#0RZ$v~G#YځF=;"yv4[pf%LMM^Li$gG|aټ|:UWh *tR Q̡^ʣ0L>k¾1\xҿEZ&0tCF?+hv4Ocxt }kU3j: y]?[2'2.pU)Ļv^h<#7u`ffa 0< c цhꪵ馚4$*Ø,$1z'~Nv]/VTq@-T}\koctJ šZ.1i51M#mp(fd֧>M~9vc^J%կ~r s,^Vm5hF{o5CPWW7"0‘:QFDDDA0DG߁׉?S.L{,8ѨJ8uiTH.3Qs(q6-ﮃ*Bz翾S$ }]tY+%dvr|F|Zo~yn'@O#?[o'}ɶ]h% ;Ck_-iT*ٶ|(9`F8E$ܡ2#"0(GF G4t=6p~ Eٖ2Et}y22~s!x$I ~SweZ_#~UvFlڈJO+n< w ytq]?\MUg}pyL{R^G 7C8PjF"B6CpD"= Pu4xޏ'ΰO%ߊNLwKKeZCA<Rc vf}}K܁|~-oZٍA7^Am4f}+F=?GNʽ~zM$_[&lݺ% VUn'ӊN0Ċ D)WjjpۉswُILO`zzJ*L<Z5h_y^Ԝ^9 :eb.C5z&@gd:X矆!@ZjȸhT=-w܌Ogvw#Q5YoTB$|10>>[*ħ>)wf~b'Y0JeY 6a=I(M!8<;ELOr^| " (=K@N>$7rituu ǥ0XKX@KY[eW&ľ=%vē|2au~ӰV3?yj`/F@/ v· |#` {V8<>szh-dd)V"@֓߇#3j$%$SYri2 ps>l?\|e?3=ʍbt3#%DzȤP, ;|;i=3 \8::x-[q; v=We 5f+09hCy86oi QHSXX@*HǔX\La>f ]و7t?| Fi0$IBN 2 ^ڙi:h֧Z;22nW*@?߶TڵKsM^޽[,Ǘ@)h[5Y4kR3p&ܲ 63ۋq$Us;V%2w?׸}jrP3H`T$5^4ţ+/C*Ր[D2i3譶~ `~_VBes*ӶoǞ|7y"G]ML|*(FY/iة y!5Ջ`o蘺zEx3,9,ͨHt|ً pdK4R'@R4$Kz:4܇Pϣ3ln= >[oj.n|vvq+ / \7w\?X,U~}zzG͖ 4K< XF@(^Cp'{N> -2,Ʀ!K1E>5E6(hXQfN+Z̆~f7SV;@"v}]-|@8y{3 m۶2v4R$J_>axD1xf8.=@H)ʓbwf>Oޣh.Cz##OM X`Y"D7o: HRRB#! :9]@Z3!h>z'W}赼lOw;3~c |Fl~ 퉂zm9" vf~;c=Ό|{/.O~gt\z@*o>1k#% 7X{u־f~>e6KFQ*/{"|s=X:>y_.) s <ם=O>S$nVzƶm}/wh(@RJ_y)5ebQkDhv<1:4 K? fNt~tK0`_NB^;vT*]va˖-X} {̵A*a~F[Y`orcI; 1cdhu,븚3uGϏ&|Q\|D dQJ` F|SU֏0Z\:>@X#׺v x]Xf0>,gvwrz{{no;UF>Ioy۶mÎg188arax9D z $PxM7ᄓN; Yk/ #+ 4<]X+O?9cC?:!B!DA*##f!Tʊd$fs%-?{S+ԋ BdEX,!F&YVL@,F&<8<|W1V s^],XhYNHqonp99!< e t;31;݌oѭyo;yȑJ< 2(J :z#i۷޻k0VnzXng47]l9`tnAzY.JFm7vzߏF$.=?>Ѡ0J+o$ap B*!W2FYqۭh]yF8=q'I:#K.MoƎ@tuJUSh!Xy}ٲ֌nvf3ͲfjgƧ_ zMМs^ٟT2@/j8$јxir>u DxG6nFFFߏ 9YȊ8d$` +C`Dt~V7ؙfjc(F`F:32FUCU ^iu*TەżF(122Qbdtؼy C~M`y07_;ƀj Xٚn.\y\{Y1I&kW] ~quo&uYx=3V<^|E&{#k0<<2]yf"<ϳ\`Vk}bHzYHx+c*rM79N:@B/AJ=&bͺQlZ?~e1:oַf} \}n`\ h%\l` {Oyp'@kwZk6diAvAɨ!A D:bxm?׬>"CWٳg6GUJhk6;m{Hoy2&j@\k]5 ط?fg7V`HiMe!Qc}xi_{n·H$pȇp$~ cxX"c:֍p5ZV/7ogЛEuf)vbFۍbvb,MA@u_f xcEP@|a‚qىzϡ[*ܜ.7*"" }{vu0::>?:#pZ  <فՠgςLrcg4۳@e8܋<˭7+X_wuX,L&鶽8'tfE0Zr+$XÞ'ky#"(֢֭ 7cppކQ=;w#<{4fu}9kىyVBډxXcǵ2뮫߿D饥ڍ=/G,m8H3PbL'G<8{?b:0"Nl8!t # 3G3gfjvmcv^0s[aU;h/bv.Ƀ۞iCI_xDIj#*y(TCXf- pT^l2v|Fj*Ghfqq_ 8'|+x+"13;$IB6G?Ѝ8x͏ӆ5u~zD)v"VvϷ<^vNIDAT -Xxc}zjJ"O!,ʳQN %cI4ABat)񈑑a[75kG0׉qlXRe殛=7ώ0z<oTx!/"#A$BvВ6&t< yuIAb4qrpΪj,X[ X V~144rѮC~\3C` O2nwpbS`+UDxN,"H`jrvR%uP+ T v"݆hJ)욘hyO_bxleGlȘztl?h9O(q.}.W$f㘏  $ɥ YUX_4 KGc]`s߮n ctdD"axdC|+ЃXZҏ>v=9Yi! @iIW"oh,12 B+,a"Qn0=v& .w]Wt<"ى^ mU?buYv*-ht J #hzBo|㥈t9Wl^3@DB&B @$00x45MyȒAcF2n·ukxD?8>5A ;1rEQя<@y~رl  K_\f^ċ( H$Ő ;jޢԝrPYiȒO74$#խG aæ-bdd##k(W݂{~ߏH8 KKعs'EJZ kh$( %І@LJjG! x=ےz5@͢@`.޾>oق~Dږy< {1sϽH8mvw !*Mw#Hݷ5 kIG<R!ݘY( py|-F,V4p,WMY 8@у_\vwE#,f^+/|Kb\ӠC$ug4$IR:z iPGAqᵎxp뮫gH2Q1]UOLjq-Z aߠ`4ƍISF: <1=6.8"5@ 5-.^(4MdU[ۉs8Ώ=!$5Nkdeu6XKCUu"}k b}bؗ9K`V[yS S֟ӧ1m~,FhTa5A,ڛ MZEĹAkw"dDDDDDDWQ J[IENDB`(0` #0#. $ A#+"$$$*&#7(2)#***;,"1-+C/ D0!8/)30-;2,221;63F8/k<=96D:3;::_=&`?(D=9J>6JB;jD*CCCQD;vH(JGD^I:L$OIEdK:tM2KKKVLDxQ5nP<S.QPN_QG]SLSSSfVLZ;xZE\5eYPZZZ]Cl^Tb8b^\bHybRfb^g;sdZdcciIkfcohc|i]mEkWmQkkkvlfqItHw>~rjt\z9uhtttyX}Bxt<zh~L}Uzs{{{b}sރC}yYrnitq|ȇZe{vyS|wwčh{˒k_Օj{ȗug؜sŝ֢}nˣyקħw笃Ԭ̬|ƭͯ汌αس緖ʵԹǹ澣˽þ›ʿè»ijƺƼɧɶɿͳΰϸѳнӻչؾ{{bP>0  >YB0  8Y{Y*H00JoPH''B\>8 '>b>ĸvYH8 >YPؿ}dd'05050 >P”mK-@*z0000>>HoP0#-7@Glx 005'>H˜|Q7#19^m500 >H{>%1=@LXND9V1.850*>>ğ|U=(ԅ000a>8B*'57@GLV^VVNN;C63B000>5ġ|d@1p 0507>0PEKQUX^ijjcZOC?;?6 3L000>'མ|X@1 !g* 505 > ||}p`ZIC:32t='/^005z> |XG6$  `0500' > Ѱ~y`RA<2)"&e9 2Z050N>|aL=1  ,S07500>ûnSMA<4/&&]7*000.>„aQ=1$   ,R0500>ʾn_SF<4,))&[500 >DŽdQ@6% O888`>ʾ4W Y>٣uskhddd^XXXXXXU-Y>{ó~~yyo䵣}ssli^^^XXXXU nbf%Y>oλ~~~yMTº~vVY>oǵzzwli^^XXXXR{#Y>b˻~y`_ ZbiY>Yzxli^^XX(C{ #Y>PŶyg*CʏPsY>P̼zrl^XX63|ovoԡb>Hpbbb5.v>Y>B̼uhXG+uYPYb Y>> ļHHH> Y5Y>>'ɹXa>>>0PH Y>0'ĽU05555>B8BY> 0İ\|qda\QE7H85888>bY>0ƲY> PBoY>Pv>>BHYbv'voYYPB>>>JYbob5{obYPPB>BHPHP( @  .*"$##2)#:,"-,+>3+Q5!333=61F8.L9-g<]<$X=*;;;S=-D<6N=1^@+E?:zCcB+TB5BBBLC=TD9ZE7fF1kG.xI(QHBLHEbJ9rM4\MCLLLxO3qO8QMK{R5kQ?\PHdQDU3lUEdUJTTTY;[+zYBjXLuZF[XVeZS[ZZ_Da?`^^q`Tgb^eFdQeKmc]eO~eSidai8ddcre\zfYhQhTrg`khflGlKk[oAoJylcllko]rFwnhqRuplsasfsjsss{Qz[xww{[zpzs|k}b}h[||{b]~zxgtt|rg|gv}zszvuzǕrzě~iĝ̞~ա|ТˤäȧЫxzŭˮ۳Ǵ鸗ֹ¹迢Ҿ˾ĜµƠŴȤɻ̫̻ιҴѾպؾyaaa; &;X=d= &Bo&@lXta@a*K何g< _]**Q@tK@I[L<0^**Kya@-)) Hi;*X£oF%  0ԡ** lӴrY9 cnP*`a}hYD:/'!V4*- lpWMTOE8,"bbY**1lu_A1  J9-* thM3! Z1**˲~m\C6.#74**m~e\?2$$R**  s^H88..$$$$}tK>KƸ{{ssxxLSz@Ź+M=ǵzwkkSUQ5ʹwwqEM*Ʊvhh_(Xed*ƹvvNНPǵm|lXGٹ@Ҿ{jXXlQϸxf=@5Ͻx[**-rQ=5뽺-;tdaadlt=(0/+(E/ P4!M4#444<51G6*[9"S9'P:*B93>:7Z=*<;;M=2b?&R>0>>>ZA0_B.EA=AAAKB<EB@fE-lG.OE?WF:UG=FFF^I:IIIfL9mN8MLLRNKgQBsR;ZRMTSSX9cVMiWJmXIXWVvZF]1m[Nw\Ia7]]]`FbFbJga]baajc^dccgLhMpf_vg\hfefff}i\lLlSl[lkjoYrUsRspmqqpset^utsuuux`xvu~wsyd{\zxvxxxyq|]{q|m~{y~lV~pn~~~ugjikrmvsxruzԕjx{}ǞϢ|å|ĩxīɭůñɳ¶̸Ƹ⺞һǺҾ̾ƾÛßéƟƮȢƼɦȺʨȿͬͼԹֽٿV94V4.Km;e!9[O`γ[OA!OO`!tQ:(Z $!;O`$fR>+,{я$O`)qW?,/G&:$8O`.uYB- C x$Q`4}^E2" D'E$O`9}_G/# 3]%hO`@jM7'  <$O`FhM7' 0$!--47(&*6L`v! x^]EMq/A 45 Yw~ f@$mZ X K9) W% X0. kU?#a| +`J2'$"g8p|:>}o\ND=GcOlF>xeTH;$X1hPF>q_SI;>Bs@FA{iRU, t~dVFuF3ry ce}쬼^d-n@!8O^ OkPo3;M>s<}<@`{)Cz,kx<.q[~7v^9D©D9Zdpٖ9њX&WK϶liEB3 h34qXHy$p2@`:m^@?^Zy0[휕7u6VՑ\.7jR"(`P(,PUF)!9Z1h8t!xg^zN,ApA<" d6f)u0tu~[~&?ZX|e9X,*"UUE$ !9]jP!EQ"!$GQ?Lt?<ƘW^yͩ< <`ǵ#e[㝈~~|h&w6l/l/e6PUUr (UJij^胶B)B\.4(JJH8e~Vƶmgγ>k:6:Nًd AQF'z~//is `z=Dj5t.kV ,!D@rT*-4mRZ|>T* t]QB)Bt]V~B)QJZ6FEsiEmha8+p8c:LdvZ-Ͷmc㸖e14AQt]G>wɲe4M(!$e>}\k- '5N`rq`6urι뺮mۮijV9C !((B8*!D4J%gpp###txx +睁644L0Նh>m}SO=M_~y1 Cc7o^g)<2@nE"7ɼOe[}c社RJ+ "EQjj.^0D=qDz,nn4@3`VZ-u]U*j+AZ hT*Bѭj|xx,Pj$\|R 牪`~!K/Qٽ0Mַ=zT0 {xCHr@?x@?a!J=[krPU~[Dr\~pppi (dHd' ~`1Vc`㸦ialjmksRju)4;644DFFFZm HPt{yHd :G4MDؘWWj) qK@lDp#>Q,ӔNHkHSj/Zj|>@Qa_^C- @#s쑖Ɏ Z,mۺ$sͦb۶N)uŢ]TxZ%@E(BT*lxx )ôZB4MBBER(H.û1:t{wnGHn~G ~A[};-;SNjz4JZA[RZ?.XQa߬.Bt]sjui#7铠5~=_emۮanVs !RU0tEQt=s2jôZJ 388ȆjFrr9‘#Gp]wqs4M?#^Ux@}?Do;4cS4Mj"MӖZHr~[ka-˅!DX7|/e:8v]4o2mk"E9'\28HKZBp*GhmhjC\\.@ E( H-!O 2 O~p{WEO1<$▀)BHyYu)a{;ͅ &")3x,8>J袋(^|h"vXUD]mxn6:W o"Ӈ[~&]wuՙ߭T*Fe[~nu]W᜻1׶mײdf׾B\.*jh\.YX 4`Æ+DW,+ !F x4/j~0+oVPVn:r9i&IT@~ Hn1<<|>Зs'hmn54uߗCJB`W*V@ iTFTRV\.s]|zmBL)M?)Fq2舁'"\ 2eY@b/B^<Y VN>_BpB[=Eু5nEmNPvjfS,KlSU5ƋjtxxDV*VQ(`ZMZj5R,yH';q̜~4b@oD I^ OR]ЅQs?fւH5Q.qln,X`=uiM$^F2op뭷~PQ fznd޽h6s^[f~\s5EJyhSfb4!X@韕3VWK׸ r:'tR 2'¼?劢|z8÷on=s:ƥKo_\!{3T ?BZvhG(H<h$dh֟AZ%SSS " 47|T5M!]u~aw߾}R7:˼׮][j!Uh8{" "`6CYi@D'6w3 j,h C7g> T*}\Ӵg,w֭|߾}_l?GFFNg)2i~Nb:q)v3(yd*]JA~A]Fu]롩c9{j ʻ r} g5ODI`ɉf3@Fs!$B1 @^:/>waT80weKRkƿ?+V2}5 4dO[2'0|S_8<IǴhm+Ik`2@i&N,߭޲T*}:`uOgOnA:=@+"X<89H@hY?؇Z=.OIGC 軀(4-C5)N6s&T%R/hvJ>&# %Z?<&[gATd yb{?q7w$|@)!XYfV@P,W5En۶Aʕ+/\:Ad!4g݈ XiISbZt1 om`E}B W? s&MA)< ry`9Ax< ASq-Gp<_h_?,˄m[}z`u2>3 U[=~%@ꅹ"i4 HyL<>$u`[\ǂc{ړsOq`h0MXFeZ^YǶn199JPys//&ɋم.O:z\ʤ7;"[!v0 Ѝ;y@} EPwm񱣨OOѨò `G+N_-| 8GDՀj4۰̶bߜ ̱jֽ2&,Ӏepm9s66ǂk<,=icEdTQ6z2"t;HQd s&@ /h04M4Ma[Ѕi8: v0=5qg`[- 2F7x''8_z״L&T/ GᇓNg`*R|~uFq`Y,Y>W\q*A,YCCCz0Za`iZ࿜eГ hbtth4:833hmض 4j5#3UplS;DRt&ʄ-TZGu]68(cei9݋}l///ʕ+e']rιiRJt]1FOj=lہh68z(Pal8033V۶:Ep+āpa(-@:` gu^hyume8b7 j❝co՗#gs q;v୷c^{-6l69X˯ůai+Q!/8}pl*Feb 7mٛko¶X9oCϢ^cppwoL۟e8: @4R,l|R7gc||<`EEtR('> /z}Eh/Ճ ϗs4T%= iB= Pq8!* D˼wXd%V;dz\ǭ#P,Ʈ]㭷&Ѻ 7'8+@)syGGToA @&D._E~,7Wj6׬9o{vZ|{s9'N u]GR +Wʕ+8CЙὈbG_ǟwʤg s//6j5OOxGosKh4l+>z+~3TCMoLq\f=凱޻gEo^xPߍ7&ʟj`1]וri[iB@# x~ Y> ?y) \azaËVbÖbn(, r9߂C~\<8Gd69)_}-zXgtmϞ=xbw>&?F8LUUiJR[#_4iH,_P N?pCWჷ68O?m8j__˿@T5\9s^>&~mb{X rk׽;>?=='x"} _5\({P*2ڶ}@At4}/NB4%?SlXpz7jG|{8|PD~b XG3{!љ}?os`?p1Ƭ?>( #??AT}5 PO%iH2@<@M$3/#E8Y_Y>4.W<@e0?1z(jȚDuV!HuPqgmAK+]S]/Z {ˉѣw?FP -0z"ռXdZ-[ ˖-Al3aKK"Oc@(@=ߋ !G红h Vl{_~P /^(sph5(Ge~{={j۶:5_>t]3+j&HK g_#$ M#z ʄ2A\>s>#o?='0p Fơ;s$Nª Rq hqF|I۞OEy`_O$w% w ٣AT%^a8@H Yd<,-F.YHxٸ;sM/հxCo!MdqB)V:=L-/?PHHgP$$-3cѬO7ꫯ6l<'ZO~,B?`sm{4w.@%@gcB|6x{тr,轐@x&iY۲WCQ%37Ylu; |YyPH1jwx%\=H߂3<|>@h}7V&@7 yqbH# Qk(KyB !2r|DéuɆmDczZ%W[0ĽkӖa`zӴKؽcV۔>܇I;Dy^.GB[8ͮɩ)Jgq/b}'Q߭S}T`pm1|zhm92M%AG:pqX 2ئ?>*)):l69030^|91XF |&_g\]lÂRk׭Nj/<yۿ BI@ A+i?rGќÕkC:;}Ì> B_+9u]JfAEA>F} Vтmyv$ڍi:,cȇmUzm)ނ&&؆>5/AzJ#y۞GadYVMq^pÛ 1aƛoÊF.H޵T E̒y!Ʉ9ܐ[ˈYL cqGX)}vdo$Zo]|M|8 ,Y;e4c~}kXbP 'މCCUfv#'GֿǵRr8$eϾUוX>mLOpbh~|D`>'t]w,˒ X2iLLz 6- muh/7f᧟džaX2ۮ4M+">`dmZ3 M"/~TQ2a @Ob!'p3;_yv@ư]|3XpqF`shK጗|>玲8h4`155zZ$ǁa4uo"aoh |^vvVd|Uē| ~TV_7Kc$fXh 0vh87< e?`L{ΪJC#̯vm_KEX:ZBRt]W R bKxep gsa v\y8ׅ2we'˘ eW].?q,3a<1 i- 5X߹;+ϥ AKX|=|i&4w?8ECYNqF<|$@c?Kl硤Xi&;LO7?gcOqF }&hKas>OsQ.Q.t1.b8ͳ$p.u4"(y@,?eOp]j- 21lق>(lcxQ~ypאe}J:D1#1_̧&d??y'כ|_—&)gE96g3ƔR޶93&:{8r)u4Bl-#ؑ+!n. /zɼz* yg)-O!1gˋ=nώq`ߛOCIG&W;m>i,\TSG2S)EMswNpDo|B"偉/ ӀL86Kby-LjH<#@c: t`Ŝ<<.jtS[鉮XW2l{<=~!|~'J,%0N0o@pY뚀`,dA¢Փv=2M (@//XG/Z?}E`j%,Y+VN%16>:A !Lԗ2xJYӮ}۱o:~!ǀcaMXFf@}f㣇`0j7po%~6zaPk*H)% >q7qG~@tU_=Զ?$3K hwzӮ7sy|2yW6˄w uND8] 0 <FVf=ڭ,{9c0u v %u ` ױڞ08 H*O๭$`Խ?u@-}rÁqن3@6Pvd#뢽:i|t d|tt /b( a6bHt+$7$03K"˚]5DWcòm˲͝=o`3_c}.ý@ˊ0p?:m eW|FZsfDkI8Q0{leq,¼YYgffn166h4h4h6?&x &\.!CTr?ŗ0f$i rF/ = ϥ+NCy`tD=-~#[}ͅFk8kx'Cg.}>#G8;8Hfy-)0se(IdzuV[lO.}]Lb/Š2mU*T*upwgbrνa1qLV]ڈcx{d|$W]םퟍOgNV(k cXiN' y` D?r #ǽbqџ3MZasyhU60M쳱pђ&x}ɲ"D!xck?^SE߼ T2ԫr"EdvsU$ҀݫCaVKJr\RNvl/[x&QgVT*`˖-g};^5ckSO>^eW߀L?lޝYNWT* tȂE y/e99 ˜(I="/XPԘ:; + r NC陵pUWD'8XvsgmӠݠ3{ OX­RֶOrmd'c3/,J&{aI0u%XXv+L$ uPda-Xfoyˎ^6۰6lˋf`yRa\9̆cx{Ǜ0M-Bp7#_6@ y!g:# wXfsO/YCxMWӢl3W~.X}&9d϶/!Hd}as$XpÀb[ömضfl؎'}m0M-1f-me3XJ{ B84E{ W @AB|\>ASUP潱tG=B:H@7=y}H$o aZzj4Ob!?^x6u&Pq @$ǘn|52qC$(s R9pY? x!<3W- @:%u*fVffVVfvVV6m^h({7< pl 5oO(@8( 4=Ut  BJ~gt_眃w)LBYl`UXus^5m=.s @%7( RBWc>/za庍7d?ݬ"XY_ Vs_6paٳ{Ů]p(&,$c E:f.Cәz|tbݖkt2vhyÇ;=CXD|.1Ҟ\=Na> sO>`qa7m~eeybZ{޳m8endπۂcpmӛXa[8w8g.sze o -8ӧ=7w3֯ ٨Pa.38Lrԯg@yV?01O?k[AOX ᮟ(׾(~%MÑ@OKGDr\C(?i)iǧu@BwH<:,3 |R1p1W1 5] #ޜb8aoY^X%Q\`j#(75xKjuf ⃘8h~Ӹך@WmS3x;^gVQ&=u/QdL /4M^*]|ȳ%|$yDC%\ݖphwȂ@59B~>` gb1yOvRl>\LMry|WnO> B5\' 碠I1 @psd%K|2=cA2u!zإY1.89ˁi u4kՄUE?{w1u4C@$B-t5cxG}UX{օ==Yo=GN8#. Y6 {esY98>LZ6gF'E9w?fOQٯ*j%ySߝ҈gpL!S1qО) q@ ⢳CR>P3׶`lp-];p9s08-WF-Z:db(Ͼ;pG~#X @ڃA2O4}.kϺHm{_m_;QPA򘰷? )tb8v/& н FM3+|)2Be vYq\1ٶ{˄ ܶ[б̵f96k9&((sL0V"_,!/BiTUP( !sbbϾؾ(W!ŒMׂ=i8#Ka/maBo15E|i\wumoƟpgnOjaթ2y@,'B@{0o "G:0Lڦv҆#La0 ۛ&LÀ/iY賈-x=z.Mӡ|RB1{|Ox.ƺs8NKrr)%?.\[ nxϕi7d[>XWеpo2/2ח1ד1`Z~ǣc<36gpzÞ7 cKv0i}׭\>P ?u1,dO|)+au\佘m9 *Arc *S%0^,y/oxW#r]04'&O}7u@%DBKyhA]j 6EQ=w`JAy0^[paGMLGվ'W TQNkͣ.H* M9BDP >͖;P|8cˇ"`\?|~K/Ȭg|bCigl@?"N֩' 1b#V" a8@w`|uqt|O@0l6`m8p]OB8v[_08w !kO;=>Ylz)s/^4l؈~R|b#ٿ b #w)<|Cۿk_'#>z~{ppy[^jPŶ_3I֤S@:0wE+9Zet>0ilۂpVdz/xlۄcZmOu30fcP(+1e_ fp`sύ.ĹSsm,ZW^u5 ի2 0,|6L/9q7{gKLv鸼_!1|̎P2_a>:mP%0M3 FyAfjyH ?>Tա*:-08 1qL0nwf^O  6C!^ P0a]q^,_%ġ{h(-ܻv7fO}SP&~y'FzyT}*?$_lXj=+^_EAH+J,۶ ?N)ЅDq8+'땕K JZݩs0 G(3n@ P 0W)64yW^mj|ud *9PbXfU&q?C^z3oC{$)Pďpmocg& \"-ض@Cq1ĉ@FR5x&| Hڗ6e`4r`4A9Lj]kf\nʍB3{[) 9j{ =qyܩm}' s,VZΊ@RFʊ/n"EwRQ1q"A+)rxbn!yb}Z |p͢hB /Cg&?5_C0-az̋o/[[f@~f#<|X&g\0Q$j=; pAЮ*:w~#Pޛ#.M^59$&|͟ j~io'$p^}ۿS8eK.Wt9(%P%mO%Jҙ2mTAt/#/Cݼ O|\o.j@K. ޜI,Iw,;BymZ}# Ad6z#j~I28h.7|R]][j$vbcc ^,ly3}76`cc 6@2$! [tך{fdflX2"2"++[zoΧƹKD܈{\r>yxZzFðEN^Ѩ,~`y414]W{5$ 6]K`6͵7ǯ/DM ZdYkr$[.hoo{mW JjR@]$ "td*7 q(^5]hڨZޠC,m4Tfݧ7mZ, xTj55߳_G22Zr'Sl;Ғw"t]}upݴSkY `ZQ & D $ K=1՚;fjCa~Zz"Hdku7BBC dQ@DDt;h(>y54 qG~LSd]L9"w_k\^VГaV)+:*==`˖-8UTC4Y+0HZ  ۲/&8t)7͸]QGۚ,Ȣ,Y3:qLⲈ,GJ`p7GYVC͌}+BlpM_Y8e+M.0V,?]iH$VT׵E_)j2"a녻:Cb(!9۾#4L$fԈS'NhhEb@Rbt2e,~V=콍+k8V\41ૃ[oO}򯙙tc/sseW0-*{W DžFz`|j$!@8z)3Ts FfH:OZP@!CʹL0N AٍDdTn1( ԃ}44#DV cFyƧ擾_?7#≷kTj]ʲnǫHk/| B(OA^ZIҢĊeYW @4o+̓(=T8 <;?1Y;zs9Q}ϲeE{++\X(/tPhl4-AЀxX:0BX,䓏`> cM65I?c:aiLެ3tN^ n^9wӟM 3LLLϟ3}XyǾ|L6m@+`s#sm7~3@c|YX䣭v.f~t9FkiOBknǎ㳟k6DkAܕ!(jiRZerrg}>x x7+3;xrS;$MbR~Cv()Ѷ o!N&8c3?r+Hh ITOHm-bŁӬfE}C DJ(3O?K/R.Ⱥu\+IX\*Ri6,O֘@uLI;?!o6!fj-#m]Gp8nekm &o= {i';55M!7.!+dHG9 EL1.[*=tWGO khp$b2W\y%uŅO2^ IuyY'+_2Oyv6n}xj(:uNѠjjSV( *% KPUzHLQRjZ ˴r+Q0exp:ǿ<Lzpr_x&nKdch/ffBh5VK֏ R]ұ9Cyb'YdTvdz48bpO&bR/S-.Qi4fUUiT (e-ڨp-UPN=NC@JGJ0D«clذ4ȶkSo[UL&;wiߧa{?"o tQb,}RR  $dpcp0QuZM+hih:ZU)5khJ[UV#[jݴ`x0⋘)E7ll?"nU*4>N>c^dFQI;Re&Y kt4V^LV4=՜G'R"M"Fjax5]Sѕe %f]m-L0Ef Sc k\o Z fnELFƙ>ft[?bpD)f)NCkd"[8z>--\{^ H@qhx'+50 XN:'k)GG0A4A2AXc`z T]S0BMPP+HeDU@#MLCCRתE|&naЙ#PTV^)c{Ywέ&ZF}0XRHam>xs/:H!_{UpӁ(i^|9 ټ3˹rjF "2JŲlPUami>eύ@X{M띚qZ=wD&?(YSUߑhi;x啗3`+qnW N++'B?]A`ц `׊`ݺQGFuf4PM*ZlhT |nR>GGh4Z2rRCm5\0+j,m]`/ 4u*PjlFϽ譬F_H` 4|\QHc(m"" Z.F8|g^,P˾.Ol`Sh-OJD0RΣԊujKAmTZ wp#0i4+-Tq2ZuM)7+.N IDAT`Ѫaj L ֱNN@dqݧOb 9>ж5SpHv_<%CdG"-.+J]nEڴf$x3͎KaʔXVU ˳u4NZz ugGRN=uPf ]kuk2F}QhU0TCkb6,A*[am1fR*>f6^~FD4uo8 yA/Wpn L4 Zնxo;/~ N'۠zKQ2.u=ءz%'ty{ JCq \A(:pMVz ^jZ9ʥeFR@HR|+ͭG8 0pD;!ՏMde@,Ln} 7I;,KR+m%v\cHb%_XZ)glLvɵzڶ}Oǻ ¯VsXunx/wjn,dd΋t$DQ?PünR.,Q*,Q)iԫ4 "9jK)XqZjˀNORk.X. r"A`g9J>yUԖAq;M( T'o馯?\v^.WhһL15%UҶ[xh5ۮ) =(.8益ذn}}!&^}4xU-Vw"{.0C//'Rd6$~0< aچެ6*h5Z"ju U)6h ,Zm M)6pEP %|np-l{=덈|sŲrKq7~Dz-'DrcXVdLLb+/,]?or{A/UFHhFZNL$ˡ&\=-л x4 oŻ/9>=aj(xBH!S@av9VG۠`Iu:V[BoVPuVUư. 9+7|t>Bk"p<3=."^"o/[nȑC'ӌmn=0邀SI.L'`߾[ ce'd/2Cݣ$ǐuő6_(ǐ$\u.qD)f,-s.Hq1f!8ϺϓOx7?X 22+N,{Ӆ7`!4<4s 7'L\lwR[nkH v?Uı4L0L-K4{qǚ4ѵoiChi(UgI_# ~.-(ξHf۫ v9֣Hdh0ú1ˋ.oya}|BI` ts0>>n| AWϓ/S喘;~eyhVV)(uZ&E9.B^b!J (ߠZe*5Ս\@=_`[63ut]Ews m>>tmK>ð G)Hc{obpJfmc']`~Gjx3C>i80k?g{_7{H /t /0j =i-{ Θ@2dיg15]ZJ^?h4Qrs kUJK(橔 44fz$눳M@SoWp6kA BtWE-n_͙ig6 ^3SQt J#p'\o{"s _'Fc6dU+.o#Z }CC }S-Z3SݫFC(t| ]IUՎP wӮFW:$Y&3Tv]{0jT+*zJnR-X^5kYCWF{c`Յ?mX(_Mͤ^m/?z[lЦ~L%޶&8r1@fӹ6I}qkb;w3ySje~/?W8-2N 8~VMS.B7EoO z@^ [)J@*~nϽ[0Go޼kvC8/ xEQw aѣGy|Gy-dӍDQBFYy$nH`b$b,$;lE)nHQnon!FNۦ\7Ifr$u˖H_-^x,oz^0qT:C֞<>L{h n@@4bff۷sWs,9*kV$'aw.۶uVEO-$2 VF*80qK$ "^E&|krn@mQʬo !(Re=M&jB[ p\ mbxۅ,Y4ɋ/< {_V9(ȫz_]ȶfxx|} ~ K$iD!c >"WJm>[?]'ALl'&.`hjD l0",=4:hjr*; 7v[;e;(,-̹[B@`0 mKzўJ&l޼)A4$LP{4Q l6: Xp4^,LgwFn&Ks,#[ZPX&U2ZVSAS o?'h$m|'qd|n uhȈr,r|1$Ԛ_}$8^kךwx!&@`녷hb ښЍT3v%v.7nf݆͡sSU4fI14jZ9On~JaZ@Հ`8կ>4JK=׼ѭǟ|]6y\8?랟wӿ'58o݃W yS1P:5M,z4|nGp?Ρ x8 ;T ]V: aF?J]'$IdFHgGA£]t 9zr~RnJaV٨Ӭh*g]S{Z'e:|r?[#bgajH9oO m[zWH{=OvNLw xd ݀ tCH|&?x #o)?&<ΝD',.dF/Ibts4FL^g+T s34JJnzyF6;̂èub9s=z)> %HZOdxl_w^ :B]ο'֍ROGUJ{piMW8":hiq~R$R$R$$R$Iד$,Ӷ$Ŭ2A@vFy"4n!?q/?%Zh˖<ܳ &sO>ʑWgyu xӅh^0iFN#5EQ{wqGZs'3D" 0dx::^Nȱv6*zb wpՊfa&~,=_Þ. ]V\~wU-zy08ѭ{޼{$Q`/h(ug9C]m !98pt:ͻfgsQX^^v7Ej(I`:-RWz^+R*+'lj%PO-ScL\ q) Pm dZ7}76Z:~:[P9dƾ-[8z||2<2?"]^KYp uL4~W5*ٹ99"bcǏ35y%ʥRrh]mDl?9&O-4Mhl6!NZ=,oZ4 2DcuXu>D?q?qnpwbkjGu7O ^̈́畟I]Vf2mqWU竟'[^}5/iZO@ٌAزy36mܯ>T* EjuEan8S,(J$ekY$cXDRPşcgTKmv4ɶMUFCAS^rLY ӺVIQ8j}L\F_u09fKg~ m%`j9EQ nbϻ/M^LLL{|wF}j*5ӕjՕn@!PhUI&a% IDATЙr;"5`q~c3Gr%1{l X-S-U4 -KP|-7XYf @j 4"B"0T  J@m*p ,c4Y?6 ^? ?/Bk)d}S.0$ü( 8&4Uj"FVAiy)jiE˓Gk < Dh͗]׿?s-̿H?APuw5btӄbk=+ aݦ zBx۶qw=E^y's\'|UUy;y啗d22 t}NgHIRxY[HrX,#q@{_Ԇ`[ 0ΐȸ}[wa66),LQ--TT \WzFk-w!R\v!Lwl z_Y/u:Djk~O|%t@8 Oy> Oɰi3:Cg8cgGޱI@;_;(ffO@zZ{/~ <(-|bxx,ncx!X.8R> DAİ4))0µ ; pw6-ÛCU-QqӠCC B^c,/gߨvܬ g'xPL"Ex P'J}я~bѣGaaarLV4M5(bi*B ?_8]l%9fuSl-G @Y 8_27wdD:ERq"qO `fNg!졼axξf>`hh!Jq~m !O}Bt2y_o|Mqr0;;K>4fqabD!GJ(qd9f;uF9##K2(`&jE^CU[$w*P隊4O"ǒ$2!VpMC#a.au:j=՛(L|o}?ͷd"A?ZS5 zr iZ`=ZK}<_ji, %族3Or ?pkn%PV$So؀a9u7:g_8rss&1?w--R)( Tʶ`w4 vyFɀucuiji !贚Mz0m2( bZ^ Z @ّqs?B,-Op&d_ר;Mg,. NEQM^!ayZ`ge|&_v/l x?UԯՀ^}km}Z%sQ'>NsqN锊EJ"_^bf0TEfg&?>EayFm*_7+@kT5 K$~1D,0EDm(}7l7e^7|١oa}ww ~X\  ι즾-9tX<{n_c7 'V3/`*S"Xs"KQ֍ZF<&\zm%`!S*._Z! y2rjH^ݧ~oAiZ'KXq@70vܜU'ޏ[aBx9n^|?NB3(L1Mw|/paϵѫ'%XWj4WvF>maw]xx{y &<ج0Lj2RRV+3("KǏPX^p$SY.]|`&O?#agߕc%} P@p(ȾoqΝ>w? ]_%X ,'!?g>#i~Y`xt#{/~|'B;w>oZW' O?]wŗ4MMO1 JeHgJgIe )| %̊SY{qO'8 V|Dͮ߶Bτz9OZddl~?G'Rn ZB "ܓ>lVkn;lXt:CͳS|~(W {^Py9b#G055,BFA,#ő$ð |jQf'LzBVaiav^K K'lr,N2e e m@f>Γ,:OeIuGܰg 0|}˵wٰ/{Eć  CZ|v6fyǙl~sVn,l߾_" ^2 >g1," r9>đ#GY^Α) (J0-Cj5t]2Mi( z Q-㎫UU>!2MVӝ[ $Rm~1zay(O PTݾ?Y\XGkATORMtM'o!Ik:z2l4:=\2'x>5o5>r%ދC ysa-~] A-A{Aaދ@(lٺ^jSJ@|oG zmCy]qrKyCݻvq1;??cΉ׼P@ESua% `5AW"# N9^{lh6[,)WjuMO25y L=1=x4Mu{ɲviU(Vގb4r@^ǛNӱWxkJslm*n]tj~٭ ]wd2md~>BT>OTJ?5VM[1h?o/ymc8616 ӄ}_i:ӓG=6K L=?^ˢW_'@ NNN}ۿa~~#$I>@p# [ǡ!FtD2I< ZHK?9 z$2nQLvӼ$+ yO"H1cn0KsTE k›bqWeIBvQ|G?g9iD뚆Sflv+]G>|55o]ã~.{ayyWwqsyZq/M r00 `|3_\]jkID2$HZǤs`hh0C 3hg00١2!#s}uY?7 wӒ?!$ xQ~|?8o& 'r/᭝yDl̖ϽԽvP/Q@` 0B`dI p޽w<zk_jS?1֍v;'33sGDZZKFu:z[}'Um_^"<$ĀI&SdIg-m#v3Y8q g/wš17s/?L!7_9(2/? 'atp.Am kP@I/g488ƍYXh{$VU?o=ڣ~޹ m {e޽߿Ǐ3;{^zǏYZZ"h8`ۯT*Ȳl/UUZi$پELÚ甤tMY&īϿO;ߺo˟,![- *!~Ŀ??].t G فᏬe&r 8sr融e{9_K߯jQ?5 kWh||~"Y[˼KLMM9t5]($I{qk'Hbq?7n6TkU$Q$fGMU' CwL w~0; (Dzf, @d E` KvH6E[,@F84$2l e `DM5a]bvϪL誚>fg/*_fWW{/_fP8yց@"=/}_(nqH?mz]]1>>qL@!:.`mm ._ƫ5lmoc{k 00Msݺ,ea՜߇X4d"x**8PPVړU`4(!KA,,j 4ų?oᵗh Th^lݸBh\~[KW֟}/cq궻16ln's u:z@`3|oꇜ:u +++gss=z鷤++vƶЉ\B07W\;@PUNOSgoAI?@W^5*Θ?x<½o$…p2677px"J62, ]84@goYo}Fzп"T ڄ3ot?,%9:a#"LT@s²* 4/>]/9r׃)w,qͧ}hoh+{{u>~o[q<&gjn<7,pppm(ml+X_^_:Օ˞E$V@ǯGq.T;)ۨ~rΡ0MT+`<A~?|n @4W.]h{?U([3xJ+3XXX5 o{qKKK 3dwR,T2d2{..Օ+חv {՚J'gKai.#- 6Ԇ[T"`8²,Iy p2:$^ |)~_& (Q.|~H$wXYY܇gΜg~2`mm-iuXEPدޟW;uh7 7]ҋ `9Z-ccuW/{>əy-_}Rzjxݲv "Ѩ\.LnϿPCDzq:Knew0it"5IDATUj255MzG.]~|{$B@x #.\ӧ#nyF{{2h3Y2YVOZ9'{ߏwuȌ lְr ۛ(cw{+DZjyZh lzK[vѬ}/!_o0eC?~-ׯ*Gp-!R~ me)Jx~PV>lꮅLNP{l\`6]HB F c)`pZW/akl^h4ꁮ!@:ǧ>Cw-Hu=VG7z333Ec1bSTUř3g797 |;ߏ_=};p7nHӴa~?Oׅ2o@^? #k!ޞZ.:uwz]ZDlm\UPUzO06-\;WP` `]$H}/^xIm[[[x#̙3'>`ٺM l7,9!ޮ/?G>%L{o1lhSZ h ^@WxsEuu]X^^/OFSO=8~(sL):os=R{oe[m[6 (>y?gmۜSD":2[&6n>~혙A*ꉟ TvW bR1g]N/;o6>O\W84H?Ba8asݹV _w_ @:WP4Ю%%]/Àrc\_vi{0JX:j*2j*c=%X SSS<8-ϼ^~egVh(bZMSȧ>kTUUu0H 9-A>!AK ѫw#(–l%N* 6x9lC׀b|bhQ)Ѱ_^z[ *VWWr<)~qw}7~8x/|4$j,~)}X#D:`S5*G;K<gzhuocnnPw m ޯ'nG'uܺvSXuazR C^CV:L<2xߍo}/ ^{ǯ^O4M]a~ο|#F|:.qv?@0 '= Cct)EvCډ < x:~an4(iA\pfZ} FRFZի+(Jwt--܂'x"yȊ_F4MMavBgF1;;['{677Gr4ISM ?B{syH後He x~coB?Xb_/ !HȈG./s{{{0nv8q70%Mfᚦ% !qh:LƘ ظ5b WE].cn_g$U rC@`4{=[n4CPP@2 *s {3X&2L摽 !T!5M3S8]C !hRJW\{F͙EurrR 6?*l)ryH$HYhoWO=@7=w,w@==<}iݥw :ԉ #W'?4)aLUU1y^kϟHRHRP(X-txxĚbQ ߘ `pr#|#!e8:[;@j{}/Ad>zb!M^5ʕ+v>kYVc*PJy$1,ˢcԲEþEcTz۽R嬅:;; 699%q$INgI&C%f^v %Of?Ho'A͎2 ln\/|:+xzswZVwsh4t`%@^RUU(u4M300"BJ-JxfdHRlzjŢ299-Uۨ}Am@Gc)\@;2ۀL ^m=2p8(/1>;kB9q4Mj|Xp?iSŰ!i BpIZU*VVV@}AbhMLLMĉQ6=3KgL&˓D2E(!nA3FЭ߁]H ; ȱ%X[(0H$0 .]GcӦiqλߚ^шRJK)fN)%s`1g^.,…%G(H/8M3"˳AŸ14 eY1y[Y{ep]`O<7?x.vww/2M3L@p\4s.cQM4M G!^9^8 |bȤ3fHR䤘Sddd*ܜf=txoyl{hc7K @.wj>z(wjLӬ@l⯜6vb,0FM9,#PX6:,ˊ: diMQDQaY`ETULR9*!;k5VammOnerj ' kvv+HR"͒t:ݒ./z_kV- lALKVuaKuG9nzfCTUѲQX*L !l? ZBJ"EB(b`FCE3Xi)F0뵈a2T*̴dD."SFGǬ1qIerrh@ur%/D92q`+k3EN@ q{Yf 0sTUb0F9I]a)I{T#nnSf>ЏZw-(eϦz*9?9Ob9B 66ONMMx|*8jܹX?яO>;3zz!Ξ={ammhC3y 2~?F ] 8\kv@ i1UUētZLR㺮Bz(n,Xej5W'[sHT!N&ø[L hmoo{ñuj\(lx2n( fGe A7]d$tJR68dUUD"9JA !bc7 sooOm4eYih4G$I~w 轘?+hcN- L70 z^D q$4-iZT%fUU$dR'BRJ/sn--- M㔳d@m{Uz :z0pvh4O)M(SHdRIRT*UT"9\BPUU!HΟ?~ pf9V6 }gh3s'-t*9t*MxBUU5>A)d2b5MbYJixU^{dgg ~~ 0}z(%X4A4 =kOt܏ p-6J*t:=H$P%ŒBZcJ"Z%h/9 6;PfAszbv ]?|lMpPlPќpGkڮ՜<{g0?wW w-v~1b|$a A [e=w% _7Htv)`LOt>`qpIENDB`(0`  * >Yt"""n?6&  2 Jf###---333666222---$$$666555mM*  :Wr  888TTTqqqqqquA -Hc 0.-MJHjge$$$R! O*)(FDBc_\zu%%%Z%  @@@]\\zyy%%%\& UþuuudddSSS<<<%%%\& lllƭ|r}rӾ;322BBBLLLLLLLLLLLLKKK===%%%\& |mfaOIE2.,m_UPF?  |µLLLLLLLLLLLL'''[[[%%%\& mmmHHH---#" 30-B<8OGA_SKl]SucXp̱w82-F8/ŧѳӶպؾʺLLLLLLLLLCCC%%%\& ƿyng^UNC<7*&$WJAiXLԫ$$#wbʦ˨ͬаӵֻ|LLLLLLLLL %%%\& XXX444,,+0.-;85GB>TKEaUMo_T{hZp`kZybRnXJo[ÜZLC'''aK<ĜŞǢʦͫѲոϸTSRLLLLLLFFF%%%\& ĽrieYQLC<3-)Ŕr“s000ߧĜȢ˩аLLLLLLLLL)))xt%%%\& a``HGFGDBRMI]UOi]UteZk^sbydxbt]lUdNy]IaK}]ND110nP<™Ơȥe^ZLLLLLLKKK%%%\& ¼wmm_VWKB?60*%!D0!d<<<$ r˜ƠMMMLLLLLL443[RK%%%\& lkkfb_ohcvkdqgvi{kkkgbwZmQeJ]EwWA]Bg_QG;::qN6{zj_LLLLLLLLLʱ%%%\& Žvlm_UYLCD92.'#"_=&YHHH&"gxݤ}NNMLLLLLL===:1+%%%\& }zĖvȔqe~ZtQjIaCX=qP9zQ4SeWNA@@uM1pxuaLLLLLLLLLw%%%\& ýxnrcY\OEK?78/)#  !!nB#zPMLL(#_nSPNLLLLLLEEE!ʬ׼%%%\& ħɦΤӢҝx͔mĊa~UrKfA\9R2qH,`?(pD&ރCbUL?>>xM0|\LLLLLLLLL(''hUέչ%%%\& yqtg_eYPUJBD;42,(%!"$#}F sILLL+$ ]SMLLLLLLKKK泐̪Ӷ%%%[& ɹű¨꾠븕鱊~ߝpԑcȅVxJl@b8Y3Q/vK.iG/qC$<\RLIHHLLLLLLLLL211bI8ě˧ҳ%%%[& ½{uvjbgZQXKBI=5<2+2)#*#& ' )!+"-#/$0$2%3&5'. J pHLLLLLLLLLLLLΙtÚʦѲؾ%%%[& սβǦ{٘k̊]}PrEg;^3U-N)zI'oF*cD.k<}BMLLLLLLLL<<;?-!™ɥѱؽ%%%[& }vxldi\S[NEMA8?4-8-&8-%9,$:,#;,";,!<, <+=+=+>+=, 8(A#lLSSSSSSSSS{Y™ɥѱؽ((([% Է˫ß묁ztޝpڙmחkҕkΔl˕pǘxO-~<(~šʦѲؾrrr[% zu}q{n{nzlykwiugtfufvhvipd0|PG@~Ûʧҳٿvvv[% Ҹʬ¡鲌䪃{۟uؚpӖlГȋhǏiĐk_:v6ƺjOŞ̩ӵvvv[% ytr~nzjyixhufteugthsh-ň]~}}}yIB<ǡͬԸvvv[% һɮ縘Ⰾߪ٣}מwјqϕmʑjǏhÍhoJw>ϯ'&&˓mt\ɥаֻvvv[% {vpn{jyhwgsetfqf=/&qJC/ ոF>9ŤҴٿvvv[% yyyнȲ㿦Ḝ޲٪֥Ԡ|Ϛu̖qʓmŏjZ~Lͣ:99{Xyyy}jչvvv[% rrr ʿŶ|xqnzixhsereSC8aA'ȱD>:ҹvvv[% nnn$$$̽ijټ׶ձԬЦ͠˜|ʚxɗtlZѡHGGdKşĥjjiyvvv[% jjj+++̽ų~vqzkugqe_QGlN9讆Ɵʦϯ?:7vvv[% $ddd000ǽйδ̯˫ʧɣɠɞǜ}f٨zyyzzz{{{POOcK;Ûǡ˧ϯԶ̶ZZZvvvZ% &^^^444ɿϽűzrwkteY^I:{nnnooopppϢɥ̪аԷؾ{{{=:9vvvZ% -[[[988¹;ͺͷδαͭάͨ溛fedcccdddXXX,$̪ϮҳչƺqqqPPOvvvZ% 4VVV@@@ǾǹvkɭΰyoWWWXXXZZZGGGG:2ҴԸ׽jiiggg877vvvZ% 8HHHDCCǿɽʼͻϺƮӷxngMMMNNNNNNOOONNN)'&Ϸ\\\]]]SSS`__vvvZ% ;:::HHH~tl|wxr|tntmhgb^XOHɽecbRRQQQQRRRSSSQQQ[ZZ~~vvvZ% B000LKKvvvZ% }}}-???###kkkV# hhh___sss\\\NUUUBBB999HHHXXXeeeppp{{{???z> , >N^m!!!|''',,,222999>>>???@@@IIIVVUcbbpnmzyx}}} Q) %0 <KZi x&&&,,,222888>>>BBBEEELLLTTT^^^kkkSSSH,  '.2)$( @   7Tp###%%%)))Y4 &C` |///EEEYXXnnnMLLz1 *Ml.,*LHEgb^}yG &&&CCC`__|||Mppp___???nnnNfeezsg]WLD><63-*)tfuplMMMMMM;;;fffN`__gff][Zidawnhpe]dXP\PHЫG>7taϯҴֻMMMLLL444Ndccoooa^\RMIE?:MC3+)#,"z[222]Ĝoe^MMMAAAtlNsss}}lo]dQuZFkQ?bJ9ZE7oJeUJN=1zԢMMMMMM'&%˹MyxxxylcxfZhXhTfN|YAqO8fF1Y>+cB+|S>>>zPxo^MMMHHHaQGM}|{|rhq`TeREVD7N;.T=-X=*_@*^>'Q5!i8hXMQ=.iPNMMMM++*ʥؾMᄂ¹zjgWlUEZF7J8,:,"(  .rF===fP@MMMLLLE7.˨չM嚗ô˯s~aqReFY;xO3kG.^A-T=-[+cUKKKKMMM555bɤӶM뎋|o}^nMa?U3|K*qC#g<\:"g<lGMMMMMM0("ȢҴM!!!𔐎urb}cQz\GzX@{T9|P2}L+}I%yH&sJ-zCzccb_DȢҴM___ɿ±yvtsv{~pe]jHaɤӶM[[[ν˴ˮȧȣƟÚ~zwvx{L,߷}gYʧչMWWWѽ۱ТǕrg`[|ZlMoAhhh̞~ͬؽMSSS¹˷Ǯä{smhfdHvS@3wf[ѲL MMM˺íyr}lxirfrM4nnmzYԵxwwϯLIIIű{upmhQrB:5ÛȦrg`LDDDͿIJݼزϦƝyb|}}}iiieOŝʧѲıaa`L>>>ɻӻɮw}hkkkmmm432鸗ͫҴؿ~}|mhfL":::ýw迢zp[[[]]]?71ѳչPPPL&...{ulfMMMNNNNNN=<;sιʾihgZZZVVVL+"""ҿ̺ǷҾL}}}111GRRRj333܂7 $ 5FVf!!!v'''***+++999IHHYXXiihyyy뉉FFFW #3CSc rd3 (0  $ A^{""" l,/Mj:87WVUqqp[ZZg (((DDDaaa~{yƼuuu8ͼһů~{yvuueeeGGGuuuuuuLIIIxvuic_ZRMKB<|mB93UG<éMMMJJJcccuuuPMMM~wspf_cVMUG>jWJǞ/+(xɥέչMMM444uuuVSSSyqvg\hWKWF:M=2w[GoYgQBÛʨkc^LLLga]uuu[XWW{q}i\mXI^I:R>0G6*lL>:7ԕjϢMMM888ȴuuu`]]]~pl[w\IfL9ZA0P:*Z=*kQpS>xm^MMMOE?uuueba`omZuYEkM8_B.S9'E/ a7EA=VNMMAAAquutkhfevt_aJtR:fE-Z:$P4!^: dGGC@MMM<51ßֻuttpmki¶tt]`HwR9lG.b?&Y8"M4#]1MMMHHHeMƟԸutsGGGurpnǺxxanUhMcGaE`FoO8{\ZWU|ƟԸzzxv͹ǫ{rkgiX9Ⱥ|Ȣֺ~~~~}ҿɮ}rkhy`sR~l˨ٿ˳åumigLm[N⺞|||ȿ͸ĩzqjrU|]uuuuνĭvydnTMHʧƮlkjuuu̹«suplgggkYͬԸpppʿɬuSSSPOOseֽTSSSSSƸҾ͹ƱƾSSS}ihhwUUU&&&^(((z877GGGXWWhggxwvψޘ짡dddM   /?P` p$$$...111J(  +I g$$$AAA[[[}: )))FEEc_\xrMMM-%%%}źusrVVVNNN/888xww^ZX^UO^QGzhRE<ˢаc_]VUUNNN/@??䷴|i[QG;29.'cMjTɥJJJNNN/@@@闐}qo]_JiL8oM6jSCq}k^GC@NNN/CBBviiTFR=/F2$;)~T7xZEMMLtcNMM/KIHɺhiIR3hB'nD&gVJ@=<粎ؾNMM.ljixeoXiQgQ~W<|lÚؾkkj.ڽϧĖwkeqzzz.ȳvjjRvj⸚{zz. Źɮvhlʦ{{{.ɷ{ogOMK˫{{{.~~˼İѺ{{{.}}}XXXhhh& )9JZ(((k888|IHHYXXiiipppb x2goclient-4.1.2.3/res/img/png/broker-logout-button.png0000644000000000000000000000205514447111614017573 0ustar PNG  IHDR szzsBIT|d pHYs : :dJtEXtSoftwarewww.inkscape.org<IDATXAOcUϤ}..WlF?11y -41LBԸ2nt=iX@Ѹ`ᆴЙ@[I&BK~.kK3'?s| `KzG҇ޔ I%5$*{I?Xu(I[/ eߺ8$iQǒ^5uzz*۶DfڒeYRVciii$ de7"U < lNsC`0hS (^ #1nܲbh'z%`hd2}.ANqJRꚀo=\]^^vovj(P ;"qWpIK.|8}^.mw+%ɶmz:7TCgffFnܝ`j|!E¨_da:6U xZ^^~huuT{-g⣣#wWu5}2* &53bH.EX,Fr#J^P(DZ5_WdZr^HB!677M=r^SYV_)b^ϟ 0:f`0HP0+޸:bT*58NbAXfJDk\պ~Iؘ4>>5LW|U4XsIj-#Io$IM/cYօ^ݔIENDB`x2goclient-4.1.2.3/res/img/png/ico_440x180.png0000644000000000000000000000246314447111614015254 0ustar PNG  IHDR9|bKGD pHYs.#.#x?vtIME 3{%_zIDATxݽeX2D/ѠPZXH`&FPcLОHXYQXHᆀbcF6" quYݝp1Q;&nV7{o/ҁZ}f;/9z^̯/;7е]ke>LGW$pk/_Tj$3ԅK765\lzUQZYk'5{ -Ku!U7瀞mܲw=oU7yzؘ:vSؐw6`86I88888@@@@@888888@@@@@888888@@@@@888888@@@@@888888@@@@@@888888@@@@@ŝUyfW]ؘ_ylWl/fQ 6Pݰ~W=a6ϻ[#{̹ %=Bn?&WO+p3sflG9 `O>dfTh3N'۱;huO97=xlfy 8AV@ylf}WYW{__s%֚3ǫ[ >V;]쟑JuIENDB`x2goclient-4.1.2.3/res/img/png/ico_mini.png0000644000000000000000000000136114447111614015254 0ustar PNG  IHDRd-sRGBbKGD pHYs.#.#x?vtIME 4RqIDATx;\eJM"ZF;+E;!@ CJm`) C-,  Ov`䳈HqY3sYZVOVTT(%TWUŃ.zzɞ𿷪ՙUfC_k=Z[f/8wgkB_k=X}Rj'؄gf板B_k^]n6\ovpV9Ǫfu:a؜թ]WiWU6]`N쪓vMe`N@&B: t@AB: t: t@B: t@BB: t@B: t@ t@B: t: t@B: t@ }} i>lWw[f/MhZW\UՋ6Mymf.ԾgkW{ճ3[;73gvCͫ#~՝nq:;3q׵XUczkf~ZtIENDB`x2goclient-4.1.2.3/res/img/png/ico.png0000644000000000000000000000655514447111614014252 0ustar PNG  IHDRTdٟȬ pHYs.#.#x?v MiCCPPhotoshop ICC profilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3gAMA|Q cHRMz%u0`:o_FIDATxڿ˕e98$bhmV*[Sb(PRl⠼K Na`S9h z=LumϏ;|yx&c^HA^uVݚdNPW_UG7 PըWW%KX˂amz:ZPUUfǪ/us> Y~>qZLrvBQ\e:cu;WTN3_W`MTVԪVs]Nb:/U 6 jնxQ T7^j! IENDB`x2goclient-4.1.2.3/res/img/png/macinstaller_background.png0000644000000000000000000016504714447111614020357 0ustar PNG  IHDR+sBIT|d pHYs /tEXtSoftwarewww.inkscape.org< IDATxwde6=ruu d! T@X\1*+E?aA]QU\װD\0&w~J]U]tUu߿:uꮷy˞ """"Z`NthAb%"""A$]""""ZthAb%"""A$]""""ZthAb%"""I E+U@WtM@W4𿀔D%.u!M*B>!EƎҹMS* >> []"""".00T+hlv. DDDD4oB>nmXA\*@įb ?BWۻj[ . U UՆ7 .,Q6U;}:t B}~pkh!˚%!%`K@J [WW0Q}tU?H@S`KXF4e!Js6lqt*Q*I-NOX&-6d]""""*Be% ^ݝ˖LZ[[YmH30-rR*I\j5mǝp;.Eh." -4Z%2N[HmWn]"""E"UT1S dxxBtyٶ]"""J@XYYq qI .VŠKDDD`nM%KfmL-MR]lg`%"""q~KS$$f2\JŠKDDDc|j`R 06 mƠKDDD4uz 0er6v*eepC0u)!00P+nM%K&3Yo ]""".)N $Rb2_0` 071uZ9+nN%H8O% DDDḌ>SJ<0̓W) 8l0,a!-ĠKDDDE}R 0Cs'ܚV k1$ԉAMt)I(sk*Y*[KY`A~C)چ| R hnSWo ]"""˦y]J60`Z\m.Tl*YPT|۩doO% DDDDxuQ,% 40| N̖S|IBBvN% DDDh) )Ӡ4,gɤ ACōd}~Z%3. &bp*Y7`%""/) zUWnCJ角u]"""ZpČdd Sɺ .-*0o P]jΕ7DSltgʦ]JK. IN% DDD3PT2Td$!n!ǩd=Ḁ E;=4哿 m[d"'th!q)j\j5K% SI ,}6\ XcՐe}:|PcQKa vc 6ttuͻd]df\fyV賊_axDDkU/聡I$c1 |b^Dzt!hK!Mp(c2xR8rȚv\bu1OhaA͙JW ܚJ.MfXoKڠ{X\`ppdquc4rf+'yg>F/ߊXyL&A /aYOSqk^SVn-0<Pv\tRomngL;u;p tP~G۶qA7wދ? B*s'~~gP}S.oy\ vs1 3*g`.^y.+S^K)Fm6 m~'0 \O;D|u9|[R Dp| *.M%dSɨY]tG.w|5XQJRb|ͥw|e1csIgB!3_BdYSw^+7DZoϿCCUo?74.Wp؉}$N- ( VXvZGÛ>wV=n_{l^Ԉo6×]Uz?00OmxSr7o.wۺG$o|ظ~mˇa|QBN͛x}LERU "*@]J6p7L%8ڣkPtu8_-uV.}ㅸ察ÃvlF&nÿMŐ{Ï?̺l?5)qt7뮘yAyxxp#CnM߿Jx^iq=Oax!/zz5t;ŁMŁׯt]/~G}4<58EݪW@usbO/Hݗ^RM7ߎ;؆LKbIX`% AQs#›?{Lсמ}4.:8<<' n>j[^{!nZ9{ J+=X~Ewel[nxMDDbh%!W]Jfc{i1MNN>Uܗ8j LI{qԏ|ذn Uw^Y="s3|Őf:;޷kx~|ݯkM%˶ݗSBp} ;ǀ_/`hhGoڀל|IHxݫVq>|7x|4Im3‡3>#[@jtD$拻o3>s;wugKe3DD5^8!{?L3JmB-e״HYBU_9;UR&E WpJ/ ?^qṥo̮sIŋuk>FNEzaBѠV`j,ܙ{9n]5oJO/²ƭh4\u<]':G޷ ;>K<}0 |mgCL<1c΁b1\cGvF@߹qߩ8O~qsb}V&oz;n;~eopŧS޻.yVye뾇7N#Cb }W!1p:xǿQkq`i0BP2p D٦H)ѷs;)ذ|زƇUFCiI GMlݟSx|o&M\]t!Tܗ:7`ů#gb-g_x:}G΍Rb;.։ڶ?>2 3{PN\q髊_7L(֖¥o+ Bѫ^g$r^)̴|?_ 0^Qs<8M6\ /.^qD exɧ8YYu՗G7 ZCj^<1A*U* >&Q/U}Z6ýX>z7oCǭy}8bA}n%) Fxx&]#YmoQ=t`%xg~vOڲnJX܎.} JC_%W2;\{եů{b+~d,46/zO&׶t 8ƶԺ;??UN3[q܄-o+VviD+t7n\³Ɗ_[v&1@_źN\ |X@ȧw-[b,fܽ=GMcx,7QhO~'% }iK=2y;s;$>!/ OT{P/:vUo-VN1w4lcD(w#RX%֯/#:VݵzTq4MuYTdiH<܍+>o㖑!7Аɔ6@yeVe4͘\SjvY;+p3$D䶟Q(buk*YΒ IokSPf2W>깠;4q ٷS{< i3 YMة?itT:W:%K ǡHsy "?VT(.$$˦8PT1T)hվjSO=+վ_vl3zs}w[# `jWnRɱרg`q7Y+Uq@T011tpHP\8;-* aDl盪*5/QjPsxq?6.` 5J)1s8v&vrr| Cz&J3 m/v?|OS^p(dvPɃx'(g_Yy[_S|5=ۊ_i|5Qb9K_}Im qx،)sܴV[ѕHk |INZÖ>ra*-15u=iq*uU i80gU^[3Ac_] 7Xw !J{O@JɯC}ݙJ0;Hۂ5+@iesÆ 8n@zů|pmon7\|֙Gm_f v] N3[yk@Z^ADMS5lZ)8p/i\iDq=} јɩduÛƫnŵg(۶7>Cnc۷/O83p+jC>^𚳎j^q֖S`&|ą,aSVԵ+4Vzr|+~N);HF-C~e,VZ^v h#5.MDUa*ٱ#`(ddL,RW yqZNZ"~յx]t$.43_LW~vp}2c}/?'n9|v,+5o5WBdYAk ^Gl\~8YK e>Foد|7;6\j/|gů/:l5xDr_ۙ[q?wحlv'GQ=o{5fCPb;68^?C7;)LD{׼ 8Y$ּLĆMą*궞W-cu m/-v@ا`'+M% 1,nb ٞ#JF]J@PяpZ{Q?_._:Bk7㵯|×sxfVj:ůP.}s87yYg{ ˗-t%lݻW8v?k׬z;BGqBQ|/}Aհk(8eu+cP"N;9 |8iػp 7⦻~ / +aӒ,-8x3mݡxǿ•P˖_܂q YCGK^׿꟡i]9J'Cػo?_lZ꿾 oo`TSr~{K} 0v.yۼ?U)0Pgwli7L%-|uGW_\ n?խslDHuY;_o3OE__4M5oCEǙgW}d EQnfv=0}݇8C/$foBHDNKFv*!/,4y)H$`6VYgo(~}QG UNC?] 9}3vS_.^!oi IDATd*Bڮ{wOx~[ok{ac7ҿ/8yB=_e<_T~/#T./*}~ p'`ӦMBn2w~xrZdBx۱u_;t]ƍNĪUT*&<%OV_W_޴a`͚5\BD-UzHǖ><[[hK2wGNC.u!9|n SI beOu_/R\~=xXBG! pzt\MΝ;q{PCU.!!'aa4c,Ʊfa/ ߊ/]nF*S8! /{8ӧBqOw={ "=pjݿ} ۅ/9 ˗-A8F*(nCxdCSx]=xiك@z'F1Hgm$,/@D#(&0)FʻB&vx8a# /RF(*a璐@PëZGDKWE1غ:,[5K1R Aa3Hq(CSΧ]])gm.~3P-5Q🎙Z8qk1p8j֤nQt?$pJmE;R D4Y il.)ʠ M`%"ZT> AZ8h?Cȧ`(42mAhS| ݥdYj;d 0l,=Tlb( .S"yJ` 0E#gI8Q- hiɦ>b%"Z S*wZRb*Y˩dDX~K$L&tz">So$&m',.Q&]"ws& -U65mhc%"ZFT2LB",4QFcVCmKDUeSɼ.M%첩dq &$PR .MZXѯ~;\%"QR6,Bd) &"#Qf;}ZT<70uW a[-$b)fWDCS* zopZ֧a{riI$6. DE]"y򖦒=(2?,r˩dԭDsH~SLG`OQb)ՠʛt]""( )8=M-+ P(jLDSgHȸ5F4AT>{-qq qN%.+nsڥ:͠m2.I縢KD1j EJd)ܺBԊTkG!n7q{Jb++ DD 3y\jnZ2dSɨ{  8%:Ke:vx]CH҅V3ASEqLFfL%k9u+&}~:fha$Wu0Y¦Z]"*Y[XD4ULJ"J1\RI #QM ?.-aҕVC4.Q*JrӦ%V+ܤ(1\*ө&051I˚>ÅF4A9g*qLa*YiBV*6psH5RJ GM7 Gqnj2]"Zt1.tAtc A Aյ¬ڎKXnKJS L!U&MRd.毶SɨWʦ;4M{r>r W1A\*&nRb*Y JFJ$tr*9WtK)k sDdb"Z"(uѺX;M%9b1pdu[ܭ-LfKXG̣t4hnqN\XѕRe0.5m>j %$RMs*uWAP`P߳pK+}\Ц]".+Ipв˦-l@]J@XVثtBv\thU[8m*YbMZVzc*Y0/apE\)J^mD0,a!`eSB=6|*^\YmS.pj gܪ-ei*xSɨ{ ᄴB,`nTS!%nS^[8\J60ũd4uzBJ Gt2E4V2f{>c%ZD櫶0171^ȗT J > WtNBI)1,v%rCاk}KÆey6 "]Gܭ-4-D~*YSɨ{JLY],SɺIȧⰈ,aXhܙ&KD%U[*JT2bM7TnfO| 6Q Kԣ|Fa{ShX~pC*pK+X9$d]GU6.,aXH(]hj.KS棶pT-K)2| ҦjH@vg;}*&n.s՟AWmal*QXڧa2OOtXtNbDӧBmʊn6 D]ǣǯnNs*CS&VrCYT/Ɔg-0Q[X>l"aviWu{<7$n b.Qœ%m'JF hʴZhr"s[gۣ\ˠK{tUSɒeSbJF*04j5Uݜ%0mͨ"!D3Mr(Bਕl;VŠK"QJrSRL) i,;SL%O,"aזTF&'19YS8^W$#3*A)>`%j+!p&ӚbMuXا`0a(4Gu8^K]#Yl }ϖNhTE,qˆ= |*io6,+=m۰r"L7`%j7ZE_*C>\֧aD;Dơ MqmBMRD^#Bk A2ql.QS(n-Q 65Z5Cϸv~vxY<3`H> !7գϯb/pxsg*Z{t*Jwq*Yy Q DVn[Z2ҰϛC|ml`x `Ր_zbh 6bH%+_Q !e V5$Q)™7rim}͐v^غ?,Kp-B[j S`{+PͿ2TE`IXTQP_nݪ+TE=$ B 󳤡WEi@/ptA%a=nm)1,[N%n(@>ܺ\ִ*:R6ۓF$b͐Ρ5xuǭf)C75wZq3QU2ھz[J60`q!A CAAA^5\)2tkSѸKԺuQm4ea,4QԲpW]eNiD~e͓3HĆeDX[ Ɗe˶o:dХE%Uqr-\Β2qp2uz1j+DDDB,n!J<'%a u}eR>ӕd;ye0Ӎ+ hԱzHZ0pp*8_ة;`Ym]KΒrIx7#Q#zO+ 5lYteaT4A I{smG C 96s'J)K`Z1mظKm{GWpj/v b.2҂&pr{'26v*uG j Jv2iAl<;=n"!-1c)|.-`6` ܖώ:X@CNujD钐 ]7D¦ø[@PÖRvqGgQǨ+=MMHq(2T<Li6ETpeMfl<;5K gL)e=>2Wq3Qj2aHօ3"_ ZWLKb2i7q*t&*z ^CGft90mg3,m <3D04X2j.]כ=k$w4oC!g$b)v:]83Jp+I JcY(C{T4AG%~h>8irND1YP^] yXm*]ܫ% YXh0ȗ2<;^.h̍hRJW2҂!0OC;v0(C.#U0r­M ֥J;Χtx4v[: Dj1P(IX(S&I Gq;GX@دbہ {Ahn1҂fhq!\jbx )ܦ`;`nEدb(b0*xT, k ]cՐ^Pe[ge)CSXu>`Х"Srј)\jOoͰz @>kgzHh̬@U"Ru/ҎFH{rLXشӶ7\ Eah{X(76>rEٙ(; b;CHKO"ómRktM x B185˴$9UǧpV}# XpqcaAQX5_ 6vO&mz*s_U n5Chu-]ƅPZaB8] jL"0ԐHthu73m2T Y72scGYvlGp+Jv9Ne> fͣ%gɎƹW_yiMk,#ԫ6?eh#kx iRD^` 9\UH0jޭޛh(Bn*r(p縭J huUÿ48mڰ ǭ-(ΆOڄ7WRuF%݌,e qf4ya7PCY텤0LFcʭ^g+9|YNZy]oYL"$9پUjۺQ$xu:畮>wA)(Qڵcᫎqκ]b)!aT'D{tg^)۬ZnZl'Jڹ>Z8BxJ]VJCjt mFs-KZݐW;6vJVS_~Vf6z^>|Ǚ׭xfu&Vp+1%Z&",ee2_AzX#U_\jm O֞t]]-vn ǵGDVNSI44$%7W=e҅ǩIn \80p5R[wt wzï/exY0K ?`br2ɑnF]YL&uضJY R{eRC %je+ϖ={Y=i$ڠƲpyv,L*?p _)K* -⒖:avp>bХTl9-$U _ѭ9/Rml巹'Blյ|7]TpBtCMϴu+($SWOiGwG[:T9I4y+Axf׎jPVp ,eN@Pʐy5]fХP9"gJhSUjۚv14lOp6M[yyYYꐁbQΨ#7ʲKcƅҎvuG(t#*ܶsb?VVk Ǐ gI_2̥P0աiwT471Rש/h:JflxO3Uγ+ԺS0atjx+iLډu 5ɵ$JZDVP6Bx~,W|]/;sÜ c:ochє5~ߙ];^֕KX͸<A:`;Sr6}̽&R3ԺhM<43-ܖ ВrZ+R0_Ć[@){oli9Ne#!Ͳgɇ[!*ojj߶DB1YTVz p;N 'PokLԪ%eȗ2$36=\N.-@s=4VdƮkCHgocΫ5Ժh|hjʕ/Df#!ZnN?Yϖm1 r(V'PK+JOvBspb4Vz:Su`Ep[K+0th)e:NWHX{$,eXʐ\ؾܨ,KlgXWgFF{Rv]q$7uՎ_-8.+G0NLQkZ)_3S\i5VZ|]j> ++&u\@vpǣ)F; g\jHZZ5s4| Z_6jq{h\ѥ^Q{}DƮ߯p} ; m +29|7 m|ap|5‰D+Yӹ9 ߦד-[^? <\Υ• ߙ7\S񜛬~._PN-oY=WC!ѤdvڷՎ$&>ua*epcEײecSNKMkiն`;Ѕ?jWgs P҉f+<3>6-4:!bfVA|m5wM8O,ֆǗ=6u&k!Vn9d59獭-evjHǏFVWkkqHT^=lgk$3NI$4k 9Ͼbs0 OJcƔMƯ3yp:BGFo) cZoP -+WQǏjbځ+o0Y28RX洹B%13Ů B7jw22,bVtí˫5.XʂW*?q QL۰ˎڎ`ۉP[eFY a,]a'|hՏYA|F!Nf$s5j>Wt R@~_,0X y9!~\49WW?{o-Krw~#r޻$$$ 4-o`6 csÌA1 ،a`f8:rZVV[.1DFfVVDfDfdUֽ=͈_Deee~vWE ׏U5& aVe%A'Y<[90U }ΣIv~yOy]C/@q8YG[kWw/ K<]P1 2\˞Xۀkn6!4^IPE Amec,ś^twPkp_*7 \P"2 gԏ}TI߲l c*!^bK'm uW;F4//o틩w OÚBj=MEpjƒ;ɹ <wUo5 k-yZȫ{t&՚CKݎϖyc ܖ~0[XT]M;ZdkVfJ?]f&޺"dzG>]Ձ^^Bp8qF&yy});;xbw vE(_>3 Bȸb=H].e:}O0%o)nՃUj[-o+[6  6qؖ D߭.6ڪn>ﭟw`,{mT#ց|ls}Br칭TUQepWJ?fgSj[Ʃ|DxmlF1 238{M(>Y(C1Bږ`8yljV&>,A$: n7+c6ER<LJ7&ĮmS MϽU[ 7;q^pj SG:W.rL(Yl`E jmuᖇ%skCk{yY[?`Cୋፒ$ʠzA##5e$G]{q/Y+{xٴ4Nm=D[[PVo]ϨoJDh6/Ʋ dep+_/Vs[k dXZZN_6dۂZ՘ZGr<^Vdh[i2w&ū e$6nU^MdQtt7e]窗Hnb&%4-۶k=M;a_fͷ|& ތ|%5RhU#JHvʰ*y[ƗCƺJ4z)AVz7 6Wb,"d3xm 24br(/_8% ]<\}n"L/[}2Mpm_-4qVzvMX,=dž"k`N'WvEꯢ5}1{{R|IӿOdOm'D)n_$ciBk6HUPSy7+l6J,Tu;q cjOju8C0aV!.wGiV,02{+{Q8l`ѕeYs%y9 n @xF <_ ]Idqkټ]mz>rvUe9 MYk0 pqd+.פi.: c써Ɩ{ sՏmm-V-+#/2/K^ k.vPP?۷yWq=mZD$Oz>%65V%] ^D$]~e vO&in@Ҡ}إgexLv qARS4W(I##q=_GQh"] cE,KR)Ud+M6Iql6v$Som6,yJMdm6 xG+4t6>D6_& "LzUTYc^@A59ـEȯEJ0^ "=Z!(znඬo7}!{7"yo(|S7$B_#QW|0D&veM2@ a O8nB;C.fe8q0C6 ۉ.7F[?H^#:.sx|2AnI`/p1[&.V\]B7q{ඁ綬z W0Msx+>sf1R=9ܪF6]a_寿%#ڐ ]Bxݽ)m 0V[ %$p'֖̽!CZ6yMc>#<&y2$N (0q VSf . DIB6}E \wp:Op ܥc.0qP>;@1\߸v[38ܲk{<651mlɓF",ܮ#tH]6/ū?/z53|W`f.IJi6oƧykv6{*4 O1` nÈm9NHۼZ#Wd1]tc%C(D%x=&c]hA4u6VՕ%%<|=—+ 'Y 鍚|ph{#/O7W}"^_zxp}? ks¡Gpy UMq4<.Xla"du3\d=O.0]t ;hE$﬽2x^](9| %  nq!6#wu-& Ȁg>VR`/p0 Ơ.vq,d[FN20,Y1?Rnnr(p 8V(Y OC>w e@w /y*?#gYD<7'Mk,ØzMUE4MmkjqUj>"kk6]i< uKooOܴ_w"#{& S_FIk( >]C$˖ۮ\C^T^6??o_#/}F|SbkQb+/Z&PlߋxnukEdG K׶C՚;SPZVASse`VmíGK+{^j~t;EZz%l=![p6Op0+=&n8{"`݅ʻ['w'Y%^ۋ/oP|Msڦ^۰MM<6!wz&'iFJ~B汝&2×TΝ\c/["7d(S;ݤ77p<&$]?[!>tS/a] UE azU*=C6 &Bл[e2X^cW6 ?;'k6|mm?U(r2̣r꾦Ǻ\qv bCK^"έ) )! 1^!/ I ê ( y.pCꊟ ۡL&l4 az<--Ԟ_N &o߲1'OcY- &G H xUw >bjS4,v<kBE ?\~7odI^lVj 9V s+J$wQZm&X{tšWۛd9A%p[cPC.C&BBU(SѲmv@-"gaո]ф2S jdy3mk*m}`c$qk%)NQĬΓy୲W:^ޕeA>&OcZٿ/׮wk۔rW}>8~Gה+0G(nemEcQ`~3+#Du=KۉO14vM!7a 4fyQ("b\@OvlxZ뾻$nCF<#φxR\@עi a8ŸJ-ǽ2ygv as}6Mky7_1EQ7'b0mio~px_x WT\xIy8* CI_Q/NPT"K6/! ڒ no rxVE!^s43OS.Ys HIy!ݕk{jEz kY*`2i|@R>GR3 1ev@#Vح-ȣdhk&-Q5t, +4 p[h sR|j^>U7!(&Vyrr7 1 hc9mҰT_;dž^ۺO=5p[;F\"L+ۂcX9g02J໴td4]&pn2ߪ9WGVKR-8wW!l.ԁ"3Le,}} _}/|~' i(ݐgm@-Ho$צ+fn*la$قT+2%7}21|g4!ن;? K04rG 'M) IDATk"!g 'B$窇 {\ ەLۂ]@"HB3Ϡ7g\Mxòn}ÉYX O~tuY $۴S[sn|: y^n*.W _g5_u f;526*­x1{9evk;S5npimҖrRv3ay򗄪9Ixq`:3/|!in M.;1 h228xCt..o/-o˻ V:\cJJ ~~ ~/nxMG&=k- ;c_-zɾ;Gxnu5fB&-j&P58]/=4U -#?{bnxx`eXC]K (ݪ6 Ius48#Wjh|Q*xu]7u. ߰ss`^DVH1`~I@']jnI!׾ o14{j^3_S~m"kr|mCl 'Vk<-F4y9i!$D\  $/`Qc2d{Pݐuo1vj n`.pUt7 gVc'X=y&VznK] n_ Uϟ94)U&k/_߁O׬I{@I=ouh}$\i~`uanlV_~ԡyߥPZuC KyY{.<5NBR\'8&XDI.Ptei J sgYOnte{#P E1҇ `2x|Z9R0\.MHCCȡ;F6A&H$i~]|[ހ//1[xb~uM'A=fi/9Աonlߚ[Vm=?q!avtO^M{qeRJpu:qmh1<+5e@)CzwMt6'"Si1ŝivr 篲 ReK[Ժ7a=A o4z- XԿ7|͗O g^EJC&>AS.&2d*Ս5u l2&6kRUE{Ӏ:$K+~_ʚ )O3m ݂ gr;߭@g] :d`/T Žq>{+ |oxqh% Yi.~qTm$a ފb~N|7oK>鳫Lkb=d [d 4h x3"+2ˆ` u<[Bmˋ[[S$Jmů:2p E2n ;VUx%UjmXNgMF:Ӟ="Tu? \$akϯ=wlFScsHnFUu+{ z_ _} ^i%j>8K#dyXgKyiXuvue% "DvM󿪢7<7Pܶ7raC6!aݭK >]34o>۶1Kj c JtNVrxZ^Igq8/-=e%[ilM6GnC~c`݊{>Sm,74 W.Q(=-mUfxWOg̽hsLpQE*GE&XDv꼟9Pxln.3ܾ9׍ߨ-ڲBGwݏ_Í{gni_22~&ĒV `nkU"^y1i缛ʚB&z#֮G ,^;Eu޸ PjlE8;m[xX%ta Utb\?pNJ9xxtk~c*U گ1WsWdP[%yLJZJի 1V8}-"4FlXn& m8GAnq~Zد ^0xos;jnu[GcYeX&jm!L%+B?st.{^jbd ys˗׏CR6e$_v~LEJdK^_ۖE5W0#/K5ok' e0V }9ܦ1mi: $+,~ߺ/e[aAQkq|wB(o~5iiXXCաJ ֎[ӝLpfp`\5IյI([]EX@/ EI!m@5.< ܶk;[/*g?mVmj>덇vRć nű@%ථ_*)΀,2,67h nrB^vUS3x5m˫K7JJ+ɰMï̞jnmYu{ -}g(b0 El_W2^m$.nvL(3RΘ` E]v`[Ogn:p;NᖴV$[jH.pQ7 2ފN:׫X-@W?%i̖ʥ `| i ~-.]z ᖃ ̏eޱ4>.+ m=wR[O$>t2c3j{ 0VD_MdJaCv8_ c{ =ۼuX8y; e@wPUmzQSWO/{0(t~TW.]6 8| yaIL ʕB ELr nu!#uKKkõMdPyF>Jp0b+ǻJ`ԗ H?V on yJd~uSϖIt bL*Af~NSx+߳y`}I<~@q>OV7曵mܦW2^egk4 d,^2- V|NmNi:4iMvROc{mW][ۺ|RmnQ{m1_WgP:z%6EC|~ EOVx`Ul6i^PXHvl jءϭ Y9WciPPkpcyEp>OjBej4W 4 ylg+m6My_&+`pWuKmk[t]j5ޚ&jZͬ_fLF~4ȗ\JPL 0RfRFH\c7*:Rn˶(:,-o6p!Yu;iK\ յeʚƔbe!mv:<,!6~ږ4(.݅8p WfC:ɄTMNgIbpL1[uЫnQ:m;o*#W%+VQݷu{}eٽNQl~J4B;:W gІ7fQK*ƵGP:?" SEVӢ5 Iry^e^[m4d]4Hz /- l0 @x~|Me[yHAyU%jl]L>"nXϜ&ߑ۱lCPi)tB;Y#ےn50e+|%I 7zm V=}(N$GmF1wn5dMּWdžN t`T_ h_a+o5]k3V䡔_ o"bŪnMsӰ Tƪ<[FYM>ꦀ(! #_owHphKhӠkKG1r hᖇv$YH¶6%$d%xS ܙxs}-m0@wP'2݃/̆f+]ESٖz Ij:B`+v #o[&rmm"3Qsi]ܚȄ;97jn8pyHȯLڼF(.xm ynC:C;6Pt1lWa "ǎ#`m|6 2;r[gssV ( gFn6Ǻp8ucꌫWƭ㙌",5RU|70tYYbwK?t.:s;.XD(l"#$mW1{nyGWmn"! G _?O0ri/]mD+̖ w_:OtmEUa}+oK \pHp8~%oL}xom@wL-)܎p˙汶UĶy70%[ -|ލz~{%G )2sMdaVT5`[4QL=[ ,#DDFNq~dM.O/qgEw@w֥m&f]ïܞtc/߄1WW؀j,>R,<,+)*k#>yn,+M7Ws>~ cؐj Ic!4vH:i|`+IdE ˲#lz!1[.U_U<g^|oa  ;wRCKFc8ŐgWo#ϞGkԶ!Q uou|4PaQ}_ L '"*^̩kY<;p3 KMd&L"LnSbcw)-*t9mjQ_ 9k݆2 ;h'T簕ݐ7 |z[a6!CSv ʽ; f!;!g;ͪe㱢"vQ,(N&`!?py$$d'uBtUi6l@m)sY. _#ox~갩Ѕ{fi4.Rtx}nᗏ)#,1Ӹ6NTU \a b˸oQatyIWAz~Rϭ8?fa7wG-m<]"+/om Ȣ#'CtUoxc31=8=A;c P۴뙴8)xmX,[ڙgeûR [P[!g ^|oeaANMhjhK#w)ϭ;]+4q]W;3]6-vC3ڼї%Q(m=KzȊgr-#=٘{JRh<.=M+U9MR`>,cAYrt%ҾVSi?|lGqu=;hy5ˌj6?'|V8S̖v\pZygc75Oe9n1؉.V%3B^? VMxEeEȗ> IDATp>6Nۦ<&6m!WYaQ]mRW ]}f|JQ^ޫ k@wР iF+hqe2͓ :9uNJf*Q:ɲ{XWF}L"WX" yNw[ W?]xt7$h+Oa&6)1p]K{lJ |z_Uym!+YVf8%3q,HZۮ-/e9C~;ʖ_Xq(puō `݄uE4#%仏\2 qve[n"%Jm/ѕ6Y֎]}پ28Y F.!/[G Ϯ6ϵJtS桻| jZ7t#φ|Ɏ@DWjoqjykqJ]{&w=#Rxt(3ǪLH`au2TE@wР ǞYk=tíӨKޮL0xzsѕ^dѕV=Tyw=[J?oK#>~6y~ X ڤ nFqPSyw_qxu}%׏͗~v(餔u_OtI' O T{u !x.{r]..@DW:(CD:8-ND֎~>ss},@[meʸ ;hХG[q#Շ.mW + }x a[)ܦVdl|Y= 8;YM]eӍ^L"t Tb Զ}.|[V>soN!K垷vpAD! Ɓk])\~L"t tz$}׼TLGW9nCESղ@DW"(mKϛ1NzMEp x+~szʞ.8pivJ?][47z%^vwxl3MU-+Dt%[7\"LDSxfp6owz^Y.mʤvs c3APb9hR]`/3'C*x "|uٮ@D(p x۵ϔsս~E( \b]Z=|h\nF4H,+ ϒۄ1>v" E \lq-K'ujwWG#W;𥫺]sIefJ$A$1 Hl\_7 :LZ75)֧mihPuKsHt 8@Ax[qM7x߼&o㩇뾣Db[^%"D v"WT~Ӷ]m^WqHh.A4g3L ,KCKux΀TޜHQŮKZw=b>TgE,>>~~rFƨK0}\+_k _;RހEVJ"dK(Bw_RNʛa}ږ@3!hGu-. A}{rr)s$AdoU}Seρ?hrصL) Mkh4["dkRNDm_d-ḿ#=KED qѵ:3O-ΒEDV~vl$Bv޲&$'r:ً~6[TKI-+,"h.AmGOj][Gљ`]\rDbR"9l&^GN6E¼>>U(hG0ޑ> ^Gw~ ] z~8^ i/) >T96P"р Ht xƗ[!=s`:vdcg!_Oɰ7K,Cԏ~NK^#f/~<ƍu%j YHt xFo7v\Q)pUnwU]].4!JDn0d H} )+2΋g3OK;m L=^+tTYEINBy~ާlbKye '$!6Ht ÉAZ's/8 yO7ѳ(Xȉ=jvp#eo| c@m 4- "gD#NǓxX8Oq׾Y@KD 6خI](}S4iVuަU7d`@65\ &H[T~ hA}lɭGEK|h`Ӷ?]LSzgǦG6! Ln}Z<i0=z8p(#hvy@"B+Mys*yF%;r;sœv ]D 5}Ư߭A4|KM]i1 +Ɓ)6/Byk[RYSbC<۸3iKծvA :'fqu4p|1uGnJ,=~y 5.v |\&"d`<㬷 Mk^6- 뾃\NYl'oA@吁]-oՎ1d?9`jirūв.{ ] rh3pжV(o:.ٍ-PG.zǕ!&.r"KT~.A}ڦ?$^(ϏU2smW3IKƜ21?t\Lm"K(c\JN/'Um}S 3i,fnJCyk[ZL«^v |~GC]DHt ؂mC_:1|h u5CAAQs~Xc$δ&:ȓ`CѲJamYW;»YQ2"{U}T]n0$Alɷ;5{]SeI;e`.ɢ8y CBU nd[8ڡzs9R6W;ʅܖ#oe4U8Ƨu1|lL{b Ca '`|6Ȑ70^ ϕ²>5-I~mZG7k ] kmC< \t}p|¢d,n y{-G?EۈOՎy K0|dd$R %bk\֙ᇓ mu-P;iy[D?ϻvX$!o4[SC!$*㼘 a.A;rw~!,h8$֑p=Pw>tH}v"煼Y "=UjG#C*4&%:AD.DǷI 0p; D"Kiٮut=V_*zZ, IDATySa]6IhGxxnqSx(oj06ig\Gg oKFXDVO^D M=>88R9u\t o^7:Mt$!'hGiTg@ Өȗ~Vj@^}gy;r1|@] ڙmil>t\Y&k8 ~$t3.]͇cD"2iJ05p gBW; *\H>0sJ!$A$qs𶡯|>4uuGMM4UN~qS4М_hT[xCю>mKC]r}%>vș] ۝㚈ƽk \l '..A6˛iyR" t7E<34ܖgzC誒!q~oSX:>u*]z@ooWo.6E,4\ڨ$y v,RӶj>*\8V@K$.66ػ5{G[a4&zl+o\JM5(91S+s ayS}Cv}6a11t3"CtmϼG!%B}:(֖)`l [c{fl':i}n!ږ@P-%/o*jǡ/$AH[~ u»ZCc %şS$B[6Ӡ65XxMv,F;28lBvzX@Kd:'fqY\'%!je ]+TN.bXKoƳюyYG;6"] R˭m;|L= m]$Q66ѓdp@zLgl׏,{CV}6!W;Ƥ-o.A3BWVKRq\MƂ;\ȉjIPԧa-UQMՎJaY߯X3ZAKD*|*}j<8;.lT;ʉR.p$F2юdjY'#]O=, %"%FSǛ{;wvج#'yD߄Jm wI[F;^4PjOH]] R3CۊOqsr%֑hg@ }5*BCK^w~>2_')lZgib{8D g@c.ou=ڱ{}GJpfaj1ge0sɐ!%bot.O\Ւ~:KlA('-+Ll*'yص>heFe?rE"@h!$A/6jӶc (}^,.{A6˛i2 iɛY}k`@ޏw] %bj-8k7}yi\N<\jؕQ3UBvar7r1PhCh۴G;%C] -8Q)"8:mGG/,~;;iDu# y9OST5m *,lgG;dtsmW.A{g4p⨺O!86t)݉I]<8,iXG;d˛~<-Z#DzL}ޜE%$Ad m+Kɰ$rҜc~)b6rbD"]?dɛ`hYL{OhE,!%"Lm*mCy+8<]bEl*'>| [y)oyQZfP* b3:!#,"AKDfvg&b}m\t/F^֠i ;tqDz\l*'H7~"r]G;>q'eh]\XBKDfp\6>S[߮}'3+&r>㥐hGXJPwD6tJIhYAuU}gD Lq޵> \;$0qs8x88l"'* J`h&ՙcIuSx #eюHAxnO 1d8=0ڬ+'?HN㦔 VE()mF;VA%$Ad~VlVɦkJ''>Y6e2 J/:q&/bK] oc_udxB6V+d`W*MB2 ў$6OƛmElIt $wS-ih4Wqr>_cE6ѓ"Iy[ ̻tҼ>BrhGX#CpZ,х3] 2٭ߚ8=2p?|L89y,]x [vCvZmMcPiZ6G)B@*~VIt ,AOU8 \}'VI>U5i%8͜`>4@Z)sT'k_5',#,KKD9Ѩh{_M]tcnC-yS5d ƀZi^W-iT`,- Msu}<ߗ6 `HmFS7.\mC;SU_T"T܅-!/Pȿ.vi[MS[>2>H]PtIt <_;3Y[CKuρsm$4.6ѣ$!oy  WoZl$2a}Bݦ>*=]] 2q nBp-_nӏ788aMKBN2И~uQq3arۨ^EWPI.AJIM~m\vL%KrY eDͮE\29М~U8ڡqQ DiTݒ1s;HK86NqoW_-+x74h@ ovC80fE34gyQStc)R!%B.6E쩧Ž黚^aqSv鼩2 miK7UG;ij_qI ,cD7X}@K2x^0I! G:x>M}@ oa481aqS7BvAhț:jZK^mY*rR$qHt P~Gi TK6嗯}p׫Y7`[y{-2+>5 hZIurjWJW)AH yW}#:I]m14- ͊ƀ×[c6 Mm20vf;d`Wt>IwYSoέlpPf`ѕ1+z#Ht PąUV* [la6Dy8<\bNly[ F.Ci[R*z m+XL>@ ojD " բ Gǽ! 9ƫw6ّЮ!R -+XJM"Kdvy}.cIua/ht)HK<]tGqMຟTCAC>n2i:7Cv/;qO/6a11E})fل,2p\JE,_nm4*:nT:U4.c>l"o* J`hA}hGwbhGJ!娬%.|l isICKn\WW)3ۆJNC>vT ؕў$'%o3'hG9"=x@CIq|[g|7D ڙȊ?5(vT ؕra.f2юE},zPA~.UlҫS]SDž# $A(q nB :38 y %"2U$" *e}8?V}R䋱t .CW@jKx:CjIt Pow6Nj_}.d8ycUT",ƮhG#!f/fe_ 2smXю4;@o ( %%By{mc8c6+u@M/տM")(ogyJK-0S H[Y8=/󍽗a4.Aۺ]8i8}fECz#mA. Aa@HfCgnw&Վ<2Gbदe |qٵֺ3*A x;tW6/Ht |I! mlׇOg1C`(G`pf|_n^|g3}1 ^;2yc8Y.> ؅L!ˮmBv1loWMG;e֣hã O{1mKn6*=$A䊻*\ZvSA=E$B)д4k/1ElӲZ{d|`;tys? =".0P|wg$A_nmS| :am 4M Bc ؅PNl*o4m31m {#hk9~{D7,~;w}:A䎇GݑFeq\g$oYl2 rҶM-4.r8ڡp45pI[h*qq=>dr!szn<&%"|Ѩh[dq.ng$d`B9i[;9 xeFE܎# ^>SϧҟP7)EYy:F""n.k]Cw2_#YjT4L`a܄ ¶c@ZȸǪrs>Ϗ[_φ`hW&YapyD 3C/6Z:RYEofJI,3]W&r!ǣB[YW;X"i}lMUdο-]Z=@n@Ht -SeugVȮ@]Yʉ@ג7׋·{CVpMV`I7c,Ŷ7w4fLww'eM.gCCFY) ]oIKeDAZkȉl>F; :C -ɔp'<6Utc '.:wC'u8'x:H!%"x>c7WLO_\gYQbIAwx9ڑPEBv/;f19Nb;xʎvlVF8s|kl}77fʭx] ~VhT%0l~u$[62+%e͕B2rk~dLM?CA>mʎ,8|$aK󇨚# y_}#JմXʉ@[b}Pt>tʑWg]ŽZ#AM3:\hW>V_{ylK$A wCG71U2ɲ8\ƺ Jў_HQ^mwc 7,w+ sl|(4 wI*PA_,r4ڑT}VQ9NjW!+4߼+VNƮlJHt 88S7}ǵ ;SX ?".<'Z3Z=yzxp"+I]m@;T*Y % ڙ]/MW=krL,Tbaj[q9#O+q$UMrscc-#, qL*4YJ,Ew>k;ȘDcA{ĻL%$A<7}zlh"P-;x FEOS<<)Iq-곮r߶>~\L3D lDb5S!, qng~>3D7*'V/盙1B y}Ď9grÈ~9>m|l XV*Y %p? bYiDV1¿d[vCykZgxxtq~oV"6Eh-'o08W5巒{\D+ PIDAT`$"]chZڦ@Z M#9_5\ڰj.hGDץ8\Ƿ ?T,@K1'/iX28NjW='w:ШhWVE ,uܧ.Xvnש&Llo~hǦ\wr' dYD "٭! c̓o_H`(FtyY -+P-[v>!V_KsQ)p\v`ǶT,@Ka3>0.`6pwVxaj)WE %xqu𾹺q-?̤uU"yJGж4T lٵU5d`V߅^?2ڑ):2PߟMQ^!%x6N"&m]kc< #V~E\_t{#{SMKCQU Tw~*a$!%xc8me~@ўz9pSv>t*ܖbY-Ϩ!&>;m~59THt ^k]CE⨪65-*E\xIl_vGyjb6zjS/86ts.I fg?U??HH] W|kOo^?pzߩ)f/N]=0d 4 +"|u>Fй=m(ޅt%AEHt Vp3?%@ٯ5Js5)o|h@/ci(1V d?*o3p# yƀZ(BngK?4rC>:y׶3e .A =46KIM@8͇ᣇp>c)46vXp'|l M>N]wm|s$gԈxHt Fnqoa$BK&㙇뾃h`C0ovgИm0c7r>&>mKQLnm_#>!Gpl}KXe#|v7sK$Ac*/MW=GiihQ0u!| ƃrmKCb?! 6Dǯ kȑ[ Ⱦ8@ f3Ht 6`:x\8Çof)d8C N]Y%c d_nfY34`^Y_nq~G;}%=;#BD2Al;'u%.pѵ3@[Ҡk E~BvAp5۲z~D\IxhG&۩ _o!6D bC;cm/ًZ R{,7!"4|-O]ۇ|v r{Rkg]| ڞuli] -x)VGU  5FE.|]7kes]q}"ny\)rtbQ HPnG$owfEF$.Ax>pֱo 1d|d}򾞣 =  tnC]}:Co~vBExScGVrrz>{6;z;CwDiHt ,]zEC?N\ B  Ē` `+x]f 1Q-q_hWӄ(~qqOt %؁}1utLp2,BMmJ3rkW_>˘qFNҠ^^mJF f_y=Fd(ٗ+IENDB`x2goclient-4.1.2.3/res/img/png/power-button.png0000644000000000000000000000137214447111614016135 0ustar PNG  IHDRfOVsRGBbKGD pHYs$-ptIME'5okzIDATHǵK[QDxB&A:XqtV hq.];89Nq4DE!-BH${}/k9s߹Q"Bh4p]-Pkn: TȐN l`fii?kZ񫫫0V[JRj 8l64RjK)0} +ro=PJ|\돀R* ̨T*UJt]eyLi!j*}}}bolhΝM@DܰbZ177'Q"fddb!d⭬^:8o-s& dz>>mrO/%*WI)_.Lǃ_P,xf۔86UCS}pp`gpLRstڈ|~WLq&YiZza~$Y4m]WxVc~~^BĴ`bvrzzࠄfۏQ9v8cccddVkMP<*a<;.C~Q} L1C.~`.u/Fk8oRWk2\߁2$"?:1~s^RKFIENDB`x2goclient-4.1.2.3/res/img/png/sess_ico.png0000644000000000000000000000221114447111614015270 0ustar PNG  IHDRTj:bKGD pHYs.#.#x?vtIME /IDATx=̝cKG.1"&14&A ,4TG ^}NHL~srF0՞`uGu[usuM/UVUoTW?1qn +57Ǫ?7sSM8ǫco NLﯞ oOTO1ZvbzYuo\Q=R=8HuF2ܳSY1xG׎9;~\YZ`QݳKspnjW/yM `v/6؈!" **  ]]vX_uNx ! ** ** dP`+ƜsXeە`W~@PVzN`-W~ ^TAT@P@PTAT@P@PT˜s.7*?-vXRj=CATAT@P@PTAT@P@PTATA@P?TQ@Oǜse U[;vu`Sw~** ** ** ԽfXmR ;6;v3T TATA@P@PATA@P@PATAT@P?sέj)V9T':cx ! ** ** *  A2js;R}`>[׫m[rtޭ>NW1M.^V/ࢽV4^''mpޮc߽?zhK*J@o'WVwX WW/Vߎ1y]u}U*tz:\}<8W?Տ-o([IENDB`x2goclient-4.1.2.3/res/img/svg/bg-anim.svg0000644000000000000000000000600014447111614015021 0ustar x2goclient-4.1.2.3/res/img/svg/bg.svg0000644000000000000000000001420314447111614014103 0ustar image/svg+xml x2goclient-4.1.2.3/res/img/svg/fav1.svg0000644000000000000000000000602614447111614014354 0ustar image/svg+xml x2goclient-4.1.2.3/res/img/svg/fav.svg0000644000000000000000000000601014447111614014264 0ustar image/svg+xml x2goclient-4.1.2.3/res/img/svg/folder_grey.svg0000644000000000000000000003643414447111614016026 0ustar image/svg+xml x2goclient-4.1.2.3/res/img/svg/folder.svg0000644000000000000000000006021014447111614014765 0ustar image/svg+xml x2goclient-4.1.2.3/res/img/svg/hamburger.svg0000644000000000000000000000164514447111614015475 0ustar image/svg+xml x2goclient-4.1.2.3/res/img/svg/line.svg0000644000000000000000000000460114447111614014443 0ustar image/svg+xml x2goclient-4.1.2.3/res/img/svg/lxqt.svg0000644000000000000000000002414514447111614014511 0ustar LXQt image/svg+xml LXQt Giacomo Barazzetti x2goclient-4.1.2.3/res/img/svg/macinstaller_background.svg0000644000000000000000000005616214447111614020402 0ustar image/svg+xml x2goclient x2goclient-4.1.2.3/res/img/svg/onlogo.svg0000644000000000000000000000762214447111614015017 0ustar image/svg+xml x2goclient-4.1.2.3/res/img/svg/passform.svg0000644000000000000000000001212214447111614015343 0ustar image/svg+xml x2goclient-4.1.2.3/res/img/svg/sessionbut_grey.svg0000644000000000000000000000330314447111614016736 0ustar image/svg+xml x2goclient-4.1.2.3/res/img/svg/sessionbut.svg0000644000000000000000000001614514447111614015720 0ustar image/svg+xml x2goclient-4.1.2.3/res/img/svg/unity.svg0000644000000000000000000001154114447111614014665 0ustar x2goclient-4.1.2.3/res/img/svg/x2gologo.svg0000644000000000000000000002220414447111614015253 0ustar image/svg+xml x2goclient-4.1.2.3/res/img/svg/xfce.svg0000644000000000000000000010675614447111614014457 0ustar image/svg+xml x2goclient-4.1.2.3/res/img/x2go-logos/mksizedsymbols.sh0000755000000000000000000000164414447111614017616 0ustar #!/bin/bash # Use this script to build typical iconsized PNGs based on a svg sourcefile. # ---------------------------------------------------------------------------- # Written by Heinz-M. Graesing # (C) 2012-2023 Heinz-M. Graesing GNU GPL v2.0+ # Last updated on: Dec/01/2012 by Heinz-M. Graesing # ---------------------------------------------------------------------------- usage="mksizedsymbols.sh -f sourcefile.svg" sizes=( 12 16 32 48 64 128 ) counter="0" while getopts "f:h" options; do case $options in f ) if [ -f $OPTARG ] ;then file=$OPTARG ((counter+=1)) fi ;; h ) echo $usage exit 0 ;; \? ) echo $usage exit 1;; esac done if [ -e "$file" ];then for i in "${sizes[@]}" do echo $i inkscape --without-gui --export-area-page --export-width=$i --export-height=$i --file=$file --export-png=${file%.*}-$i.png done exit 0 else echo $usage exit 1 fi x2goclient-4.1.2.3/res/img/x2go-logos/x2go-logo-colored.svg0000644000000000000000000010435614447111614020167 0ustar image/svg+xml 12.06.2007 Heinz-M. Graesing obviously-nice obviously-nice http://www.x2go.org/artwork DE Logo x2goclient-4.1.2.3/res/img/x2go-logos/x2go-logo-rotated.svg0000644000000000000000000027414614447111614020207 0ustar image/svg+xml x2go Logo 12.06.2007 Heinz-M. Graesing obviously-nice obviously-nice http://www.x2go.org/artwork DE Logo image/svg+xml x2go Logo 12.06.2007 Heinz-M. Graesing obviously-nice obviously-nice http://www.x2go.org/artwork DE Logo image/svg+xml x2go Logo 12.06.2007 Heinz-M. Graesing obviously-nice obviously-nice http://www.x2go.org/artwork DE Logo x2goclient-4.1.2.3/res/img/x2go-logos/x2go-logo.svg0000644000000000000000000003027414447111614016537 0ustar image/svg+xml x2go Logo 12.06.2007 Heinz-M. Graesing obviously-nice obviously-nice http://www.x2go.org/artwork DE Logo x2goclient-4.1.2.3/res/img/x2go-logos/x2go-mascot.svg0000644000000000000000000005431514447111614017067 0ustar image/svg+xml x2go mascot "phoca" 02.06.2009 Heinz-M. Graesing Heinz-M. Graesing obviously-nice http://www.x2go.org/artwork DE x2go mascot x2goclient-4.1.2.3/res/osxbundle/Info.plist0000644000000000000000000000130014447111614015364 0ustar CFBundleIconFile x2go-mac.icns CFBundlePackageType APPL CFBundleShortVersionString @SHORT_VERSION@ CFBundleVersion @FULL_VERSION@ CFBundleGetInfoString @TARGET@ @FULL_VERSION@ CFBundleSignature ???? CFBundleExecutable x2goclient NOTE Please, do NOT change this file -- It was generated by Qt/QMake. x2goclient-4.1.2.3/res/osxbundle/macdmg.DS_Store0000644000000000000000000003600414447111614016261 0ustar Bud1((  B0blobt5d.pBB0blobt5d1ee87309f588c9;00000000;0000000000000020;com.apple.app-sandbox.read-write;00000001;01000009;0000000000000015;/volumes/x2goclient/.background/macinstaller_background.png`@ p   (   T@ t(orRed^backgroundType_backgroundColorGreen[gridOffsetX[gridOffsetY\showItemInfo_viewOptionsVersion]labelOnB  @ @ @ @ .pBBkblobbookP0XVolumes x2goclient .backgroundmacinstaller_background.png(<)xAA$95E5DD52-A053-35BE-ACB6-67344AF24E92a?Usersclemens Developmentx2goclient-4.0.0.1x2goclient.dmgJObk7b$4DA Macintosh HDpM.A$986B3431-9B22-3952-A999-CA7791732A7E?/703061d927172fdc0074db8e2f38de7c992e4ace;00000000;0000000000000020;com.apple.app-sandbox.read-write;00000001;01000004;000000000362fdb9;/users/clemens/development/x2goclient-4.0.0.1/x2goclient.dmgT@p      0 (4/Volumes/x2goclientT      LXdXXeb25c9f0e084ffc6b18f9593.vSrnlong .backgroundbwspblobbplist00 \WindowBounds[ShowSidebar]ShowStatusBar[ShowPathbar[ShowToolbar\SidebarWidth_{{520, 74}, {770, 405}} ". img/svg/bg.svg img/svg/line.svg img/svg/onlogo.svg img/svg/x2gologo.svg img/svg/passform.svg img/svg/sessionbut.svg img/svg/folder.svg img/svg/folder_grey.svg img/svg/sessionbut_grey.svg img/svg/hamburger.svg img/svg/lxqt.svg img/png/ico.png img/png/ico_mini.png img/png/sess_ico.png img/png/ico_440x180.png img/png/power-button.png img/png/broker-logout-button.png img/icons/128x128/x2go.png img/icons/128x128/folder.png img/icons/128x128/x2gosession.png img/icons/128x128/create_file.png img/icons/128x128/lxde.png img/icons/128x128/lxqt.png img/icons/128x128/preferences.png img/icons/128x128/rdp.png img/icons/64x64/audio.png img/icons/64x64/personal.png img/icons/64x64/create_file.png img/icons/64x64/lxde.png img/icons/64x64/lxqt.png img/icons/64x64/preferences.png img/icons/64x64/rdp.png img/icons/32x32/edit.png img/icons/32x32/edit_settings.png img/icons/32x32/exit.png img/icons/32x32/file-open.png img/icons/32x32/new_file.png img/icons/32x32/create_file.png img/icons/32x32/lxde.png img/icons/32x32/lxqt.png img/icons/32x32/preferences.png img/icons/32x32/rdp.png img/icons/32x32/reconnect.png img/icons/32x32/tbhide.png img/icons/32x32/tbshow.png img/icons/32x32/attach.png img/icons/32x32/detach.png img/icons/32x32/suspend.png img/icons/32x32/stop.png img/icons/32x32/auth.png img/icons/32x32/x2goclient.png img/icons/32x32/resolution.png img/icons/32x32/contest.png img/icons/32x32/apps.png img/icons/32x32/open_dir.png img/icons/32x32/suspend_session.png img/icons/32x32/stop_session.png img/icons/16x16/audio.png img/icons/16x16/file-open.png img/icons/16x16/delete.png img/icons/16x16/edit.png img/icons/16x16/fav.png img/icons/16x16/fav1.png img/icons/16x16/gnome.png img/icons/16x16/unity.png img/icons/16x16/xfce.png img/icons/16x16/mate.png img/icons/16x16/kde.png img/icons/16x16/cinnamon.png img/icons/16x16/trinity.png img/icons/16x16/openbox.png img/icons/16x16/icewm.png img/icons/16x16/new_file.png img/icons/16x16/resolution.png img/icons/16x16/session.png img/icons/16x16/x2go.png img/icons/16x16/tbshow.png img/icons/16x16/X.png img/icons/16x16/create_file.png img/icons/16x16/lxde.png img/icons/16x16/lxqt.png img/icons/16x16/preferences.png img/icons/16x16/rdp.png img/icons/22x22/applications-development.png img/icons/22x22/applications-education.png img/icons/22x22/applications-games.png img/icons/22x22/applications-graphics.png img/icons/22x22/applications-internet.png img/icons/22x22/applications-multimedia.png img/icons/22x22/applications-office.png img/icons/22x22/applications-other.png img/icons/22x22/applications-system.png img/icons/22x22/applications-utilities.png img/icons/22x22/preferences-system.png img/icons/22x22/lxqt.png txt/packs txt/encodings i18n/x2goclient_cs.qm i18n/x2goclient_da.qm i18n/x2goclient_de.qm i18n/x2goclient_es.qm i18n/x2goclient_et.qm i18n/x2goclient_fi.qm i18n/x2goclient_fr.qm i18n/x2goclient_nb_no.qm i18n/x2goclient_nl.qm i18n/x2goclient_pt.qm i18n/x2goclient_ru.qm i18n/x2goclient_sv.qm i18n/x2goclient_tr.qm i18n/x2goclient_zh_tw.qm i18n/qt_cs.qm i18n/qt_da.qm i18n/qt_de.qm i18n/qt_es.qm i18n/qt_fi.qm i18n/qt_fr.qm i18n/qt_pt.qm i18n/qt_ru.qm i18n/qt_sv.qm i18n/qt_zh_tw.qm x2goclient-4.1.2.3/res/txt/encodings0000644000000000000000000003224214447111614014135 0ustar 437// 500// 500V1// 850// 851// 852// 855// 856// 857// 860// 861// 862// 863// 864// 865// 866// 866NAV// 869// 874// 904// 1026// 1046// 1047// 8859_1// 8859_2// 8859_3// 8859_4// 8859_5// 8859_6// 8859_7// 8859_8// 8859_9// 10646-1:1993// 10646-1:1993/UCS4/ ANSI_X3.4-1968// ANSI_X3.4-1986// ANSI_X3.4// ANSI_X3.110-1983// ANSI_X3.110// ARABIC// ARABIC7// ARMSCII-8// ASCII// ASMO-708// ASMO_449// BALTIC// BIG-5// BIG-FIVE// BIG5-HKSCS// BIG5// BIG5HKSCS// BIGFIVE// BRF// BS_4730// CA// CN-BIG5// CN-GB// CN// CP-AR// CP-GR// CP-HU// CP037// CP038// CP273// CP274// CP275// CP278// CP280// CP281// CP282// CP284// CP285// CP290// CP297// CP367// CP420// CP423// CP424// CP437// CP500// CP737// CP775// CP803// CP813// CP819// CP850// CP851// CP852// CP855// CP856// CP857// CP860// CP861// CP862// CP863// CP864// CP865// CP866// CP866NAV// CP868// CP869// CP870// CP871// CP874// CP875// CP880// CP891// CP901// CP902// CP903// CP904// CP905// CP912// CP915// CP916// CP918// CP920// CP921// CP922// CP930// CP932// CP933// CP935// CP936// CP937// CP939// CP949// CP950// CP1004// CP1008// CP1025// CP1026// CP1046// CP1047// CP1070// CP1079// CP1081// CP1084// CP1089// CP1097// CP1112// CP1122// CP1123// CP1124// CP1125// CP1129// CP1130// CP1132// CP1133// CP1137// CP1140// CP1141// CP1142// CP1143// CP1144// CP1145// CP1146// CP1147// CP1148// CP1149// CP1153// CP1154// CP1155// CP1156// CP1157// CP1158// CP1160// CP1161// CP1162// CP1163// CP1164// CP1166// CP1167// CP1250// CP1251// CP1252// CP1253// CP1254// CP1255// CP1256// CP1257// CP1258// CP1282// CP1361// CP1364// CP1371// CP1388// CP1390// CP1399// CP4517// CP4899// CP4909// CP4971// CP5347// CP9030// CP9066// CP9448// CP10007// CP12712// CP16804// CPIBM861// CSA7-1// CSA7-2// CSASCII// CSA_T500-1983// CSA_T500// CSA_Z243.4-1985-1// CSA_Z243.4-1985-2// CSA_Z243.419851// CSA_Z243.419852// CSDECMCS// CSEBCDICATDE// CSEBCDICATDEA// CSEBCDICCAFR// CSEBCDICDKNO// CSEBCDICDKNOA// CSEBCDICES// CSEBCDICESA// CSEBCDICESS// CSEBCDICFISE// CSEBCDICFISEA// CSEBCDICFR// CSEBCDICIT// CSEBCDICPT// CSEBCDICUK// CSEBCDICUS// CSEUCKR// CSEUCPKDFMTJAPANESE// CSGB2312// CSHPROMAN8// CSIBM037// CSIBM038// CSIBM273// CSIBM274// CSIBM275// CSIBM277// CSIBM278// CSIBM280// CSIBM281// CSIBM284// CSIBM285// CSIBM290// CSIBM297// CSIBM420// CSIBM423// CSIBM424// CSIBM500// CSIBM803// CSIBM851// CSIBM855// CSIBM856// CSIBM857// CSIBM860// CSIBM863// CSIBM864// CSIBM865// CSIBM866// CSIBM868// CSIBM869// CSIBM870// CSIBM871// CSIBM880// CSIBM891// CSIBM901// CSIBM902// CSIBM903// CSIBM904// CSIBM905// CSIBM918// CSIBM921// CSIBM922// CSIBM930// CSIBM932// CSIBM933// CSIBM935// CSIBM937// CSIBM939// CSIBM943// CSIBM1008// CSIBM1025// CSIBM1026// CSIBM1097// CSIBM1112// CSIBM1122// CSIBM1123// CSIBM1124// CSIBM1129// CSIBM1130// CSIBM1132// CSIBM1133// CSIBM1137// CSIBM1140// CSIBM1141// CSIBM1142// CSIBM1143// CSIBM1144// CSIBM1145// CSIBM1146// CSIBM1147// CSIBM1148// CSIBM1149// CSIBM1153// CSIBM1154// CSIBM1155// CSIBM1156// CSIBM1157// CSIBM1158// CSIBM1160// CSIBM1161// CSIBM1163// CSIBM1164// CSIBM1166// CSIBM1167// CSIBM1364// CSIBM1371// CSIBM1388// CSIBM1390// CSIBM1399// CSIBM4517// CSIBM4899// CSIBM4909// CSIBM4971// CSIBM5347// CSIBM9030// CSIBM9066// CSIBM9448// CSIBM12712// CSIBM16804// CSIBM11621162// CSISO4UNITEDKINGDOM// CSISO10SWEDISH// CSISO11SWEDISHFORNAMES// CSISO14JISC6220RO// CSISO15ITALIAN// CSISO16PORTUGESE// CSISO17SPANISH// CSISO18GREEK7OLD// CSISO19LATINGREEK// CSISO21GERMAN// CSISO25FRENCH// CSISO27LATINGREEK1// CSISO49INIS// CSISO50INIS8// CSISO51INISCYRILLIC// CSISO58GB1988// CSISO60DANISHNORWEGIAN// CSISO60NORWEGIAN1// CSISO61NORWEGIAN2// CSISO69FRENCH// CSISO84PORTUGUESE2// CSISO85SPANISH2// CSISO86HUNGARIAN// CSISO88GREEK7// CSISO89ASMO449// CSISO90// CSISO92JISC62991984B// CSISO99NAPLPS// CSISO103T618BIT// CSISO111ECMACYRILLIC// CSISO121CANADIAN1// CSISO122CANADIAN2// CSISO139CSN369103// CSISO141JUSIB1002// CSISO143IECP271// CSISO150// CSISO150GREEKCCITT// CSISO151CUBA// CSISO153GOST1976874// CSISO646DANISH// CSISO2022CN// CSISO2022JP// CSISO2022JP2// CSISO2022KR// CSISO2033// CSISO5427CYRILLIC// CSISO5427CYRILLIC1981// CSISO5428GREEK// CSISO10367BOX// CSISOLATIN1// CSISOLATIN2// CSISOLATIN3// CSISOLATIN4// CSISOLATIN5// CSISOLATIN6// CSISOLATINARABIC// CSISOLATINCYRILLIC// CSISOLATINGREEK// CSISOLATINHEBREW// CSKOI8R// CSKSC5636// CSMACINTOSH// CSNATSDANO// CSNATSSEFI// CSN_369103// CSPC8CODEPAGE437// CSPC775BALTIC// CSPC850MULTILINGUAL// CSPC862LATINHEBREW// CSPCP852// CSSHIFTJIS// CSUCS4// CSUNICODE// CSWINDOWS31J// CUBA// CWI-2// CWI// CYRILLIC// DE// DEC-MCS// DEC// DECMCS// DIN_66003// DK// DS2089// DS_2089// E13B// EBCDIC-AT-DE-A// EBCDIC-AT-DE// EBCDIC-BE// EBCDIC-BR// EBCDIC-CA-FR// EBCDIC-CP-AR1// EBCDIC-CP-AR2// EBCDIC-CP-BE// EBCDIC-CP-CA// EBCDIC-CP-CH// EBCDIC-CP-DK// EBCDIC-CP-ES// EBCDIC-CP-FI// EBCDIC-CP-FR// EBCDIC-CP-GB// EBCDIC-CP-GR// EBCDIC-CP-HE// EBCDIC-CP-IS// EBCDIC-CP-IT// EBCDIC-CP-NL// EBCDIC-CP-NO// EBCDIC-CP-ROECE// EBCDIC-CP-SE// EBCDIC-CP-TR// EBCDIC-CP-US// EBCDIC-CP-WT// EBCDIC-CP-YU// EBCDIC-CYRILLIC// EBCDIC-DK-NO-A// EBCDIC-DK-NO// EBCDIC-ES-A// EBCDIC-ES-S// EBCDIC-ES// EBCDIC-FI-SE-A// EBCDIC-FI-SE// EBCDIC-FR// EBCDIC-GREEK// EBCDIC-INT// EBCDIC-INT1// EBCDIC-IS-FRISS// EBCDIC-IT// EBCDIC-JP-E// EBCDIC-JP-KANA// EBCDIC-PT// EBCDIC-UK// EBCDIC-US// EBCDICATDE// EBCDICATDEA// EBCDICCAFR// EBCDICDKNO// EBCDICDKNOA// EBCDICES// EBCDICESA// EBCDICESS// EBCDICFISE// EBCDICFISEA// EBCDICFR// EBCDICISFRISS// EBCDICIT// EBCDICPT// EBCDICUK// EBCDICUS// ECMA-114// ECMA-118// ECMA-128// ECMA-CYRILLIC// ECMACYRILLIC// ELOT_928// ES// ES2// EUC-CN// EUC-JISX0213// EUC-JP-MS// EUC-JP// EUC-KR// EUC-TW// EUCCN// EUCJP-MS// EUCJP-OPEN// EUCJP-WIN// EUCJP// EUCKR// EUCTW// FI// FR// GB// GB2312// GB13000// GB18030// GBK// GB_1988-80// GB_198880// GEORGIAN-ACADEMY// GEORGIAN-PS// GOST_19768-74// GOST_19768// GOST_1976874// GREEK-CCITT// GREEK// GREEK7-OLD// GREEK7// GREEK7OLD// GREEK8// GREEKCCITT// HEBREW// HP-GREEK8// HP-ROMAN8// HP-ROMAN9// HP-THAI8// HP-TURKISH8// HPGREEK8// HPROMAN8// HPROMAN9// HPTHAI8// HPTURKISH8// HU// IBM-803// IBM-856// IBM-901// IBM-902// IBM-921// IBM-922// IBM-930// IBM-932// IBM-933// IBM-935// IBM-937// IBM-939// IBM-943// IBM-1008// IBM-1025// IBM-1046// IBM-1047// IBM-1097// IBM-1112// IBM-1122// IBM-1123// IBM-1124// IBM-1129// IBM-1130// IBM-1132// IBM-1133// IBM-1137// IBM-1140// IBM-1141// IBM-1142// IBM-1143// IBM-1144// IBM-1145// IBM-1146// IBM-1147// IBM-1148// IBM-1149// IBM-1153// IBM-1154// IBM-1155// IBM-1156// IBM-1157// IBM-1158// IBM-1160// IBM-1161// IBM-1162// IBM-1163// IBM-1164// IBM-1166// IBM-1167// IBM-1364// IBM-1371// IBM-1388// IBM-1390// IBM-1399// IBM-4517// IBM-4899// IBM-4909// IBM-4971// IBM-5347// IBM-9030// IBM-9066// IBM-9448// IBM-12712// IBM-16804// IBM037// IBM038// IBM256// IBM273// IBM274// IBM275// IBM277// IBM278// IBM280// IBM281// IBM284// IBM285// IBM290// IBM297// IBM367// IBM420// IBM423// IBM424// IBM437// IBM500// IBM775// IBM803// IBM813// IBM819// IBM848// IBM850// IBM851// IBM852// IBM855// IBM856// IBM857// IBM860// IBM861// IBM862// IBM863// IBM864// IBM865// IBM866// IBM866NAV// IBM868// IBM869// IBM870// IBM871// IBM874// IBM875// IBM880// IBM891// IBM901// IBM902// IBM903// IBM904// IBM905// IBM912// IBM915// IBM916// IBM918// IBM920// IBM921// IBM922// IBM930// IBM932// IBM933// IBM935// IBM937// IBM939// IBM943// IBM1004// IBM1008// IBM1025// IBM1026// IBM1046// IBM1047// IBM1089// IBM1097// IBM1112// IBM1122// IBM1123// IBM1124// IBM1129// IBM1130// IBM1132// IBM1133// IBM1137// IBM1140// IBM1141// IBM1142// IBM1143// IBM1144// IBM1145// IBM1146// IBM1147// IBM1148// IBM1149// IBM1153// IBM1154// IBM1155// IBM1156// IBM1157// IBM1158// IBM1160// IBM1161// IBM1162// IBM1163// IBM1164// IBM1166// IBM1167// IBM1364// IBM1371// IBM1388// IBM1390// IBM1399// IBM4517// IBM4899// IBM4909// IBM4971// IBM5347// IBM9030// IBM9066// IBM9448// IBM12712// IBM16804// IEC_P27-1// IEC_P271// INIS-8// INIS-CYRILLIC// INIS// INIS8// INISCYRILLIC// ISIRI-3342// ISIRI3342// ISO-2022-CN-EXT// ISO-2022-CN// ISO-2022-JP-2// ISO-2022-JP-3// ISO-2022-JP// ISO-2022-KR// ISO-8859-1// ISO-8859-2// ISO-8859-3// ISO-8859-4// ISO-8859-5// ISO-8859-6// ISO-8859-7// ISO-8859-8// ISO-8859-9// ISO-8859-9E// ISO-8859-10// ISO-8859-11// ISO-8859-13// ISO-8859-14// ISO-8859-15// ISO-8859-16// ISO-10646// ISO-10646/UCS2/ ISO-10646/UCS4/ ISO-10646/UTF-8/ ISO-10646/UTF8/ ISO-CELTIC// ISO-IR-4// ISO-IR-6// ISO-IR-8-1// ISO-IR-9-1// ISO-IR-10// ISO-IR-11// ISO-IR-14// ISO-IR-15// ISO-IR-16// ISO-IR-17// ISO-IR-18// ISO-IR-19// ISO-IR-21// ISO-IR-25// ISO-IR-27// ISO-IR-37// ISO-IR-49// ISO-IR-50// ISO-IR-51// ISO-IR-54// ISO-IR-55// ISO-IR-57// ISO-IR-60// ISO-IR-61// ISO-IR-69// ISO-IR-84// ISO-IR-85// ISO-IR-86// ISO-IR-88// ISO-IR-89// ISO-IR-90// ISO-IR-92// ISO-IR-98// ISO-IR-99// ISO-IR-100// ISO-IR-101// ISO-IR-103// ISO-IR-109// ISO-IR-110// ISO-IR-111// ISO-IR-121// ISO-IR-122// ISO-IR-126// ISO-IR-127// ISO-IR-138// ISO-IR-139// ISO-IR-141// ISO-IR-143// ISO-IR-144// ISO-IR-148// ISO-IR-150// ISO-IR-151// ISO-IR-153// ISO-IR-155// ISO-IR-156// ISO-IR-157// ISO-IR-166// ISO-IR-179// ISO-IR-193// ISO-IR-197// ISO-IR-199// ISO-IR-203// ISO-IR-209// ISO-IR-226// ISO/TR_11548-1/ ISO646-CA// ISO646-CA2// ISO646-CN// ISO646-CU// ISO646-DE// ISO646-DK// ISO646-ES// ISO646-ES2// ISO646-FI// ISO646-FR// ISO646-FR1// ISO646-GB// ISO646-HU// ISO646-IT// ISO646-JP-OCR-B// ISO646-JP// ISO646-KR// ISO646-NO// ISO646-NO2// ISO646-PT// ISO646-PT2// ISO646-SE// ISO646-SE2// ISO646-US// ISO646-YU// ISO2022CN// ISO2022CNEXT// ISO2022JP// ISO2022JP2// ISO2022KR// ISO6937// ISO8859-1// ISO8859-2// ISO8859-3// ISO8859-4// ISO8859-5// ISO8859-6// ISO8859-7// ISO8859-8// ISO8859-9// ISO8859-9E// ISO8859-10// ISO8859-11// ISO8859-13// ISO8859-14// ISO8859-15// ISO8859-16// ISO11548-1// ISO88591// ISO88592// ISO88593// ISO88594// ISO88595// ISO88596// ISO88597// ISO88598// ISO88599// ISO88599E// ISO885910// ISO885911// ISO885913// ISO885914// ISO885915// ISO885916// ISO_646.IRV:1991// ISO_2033-1983// ISO_2033// ISO_5427-EXT// ISO_5427// ISO_5427:1981// ISO_5427EXT// ISO_5428// ISO_5428:1980// ISO_6937-2// ISO_6937-2:1983// ISO_6937// ISO_6937:1992// ISO_8859-1// ISO_8859-1:1987// ISO_8859-2// ISO_8859-2:1987// ISO_8859-3// ISO_8859-3:1988// ISO_8859-4// ISO_8859-4:1988// ISO_8859-5// ISO_8859-5:1988// ISO_8859-6// ISO_8859-6:1987// ISO_8859-7// ISO_8859-7:1987// ISO_8859-7:2003// ISO_8859-8// ISO_8859-8:1988// ISO_8859-9// ISO_8859-9:1989// ISO_8859-9E// ISO_8859-10// ISO_8859-10:1992// ISO_8859-14// ISO_8859-14:1998// ISO_8859-15// ISO_8859-15:1998// ISO_8859-16// ISO_8859-16:2001// ISO_9036// ISO_10367-BOX// ISO_10367BOX// ISO_11548-1// ISO_69372// IT// JIS_C6220-1969-RO// JIS_C6229-1984-B// JIS_C62201969RO// JIS_C62291984B// JOHAB// JP-OCR-B// JP// JS// JUS_I.B1.002// KOI-7// KOI-8// KOI8-R// KOI8-RU// KOI8-T// KOI8-U// KOI8// KOI8R// KOI8U// KSC5636// L1// L2// L3// L4// L5// L6// L7// L8// L10// LATIN-9// LATIN-GREEK-1// LATIN-GREEK// LATIN1// LATIN2// LATIN3// LATIN4// LATIN5// LATIN6// LATIN7// LATIN8// LATIN9// LATIN10// LATINGREEK// LATINGREEK1// MAC-CENTRALEUROPE// MAC-CYRILLIC// MAC-IS// MAC-SAMI// MAC-UK// MAC// MACCYRILLIC// MACINTOSH// MACIS// MACUK// MACUKRAINIAN// MIK// MS-ANSI// MS-ARAB// MS-CYRL// MS-EE// MS-GREEK// MS-HEBR// MS-MAC-CYRILLIC// MS-TURK// MS932// MS936// MSCP949// MSCP1361// MSMACCYRILLIC// MSZ_7795.3// MS_KANJI// NAPLPS// NATS-DANO// NATS-SEFI// NATSDANO// NATSSEFI// NC_NC0010// NC_NC00-10// NC_NC00-10:81// NF_Z_62-010// NF_Z_62-010_(1973)// NF_Z_62-010_1973// NF_Z_62010// NF_Z_62010_1973// NO// NO2// NS_4551-1// NS_4551-2// NS_45511// NS_45512// OS2LATIN1// OSF00010001// OSF00010002// OSF00010003// OSF00010004// OSF00010005// OSF00010006// OSF00010007// OSF00010008// OSF00010009// OSF0001000A// OSF00010020// OSF00010100// OSF00010101// OSF00010102// OSF00010104// OSF00010105// OSF00010106// OSF00030010// OSF0004000A// OSF0005000A// OSF05010001// OSF100201A4// OSF100201A8// OSF100201B5// OSF100201F4// OSF100203B5// OSF1002011C// OSF1002011D// OSF1002035D// OSF1002035E// OSF1002035F// OSF1002036B// OSF1002037B// OSF10010001// OSF10010004// OSF10010006// OSF10020025// OSF10020111// OSF10020115// OSF10020116// OSF10020118// OSF10020122// OSF10020129// OSF10020352// OSF10020354// OSF10020357// OSF10020359// OSF10020360// OSF10020364// OSF10020365// OSF10020366// OSF10020367// OSF10020370// OSF10020387// OSF10020388// OSF10020396// OSF10020402// OSF10020417// PT// PT2// PT154// R8// R9// RK1048// ROMAN8// ROMAN9// RUSCII// SE// SE2// SEN_850200_B// SEN_850200_C// SHIFT-JIS// SHIFT_JIS// SHIFT_JISX0213// SJIS-OPEN// SJIS-WIN// SJIS// SS636127// STRK1048-2002// ST_SEV_358-88// T.61-8BIT// T.61// T.618BIT// TCVN-5712// TCVN// TCVN5712-1// TCVN5712-1:1993// THAI8// TIS-620// TIS620-0// TIS620.2529-1// TIS620.2533-0// TIS620// TS-5881// TSCII// TURKISH8// UCS-2// UCS-2BE// UCS-2LE// UCS-4// UCS-4BE// UCS-4LE// UCS2// UCS4// UHC// UJIS// UK// UNICODE// UNICODEBIG// UNICODELITTLE// US-ASCII// US// UTF-7// UTF-8// UTF-16// UTF-16BE// UTF-16LE// UTF-32// UTF-32BE// UTF-32LE// UTF7// UTF8// UTF16// UTF16BE// UTF16LE// UTF32// UTF32BE// UTF32LE// VISCII// WCHAR_T// WIN-SAMI-2// WINBALTRIM// WINDOWS-31J// WINDOWS-874// WINDOWS-936// WINDOWS-1250// WINDOWS-1251// WINDOWS-1252// WINDOWS-1253// WINDOWS-1254// WINDOWS-1255// WINDOWS-1256// WINDOWS-1257// WINDOWS-1258// WINSAMI2// WS2// YU// x2goclient-4.1.2.3/res/txt/packs0000644000000000000000000000115514447111614013264 0ustar nopack adaptive-% 8 64 256 512 4k 32k 64k 256k 2m 16m 256-rdp 256-rdp-compressed 32k-rdp 32k-rdp-compressed 64k-rdp 64k-rdp-compressed 16m-rdp 16m-rdp-compressed rfb-hextile rfb-tight rfb-tight-compressed 8-tight 64-tight 256-tight 512-tight 4k-tight 32k-tight 64k-tight 256k-tight 2m-tight 16m-tight 8-jpeg-% 64-jpeg 256-jpeg 512-jpeg 4k-jpeg 32k-jpeg 64k-jpeg 256k-jpeg 2m-jpeg 16m-jpeg-% 8-png-jpeg-% 64-png-jpeg 256-png-jpeg 512-png-jpeg 4k-png-jpeg 32k-png-jpeg 64k-png-jpeg 256k-png-jpeg 2m-png-jpeg 16m-png-jpeg-% 8-png-% 64-png 256-png 512-png 4k-png 32k-png 64k-png 256k-png 2m-png 16m-png-% 16m-rgb-% 16m-rle-% x2goclient-4.1.2.3/res/x2goclient.rc0000644000000000000000000000010014447111614014012 0ustar IDI_ICON1 ICON DISCARDABLE "img/icons/x2go-win-48.ico" x2goclient-4.1.2.3/rpm/x2goclient-rpmlintrc0000644000000000000000000000004114447111614015430 0ustar addFilter("non-standard-group"); x2goclient-4.1.2.3/src/appdialog.cpp0000644000000000000000000001467514447111614014076 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include "appdialog.h" #include "onmainwindow.h" AppDialog::AppDialog(ONMainWindow* parent):QDialog(parent) { setupUi(this); mw=parent; media=0; dev=0; edu=0; game=0; graph=0; net=0; office=0; set=0; sys=0; util=0; other=0; startButton->setEnabled(false); loadApps(); } AppDialog::~AppDialog() { } void AppDialog::slotSearchChanged(QString text) { QTreeWidgetItemIterator it(treeWidget); while (*it) { QString exec=(*it)->data(0,Qt::UserRole).toString(); QString comment=(*it)->data(0,Qt::UserRole+1).toString(); QString name=(*it)->text(0); if ((*it)->childCount()==0) { if (text.length()<2) { (*it)->setHidden(false); (*it)->setSelected(false); } else { if (exec.indexOf(text, 0,Qt::CaseInsensitive)!= -1 || comment.indexOf(text, 0,Qt::CaseInsensitive)!= -1 || name.indexOf(text, 0,Qt::CaseInsensitive)!= -1 ) { treeWidget->clearSelection(); (*it)->setSelected(true); (*it)->setHidden(false); treeWidget->scrollToItem((*it)); } else { (*it)->setHidden(true); (*it)->setSelected(false); } } } ++it; } } QTreeWidgetItem* AppDialog::initTopItem(QString text, QPixmap icon) { QTreeWidgetItem* item; item=new QTreeWidgetItem(treeWidget); item->setText(0,text); item->setFlags(Qt::ItemIsEnabled); item->setIcon(0,icon); return item; } void AppDialog::loadApps() { QTreeWidgetItem* parent = NULL; foreach (Application app, mw->getApplications()) { switch (app.category) { case Application::MULTIMEDIA: if (!media) media=initTopItem(tr("Multimedia"), QPixmap(mw->iconsPath("/22x22/applications-multimedia.png"))); parent=media; break; case Application::DEVELOPMENT: if (!dev) dev=initTopItem(tr("Development"), QPixmap(mw->iconsPath("/22x22/applications-development.png"))); parent=dev; break; case Application::EDUCATION: if (!edu) edu=initTopItem(tr("Education"), QPixmap(mw->iconsPath("/22x22/applications-education.png"))); parent=edu; break; case Application::GAME: if (!game) game=initTopItem(tr("Game"), QPixmap(mw->iconsPath("/22x22/applications-games.png"))); parent=game; break; case Application::GRAPHICS: if (!graph) graph=initTopItem(tr("Graphics"), QPixmap(mw->iconsPath("/22x22/applications-graphics.png"))); parent=graph; break; case Application::NETWORK: if (!net) net=initTopItem(tr("Network"), QPixmap(mw->iconsPath("/22x22/applications-internet.png"))); parent=net; break; case Application::OFFICE: if (!office) office=initTopItem(tr("Office"), QPixmap(mw->iconsPath("/22x22/applications-office.png"))); parent=office; break; case Application::SETTINGS: if (!set) set=initTopItem(tr("Settings"), QPixmap(mw->iconsPath("/22x22/preferences-system.png"))); parent=set; break; case Application::SYSTEM: if (!sys) sys=initTopItem(tr("System"), QPixmap(mw->iconsPath("/22x22/applications-system.png"))); parent=sys; break; case Application::UTILITY: if (!util) util=initTopItem(tr("Utility"), QPixmap(mw->iconsPath("/22x22/applications-utilities.png"))); parent=util; break; case Application::OTHER: if (!other) other=initTopItem(tr("Other"), QPixmap(mw->iconsPath("/22x22/applications-other.png"))); parent=other; break; default: parent = NULL; break; } QTreeWidgetItem* it; if (app.category==Application::TOP) it=new QTreeWidgetItem(treeWidget); else it=new QTreeWidgetItem(parent); it->setText(0, app.name); it->setToolTip(0,app.comment); it->setIcon(0,app.icon); it->setData(0, Qt::UserRole, app.exec); it->setData(0, Qt::UserRole+1, app.comment); } treeWidget->sortItems(0,Qt::AscendingOrder); } void AppDialog::slotSelectedChanged() { startButton->setEnabled(false); if (treeWidget->selectedItems().count()) { startButton->setEnabled(true); } } void AppDialog::slotDoubleClicked(QTreeWidgetItem* item) { QString exec=item->data(0,Qt::UserRole).toString(); if (exec.length()>0) mw->runApplication(exec); } void AppDialog::slotStartSelected() { if (treeWidget->selectedItems().count()>0) { QString exec=treeWidget->selectedItems()[0]->data(0,Qt::UserRole).toString(); if (exec.length()>0) mw->runApplication(exec); } } x2goclient-4.1.2.3/src/appdialog.h0000644000000000000000000000406514447111614013533 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef APPDIALOG_H #define APPDIALOG_H #include #include "ui_appdialog.h" class QTreeWidgetItem; class ONMainWindow; class AppDialog: public QDialog, public Ui_AppDialog { Q_OBJECT public: AppDialog(ONMainWindow *parent = 0); ~AppDialog(); private: void loadApps(); QTreeWidgetItem* initTopItem(QString text, QPixmap icon=QPixmap()); ONMainWindow* mw; QTreeWidgetItem* media; QTreeWidgetItem* dev; QTreeWidgetItem* edu; QTreeWidgetItem* game; QTreeWidgetItem* graph; QTreeWidgetItem* net; QTreeWidgetItem* office; QTreeWidgetItem* set; QTreeWidgetItem* sys; QTreeWidgetItem* util; QTreeWidgetItem* other; private slots: void slotSelectedChanged(); void slotStartSelected(); void slotDoubleClicked(QTreeWidgetItem* item); void slotSearchChanged(QString text); }; #endif // APPDIALOG_H x2goclient-4.1.2.3/src/brokerpassdlg.cpp0000644000000000000000000000423314447111614014765 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include "brokerpassdlg.h" #include BrokerPassDlg::BrokerPassDlg(QWidget* parent, Qt::WindowFlags f): QDialog(parent, f) { setupUi(this); statusLabel->setText(QString::null); buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); } BrokerPassDlg::~BrokerPassDlg() { } void BrokerPassDlg::slotPassChanged() { bool passEq=false; if (lePass1->text()!=lePass2->text()) { passEq=false; statusLabel->setText(tr("Passwords do not match")); } else { passEq=true; statusLabel->setText(QString::null); } buttonBox->button(QDialogButtonBox::Ok)->setEnabled(passEq && lePass1->text().size()>0 && leOldPas->text().size()>0); } void BrokerPassDlg::accept() { QDialog::accept(); } void BrokerPassDlg::reject() { QDialog::reject(); } QString BrokerPassDlg::newPass() { return lePass1->text(); } QString BrokerPassDlg::oldPass() { return leOldPas->text(); } x2goclient-4.1.2.3/src/brokerpassdlg.h0000644000000000000000000000321614447111614014432 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef BROKERPASSDLG_H #define BROKERPASSDLG_H #include #include "ui_brokerpassdialog.h" class BrokerPassDlg: public QDialog, private Ui_BrokerPassDialogUi { Q_OBJECT public: BrokerPassDlg(QWidget* parent = 0, Qt::WindowFlags f = 0); virtual ~BrokerPassDlg(); virtual void accept(); virtual void reject(); QString oldPass(); QString newPass(); private slots: void slotPassChanged(); }; #endif // BROKERPASSDLG_H x2goclient-4.1.2.3/src/clicklineedit.cpp0000644000000000000000000000350214447111614014724 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include "clicklineedit.h" #include "x2gologdebug.h" #include ClickLineEdit::ClickLineEdit(QWidget * parent) : QLineEdit(parent) { } ClickLineEdit::~ClickLineEdit() { } #ifdef Q_OS_LINUX void ClickLineEdit::mouseReleaseEvent ( QMouseEvent * event ) { QLineEdit::mouseReleaseEvent(event); emit clicked(); setFocus(Qt::MouseFocusReason); } // void ClickLineEdit::focusInEvent ( QFocusEvent * event ) // { // QLineEdit::focusInEvent(event); // x2goDebug<<"focus in"; // } // // void ClickLineEdit::focusOutEvent ( QFocusEvent * event ) // { // QLineEdit::focusOutEvent(event); // x2goDebug<<"focus out"; // } #endif x2goclient-4.1.2.3/src/clicklineedit.h0000644000000000000000000000330614447111614014373 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef CLICKLINEEDIT_H #define CLICKLINEEDIT_H #include /** @author Oleksandr Shneyder */ class ClickLineEdit : public QLineEdit { Q_OBJECT public: ClickLineEdit ( QWidget * parent = 0 ); ~ClickLineEdit(); signals: void clicked(); #ifdef Q_OS_LINUX protected: virtual void mouseReleaseEvent ( QMouseEvent * event ); /* virtual void focusInEvent ( QFocusEvent * event ); virtual void focusOutEvent ( QFocusEvent * event );*/ #endif }; #endif x2goclient-4.1.2.3/src/compat.cpp0000644000000000000000000000371214447111614013407 0ustar /*************************************************************************** * Copyright (C) 2015-2023 by Mihai Moldovan * * * * This program is free software; you can redistribute 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "compat.h" #ifdef Q_OS_DARWIN /* * strndup() is not available on 10.6 and below, define a compat version here. * Shameless copy from libiberty. */ #if MAC_OS_X_VERSION_MIN_REQUIRED < 1070 #include #include #include char *strndup (const char *s, size_t n) { char *result; size_t len = strlen (s); if (n < len) { len = n; } result = (char *) malloc (len + 1); if (!result) { return (0); } result[len] = '\0'; return ((char *) memcpy (result, s, len)); } #endif /* MAC_OS_X_VERSION_MIN_REQUIRED */ #endif /* defined (Q_OS_DARWIN) */ x2goclient-4.1.2.3/src/compat.h0000644000000000000000000000346614447111614013062 0ustar /*************************************************************************** * Copyright (C) 2015-2023 by Mihai Moldovan * * * * This program is free software; you can redistribute 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef COMPAT_H #define COMPAT_H #include #ifdef Q_OS_DARWIN /* * strndup() is not available on 10.6 and below, define a compat version here. * Shameless copy from libiberty. */ #if MAC_OS_X_VERSION_MIN_REQUIRED < 1070 #include #include #include char *strndup (const char *s, size_t n); #endif /* MAC_OS_X_VERSION_MIN_REQUIRED */ #endif /* defined (Q_OS_DARWIN) */ #endif /* !defined (COMPAT_H) */ x2goclient-4.1.2.3/src/configdialog.cpp0000644000000000000000000006101414447111614014550 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include #include #include #include #include #include #include #include "x2gosettings.h" #include #include #include "onmainwindow.h" #include #include #include #include "configdialog.h" #include "x2gologdebug.h" #include "printwidget.h" #include #include #include "x2goclientconfig.h" #include "connectionwidget.h" #include "settingswidget.h" #include "mediawidget.h" #include "x2goutils.h" #if defined ( Q_OS_WIN) && defined (CFGCLIENT ) #include "xsettingswidget.h" #endif ConfigDialog::ConfigDialog ( QWidget * parent, Qt::WindowFlags f ) : QDialog ( parent,f ) { tabWidg=new QTabWidget ( this ); QVBoxLayout* ml=new QVBoxLayout ( this ); ml->addWidget ( tabWidg ); QWidget *fr=new QWidget ( this ); QVBoxLayout* frLay=new QVBoxLayout ( fr ); tabWidg->addTab ( fr,tr ( "General" ) ); embedMode= ( ( ONMainWindow* ) parent )->getEmbedMode(); X2goSettings st ( "settings" ); gbTrayIcon=new QGroupBox(tr("Display icon in system tray"),fr); frLay->addWidget(gbTrayIcon); gbTrayIcon->setCheckable(true); QHBoxLayout* grmainLay=new QHBoxLayout(gbTrayIcon); QFrame* frTray=new QFrame(gbTrayIcon); grmainLay->setMargin(0); grmainLay->addWidget(frTray); cbMinToTray=new QCheckBox(tr("Hide to system tray when minimized"),frTray); cbNoClose=new QCheckBox(tr("Hide to system tray when closed"),frTray); cbMinimizeTray=new QCheckBox(tr("Hide to system tray after connection is established"),frTray); cbMaxmizeTray=new QCheckBox(tr("Restore from system tray after session is disconnected"),frTray); QVBoxLayout* trLay=new QVBoxLayout(frTray); trLay->addWidget(cbMinToTray); trLay->addWidget(cbNoClose); trLay->addWidget(cbMinimizeTray); trLay->addWidget(cbMaxmizeTray); gbTrayIcon->setChecked ( st.setting()->value ( "trayicon/enabled", false ).toBool() ); cbMinimizeTray->setChecked ( st.setting()->value ( "trayicon/mincon", false ).toBool() ); cbMaxmizeTray->setChecked ( st.setting()->value ( "trayicon/maxdiscon", false ).toBool() ); cbNoClose->setChecked ( st.setting()->value ( "trayicon/noclose", false ).toBool() ); cbMinToTray->setChecked ( st.setting()->value ( "trayicon/mintotray", false ).toBool() ); #ifdef USELDAP if ( !embedMode ) { ONMainWindow* par= ( ONMainWindow* ) parent; gbLDAP=new QGroupBox ( tr ( "Use LDAP" ),fr ); gbLDAP->setCheckable(true); QHBoxLayout* grmainLay=new QHBoxLayout(gbLDAP); QFrame* frLdap=new QFrame(gbLDAP); grmainLay->setMargin(0); grmainLay->addWidget(frLdap); ldapServer=new QLineEdit ( frLdap ); port=new QSpinBox ( frLdap ); ldapBase=new QLineEdit ( frLdap ); port->setMaximum ( 1000000 ); QHBoxLayout *grLay=new QHBoxLayout ( frLdap ); QVBoxLayout *laiLay=new QVBoxLayout(); QVBoxLayout *setLay=new QVBoxLayout(); setLay->setSpacing ( 6 ); laiLay->setSpacing ( 6 ); grLay->setSpacing ( 20 ); grLay->addLayout ( laiLay ); grLay->addStretch(); grLay->addLayout ( setLay ); laiLay->addWidget ( new QLabel ( tr ( "Server URL:" ),frLdap) ); laiLay->addWidget ( new QLabel ( tr ( "BaseDN:" ),frLdap ) ); laiLay->addWidget ( new QLabel ( tr ( "Failover server 1 URL:" ),frLdap ) ); laiLay->addWidget ( new QLabel ( tr ( "Failover server 2 URL:" ),frLdap ) ); ldapServer1=new QLineEdit ( frLdap); port1=new QSpinBox ( frLdap ); ldapServer2=new QLineEdit ( frLdap ); port2=new QSpinBox ( frLdap ); port1->setMaximum ( 1000000 ); port2->setMaximum ( 1000000 ); QHBoxLayout* aLay=new QHBoxLayout(); aLay->setSpacing ( 3 ); aLay->addWidget ( new QLabel ( "ldap//:",frLdap ) ); aLay->addWidget ( ldapServer ); aLay->addWidget ( new QLabel ( ":",frLdap ) ); aLay->addWidget ( port ); QHBoxLayout* aLay1=new QHBoxLayout(); aLay1->setSpacing ( 3 ); aLay1->addWidget ( new QLabel ( "ldap//:",frLdap ) ); aLay1->addWidget ( ldapServer1 ); aLay1->addWidget ( new QLabel ( ":",frLdap ) ); aLay1->addWidget ( port1 ); QHBoxLayout* aLay2=new QHBoxLayout(); aLay2->setSpacing ( 3 ); aLay2->addWidget ( new QLabel ( "ldap//:",frLdap ) ); aLay2->addWidget ( ldapServer2 ); aLay2->addWidget ( new QLabel ( ":",frLdap ) ); aLay2->addWidget ( port2 ); setLay->addLayout ( aLay ); setLay->addWidget ( ldapBase ); setLay->addLayout ( aLay1 ); setLay->addLayout ( aLay2 ); gbLDAP->setChecked ( st.setting()->value ( "LDAP/useldap", ( QVariant ) par->retUseLdap() ).toBool() ); ldapServer->setText ( st.setting()->value ( "LDAP/server", ( QVariant ) par->retLdapServer() ).toString() ); port->setValue ( st.setting()->value ( "LDAP/port", ( QVariant ) par->retLdapPort() ).toInt() ); ldapServer1->setText ( st.setting()->value ( "LDAP/server1", ( QVariant ) par->retLdapServer1() ).toString() ); port1->setValue ( st.setting()->value ( "LDAP/port1", ( QVariant ) par->retLdapPort1() ).toInt() ); ldapServer2->setText ( st.setting()->value ( "LDAP/server2", ( QVariant ) par->retLdapServer2() ).toString() ); port2->setValue ( st.setting()->value ( "LDAP/port2", ( QVariant ) par->retLdapPort2() ).toInt() ); ldapBase->setText ( st.setting()->value ( "LDAP/basedn", ( QVariant ) par->retLdapDn() ).toString() ); frLdap->setEnabled ( gbLDAP->isChecked() ); frLay->addWidget ( gbLDAP ); connect ( gbLDAP,SIGNAL ( toggled ( bool ) ),frLdap, SLOT ( setEnabled ( bool ) ) ); connect ( gbLDAP,SIGNAL ( toggled ( bool ) ),this, SLOT ( slot_checkOkStat() ) ); connect ( ldapBase,SIGNAL ( textChanged ( const QString& ) ), this, SLOT ( slot_checkOkStat() ) ); connect ( ldapServer,SIGNAL ( textChanged ( const QString& ) ), this, SLOT ( slot_checkOkStat() ) ); } #endif //USELDAP #ifdef Q_OS_DARWIN QGroupBox* xgb=new QGroupBox ( tr ( "X.Org Server settings" ),fr ); QGridLayout *xLay=new QGridLayout ( xgb ); leXexec=new QLineEdit ( xgb ); leXexec->setReadOnly ( true ); pbOpenExec=new QPushButton ( QIcon ( ( ( ONMainWindow* ) parent )->iconsPath ( "/32x32/file-open.png" ) ), QString::null,xgb ); xLay->addWidget ( new QLabel ( tr ( "X11 application:" ) ),0,0 ); leCmdOpt=new QLineEdit ( xgb ); leCmdOpt->setReadOnly ( true ); QHBoxLayout* cmdLay=new QHBoxLayout(); cmdLay->addWidget ( leXexec ); cmdLay->addWidget ( pbOpenExec ); xLay->addLayout ( cmdLay,0,1 ); xLay->addWidget ( new QLabel ( tr ( "X11 version:" ) ),1,0 ); xLay->addWidget ( leCmdOpt,1,1 ); frLay->addWidget ( xgb ); QString xver; QString path=getXDarwinDirectory(); if ( path!="" ) { leXexec->setText ( findXDarwin ( xver,path ) ); leCmdOpt->setText ( xver ); } else slot_findXDarwin(); QPushButton* findButton=new QPushButton ( tr ( "Find X11 application" ),xgb ); xLay->addWidget ( findButton,2,1 ); connect ( findButton,SIGNAL ( clicked() ),this, SLOT ( slot_findXDarwin() ) ); connect ( pbOpenExec,SIGNAL ( clicked() ),this, SLOT ( slot_selectXDarwin() ) ); #endif //Q_OS_DARWIN if ( embedMode ) { cbStartEmbed=new QCheckBox ( tr ( "Start session embedded inside website" ) ,fr ); frLay->addWidget ( cbStartEmbed ); advancedOptions=new QPushButton ( tr ( "Advanced options" ) +" >>" , this ); connect ( advancedOptions,SIGNAL ( clicked() ),this, SLOT ( slotAdvClicked() ) ); advancedOptions->setVisible ( ( ( ONMainWindow* ) parent )-> getShowAdvOption() ); advOptionsShown=false; conWidg=new ConnectionWidget ( QString::null, ( ONMainWindow* ) parent,this ); setWidg=new SettingsWidget ( QString::null, ( ONMainWindow* ) parent,this ); mediaWidget=new MediaWidget ( QString::null, ( ONMainWindow* ) parent,this ); conWidg->hide(); setWidg->hide(); mediaWidget->hide(); X2goSettings st ( "sessions" ); cbStartEmbed->setChecked ( st.setting()->value ( "embedded/startembed", true ).toBool() ); } /* #ifdef Q_OS_WIN else { tabWidg->removeTab ( 0 ); } #endif*/ frLay->addStretch(); defaults=new QPushButton ( tr ( "Defaults" ),this ); ok=new QPushButton ( tr ( "&OK" ),this ); QPushButton* cancel=new QPushButton ( tr ( "&Cancel" ),this ); QHBoxLayout* bLay=new QHBoxLayout(); connect ( this,SIGNAL ( accepted() ),this,SLOT ( slot_accepted() ) ); connect ( ok,SIGNAL ( clicked() ),this,SLOT ( accept() ) ); connect ( cancel,SIGNAL ( clicked() ),this,SLOT ( reject() ) ); connect ( defaults,SIGNAL ( clicked() ),this, SLOT ( slotDefaults() ) ); bLay->setSpacing ( 5 ); if ( embedMode ) bLay->addWidget ( advancedOptions ); bLay->addStretch(); bLay->addWidget ( ok ); bLay->addWidget ( cancel ); bLay->addWidget ( defaults ); ml->addLayout ( bLay ); setSizeGripEnabled ( true ); setWindowIcon ( QIcon ( ( ( ONMainWindow* ) parent )->iconsPath ( "/32x32/edit_settings.png" ) ) ); setWindowTitle ( tr ( "Settings" ) ); pwid=new PrintWidget ( this ); tabWidg->addTab ( pwid,tr ( "Printing" ) ); #if defined ( Q_OS_WIN) && defined (CFGCLIENT ) xsetWidg=new XSettingsWidget(( ONMainWindow* ) parent, this); tabWidg->addTab(xsetWidg, tr("X.Org Server settings")); #endif #if defined (Q_OS_WIN) || defined (Q_OS_DARWIN) QFrame* frp = new QFrame (this); tabWidg->addTab (frp, tr ("PulseAudio settings")); QVBoxLayout* l = new QVBoxLayout (frp); cbDisablePA = new QCheckBox (tr ("Disable PulseAudio"), frp); cbNoRecord = new QCheckBox (tr ("Disable sound input"), frp); connect(cbDisablePA, SIGNAL(stateChanged(int)), this, SLOT(slot_cbDisablePAStateChanged(int))); l->addWidget (cbDisablePA); l->addWidget (cbNoRecord); l->addStretch (1); cbNoRecord->setChecked (st.setting ()->value ("pulse/norecord", false).toBool ()); cbDisablePA->setChecked (st.setting ()->value ("pulse/disable", false).toBool ()); ONMainWindow* par= ( ONMainWindow* ) parent; systemDisablePA=par->getSystemDisablePA(); systemDisablePARecord=par->getSystemDisablePARecord(); if(systemDisablePA) { cbDisablePA->setChecked(true); cbDisablePA->setEnabled(false); } if(systemDisablePARecord) { cbNoRecord->setChecked(true); cbNoRecord->setEnabled(false); } #endif /* defined (Q_OS_WIN) || defined (Q_OS_DARWIN) */ } ConfigDialog::~ConfigDialog() {} void ConfigDialog::slot_accepted() { X2goSettings st ( "settings" ); st.setting()->setValue ( "trayicon/enabled", gbTrayIcon->isChecked() ); st.setting()->setValue ( "trayicon/mintotray", cbMinToTray->isChecked() ); st.setting()->setValue ( "trayicon/noclose", cbNoClose->isChecked() ); st.setting()->setValue ( "trayicon/mincon", cbMinimizeTray->isChecked() ); st.setting()->setValue ( "trayicon/maxdiscon", cbMaxmizeTray->isChecked() ); #if defined (Q_OS_WIN) || defined (Q_OS_DARWIN) if(!systemDisablePARecord) st.setting()->setValue ( "pulse/norecord", cbNoRecord->isChecked() ); if(!systemDisablePA) st.setting()->setValue ( "pulse/disable", cbDisablePA->isChecked() ); #endif /* defined (Q_OS_WIN) || defined (Q_OS_DARWIN) */ #ifdef USELDAP if ( !embedMode ) { st.setting()->setValue ( "LDAP/useldap", ( QVariant ) gbLDAP->isChecked() ); st.setting()->setValue ( "LDAP/port", ( QVariant ) port->value() ); if ( ldapServer->text().length() ) st.setting()->setValue ( "LDAP/server", ( QVariant ) ldapServer->text() ); st.setting()->setValue ( "LDAP/port1", ( QVariant ) port1->value() ); if ( ldapServer1->text().length() ) st.setting()->setValue ( "LDAP/server1", ( QVariant ) ldapServer1->text() ); st.setting()->setValue ( "LDAP/port2", ( QVariant ) port2->value() ); if ( ldapServer2->text().length() ) st.setting()->setValue ( "LDAP/server2", ( QVariant ) ldapServer2->text() ); if ( ldapBase->text().length() ) st.setting()->setValue ( "LDAP/basedn", ( QVariant ) ldapBase->text() ); } #endif //USELDAP #ifdef Q_OS_DARWIN st.setting()->setValue ( "xdarwin/directory", ( QVariant ) leXexec->text() ); #endif pwid->saveSettings(); if ( embedMode ) { X2goSettings st ( "sessions" ); st.setting()->setValue ( "embedded/startembed", ( QVariant ) cbStartEmbed->isChecked() ); st.setting()->sync(); setWidg->saveSettings(); mediaWidget->saveSettings(); conWidg->saveSettings(); } #if defined (Q_OS_WIN) && defined (CFGCLIENT) xsetWidg->saveSettings(); #endif } void ConfigDialog::slot_checkOkStat() { ok->setEnabled ( ( !gbLDAP->isChecked() ) || ( ( ldapBase->text().length() && ldapServer->text().length() ) ) ); } #ifdef Q_OS_WIN QString ConfigDialog::getCygwinDir ( const QString& dir ) { QString cygdir=QString::null; QSettings lu_st ( "HKEY_CURRENT_USER\\Software" "\\Cygnus Solutions\\Cygwin\\mounts v2\\"+ dir,QSettings::NativeFormat ); cygdir=lu_st.value ( "native", ( QVariant ) QString::null ).toString(); if ( cygdir!= QString::null ) return cygdir; QSettings lm_st ( "HKEY_LOCAL_MACHINE\\SOFTWARE" "\\Cygnus Solutions\\Cygwin\\mounts v2\\"+ dir,QSettings::NativeFormat ); return lm_st.value ( "native", ( QVariant ) QString::null ).toString(); } #endif #ifdef Q_OS_DARWIN QString ConfigDialog::retMaxXDarwinVersion ( QString v1, QString v2 ) { QStringList vl1=v1.split ( "." ); QStringList vl2=v2.split ( "." ); for ( int i=0; i<3; ++i ) { if ( vl1.count() vl2[i].toInt() ) ?v1:v2; } return v1; } QString ConfigDialog::findXDarwin ( QString& version, QString path ) { if (path.isEmpty ()) { QStringList locations; locations << "/Applications/Utilities/XQuartz.app" << "/usr/X11/X11.app" << "/Applications/MacPorts/X11.app"; QStringList versions; QStringList::const_iterator const_it; for (const_it = locations.constBegin (); const_it != locations.constEnd (); ++const_it) { QFile info_plist (*const_it + "/Contents/Info.plist"); if (info_plist.exists ()) { QSettings settings (info_plist.fileName (), QSettings::NativeFormat); versions << settings.value ("CFBundleShortVersionString", (QVariant) "0.0.0").toString (); } else { versions << QString ("0.0.0"); } } QString max_ver = QString (); std::size_t max_idx = 0; if (locations.size () < 1) { version = QString ("0.0.0"); return (QString ()); } else if (locations.size () == 1) { max_ver = versions.at (0); max_idx = 0; } else { max_ver = versions.at (0); max_idx = 0; for (std::size_t i = 1; i < static_cast (locations.size ()); ++i) { QString cur_ver = versions.at (i); if (retMaxXDarwinVersion (max_ver, cur_ver).compare (cur_ver) == 0) { max_ver = cur_ver; max_idx = i; } } } version = max_ver; if (max_ver.compare (QString ("0.0.0")) == 0) { return (QString ()); } else { return (locations.at (max_idx)); } } else { version = "0.0.0"; if (QFile::exists (path + "/Contents/Info.plist")) { QSettings vst (path + "/Contents/Info.plist", QSettings::NativeFormat); version=vst.value ("CFBundleShortVersionString", (QVariant) "0.0.0").toString (); } else { path = QString (); } return path; } } void ConfigDialog::slot_findXDarwin () { QString version; QString path = findXDarwin (version); if (path.isEmpty ()) { show_XQuartz_not_found_error (); } else { QString minVer = "2.1.0"; if (retMaxXDarwinVersion (minVer, version) == minVer) { printXDarwinVersionWarning (version); } leXexec->setText (path); leCmdOpt->setText (version); } } void ConfigDialog::printXDarwinVersionWarning (QString version) { show_RichText_WarningMsgBox (tr ("Your XQuartz version is too old."), tr ("Your are using XQuartz (X Window System Server for OS X) version %1.").arg (version) + "\n\n" + tr ("This version causes problems with X applications in 24bit " "color mode.\n" "You should update your X11 environment.\n\n" "MacPorts users please follow the steps outlined on:\n" "

" "https://guide.macports.org/chunked/using.common-tasks.html" "
\n\n" "Users who have installed XQuartz via the installer package\n" "can find updated versions on:\n" "
" "https://www.xquartz.org/" "
")); } void ConfigDialog::slot_selectXDarwin () { QString newDir = QFileDialog::getOpenFileName (this, QString (), leXexec->text () + "/.."); QString version; if (newDir.length () > 0) { findXDarwin (version, newDir); if (version.compare (QString ("0.0.0")) == 0) { show_RichText_WarningMsgBox (tr ("No valid XQuartz application selected."), tr ("You did not select a valid XQuartz application.\n" "Please try again.\n\n" "Some standard installation locations may be:\n" "
/Applications/Utilities/X11.app
\n" "
/Applications/Utilities/XQuartz.app
\n" "
/Applications/MacPorts/X11.app
")); } else { QString minVer = "2.1.0"; if (retMaxXDarwinVersion (minVer, version) == minVer) { printXDarwinVersionWarning (version); } leXexec->setText (newDir); leCmdOpt->setText (version); } } } QString ConfigDialog::getXDarwinDirectory() { X2goSettings st ("settings"); return st.setting()->value ( "xdarwin/directory", ( QVariant ) "" ).toString() ; } #endif #if defined (Q_OS_WIN) || defined (Q_OS_DARWIN) void ConfigDialog::slot_cbDisablePAStateChanged(int state) { cbNoRecord->setEnabled(state==Qt::Unchecked); if(systemDisablePARecord) { cbNoRecord->setChecked(true); cbNoRecord->setEnabled(false); } } #endif /* defined (Q_OS_WIN) || defined (Q_OS_DARWIN) */ void ConfigDialog::slotAdvClicked() { if ( advOptionsShown ) { advancedOptions->setText ( tr ( "Advanced options" ) +" >>" ); conWidg->hide(); setWidg->hide(); mediaWidget->hide(); conWidg->setParent ( this ); setWidg->setParent ( this ); mediaWidget->setParent (this); tabWidg->removeTab ( 4 ); tabWidg->removeTab ( 3 ); tabWidg->removeTab ( 2 ); } else { tabWidg->addTab ( conWidg,tr ( "&Connection" ) ); tabWidg->addTab ( setWidg, tr ( "&Input/Output" ) ); tabWidg->addTab ( mediaWidget, tr ( "&Media" ) ); advancedOptions->setText ( tr ( "Advanced options" ) +" <<" ); } advOptionsShown=!advOptionsShown; } void ConfigDialog::slotDefaults() { switch ( tabWidg->currentIndex() ) { #ifdef Q_OS_WIN case 3: { if(!systemDisablePARecord) cbNoRecord->setChecked(false); if(!systemDisablePA) cbDisablePA->setChecked(false); } break; #endif /* defined (Q_OS_WIN) */ case 0: { if ( embedMode ) cbStartEmbed->setChecked ( true ); clientSshPort->setValue ( 22 ); #ifdef Q_OS_DARWIN cbNoRecord->setChecked (false); cbDisablePA->setChecked (false); #endif /* defined (Q_OS_DARWIN) */ gbTrayIcon->setChecked (false); cbMinimizeTray->setChecked (false); cbMaxmizeTray->setChecked ( false); cbNoClose->setChecked (false); cbMinToTray->setChecked (false); } break; #if defined (Q_OS_WIN) && defined (CFGCLIENT) case 2: { xsetWidg->setDefaults(); } break; #else case 1: break; case 2: { conWidg->setDefaults(); } break; case 3: { setWidg->setDefaults(); } break; case 4: { mediaWidget->setDefaults(); } break; #endif } } x2goclient-4.1.2.3/src/configdialog.h0000644000000000000000000000736314447111614014224 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef CONFIGDIALOG_H #define CONFIGDIALOG_H #include "x2goclientconfig.h" #include class QLineEdit; class QCheckBox; class QSpinBox; class QPushButton; class QRadioButton; class QButtonGroup; class PrintWidget; class ConnectionWidget; class SettingsWidget; class MediaWidget; class QTabWidget; class QGroupBox; #if defined (Q_OS_WIN) && defined (CFGCLIENT ) class XSettingsWidget; #endif /** @author Oleksandr Shneyder */ class ConfigDialog : public QDialog { Q_OBJECT public: ConfigDialog ( QWidget * parent, Qt::WindowFlags f = 0 ); ~ConfigDialog(); #ifdef Q_OS_DARWIN static QString findXDarwin ( QString& version, QString path="" ); static QString retMaxXDarwinVersion ( QString v1, QString v2 ); static QString getXDarwinDirectory(); void printXDarwinVersionWarning ( QString version ); #endif #ifdef Q_OS_WIN static QString getCygwinDir ( const QString& dir ); #endif private: QTabWidget* tabWidg; QCheckBox* cbStartEmbed; QLineEdit* ldapBase; QLineEdit* ldapServer; QSpinBox* port; QLineEdit* ldapServer1; QSpinBox* port1; PrintWidget* pwid; QLineEdit* ldapServer2; bool embedMode; QSpinBox* port2; QSpinBox* clientSshPort; QPushButton* ok; bool advOptionsShown; QGroupBox* gbLDAP; QPushButton* defaults; QPushButton* advancedOptions; QLineEdit* leXexec; QLineEdit* leCmdOpt; QSpinBox* sbDisp; QLineEdit* leXexecDir; QRadioButton* rbX[3]; QPushButton* pbOpenExec; QButtonGroup* bgRadio; ConnectionWidget* conWidg; SettingsWidget* setWidg; MediaWidget* mediaWidget; #if defined (Q_OS_WIN) && defined (CFGCLIENT) XSettingsWidget* xsetWidg; #endif #if defined (Q_OS_WIN) || defined (Q_OS_DARWIN) QCheckBox *cbNoRecord; QCheckBox *cbDisablePA; bool systemDisablePA; bool systemDisablePARecord; #endif /* defined (Q_OS_WIN) || defined (Q_OS_DARWIN) */ QGroupBox *gbTrayIcon; QCheckBox *cbMinimizeTray; QCheckBox *cbMaxmizeTray; QCheckBox *cbNoClose; QCheckBox *cbMinToTray; public slots: void slot_accepted(); void slot_checkOkStat(); private slots: #ifdef Q_OS_DARWIN void slot_selectXDarwin(); void slot_findXDarwin(); #endif #if defined (Q_OS_WIN) || defined (Q_OS_DARWIN) void slot_cbDisablePAStateChanged(int state); #endif /* defined (Q_OS_WIN) || defined (Q_OS_DARWIN) */ private slots: void slotAdvClicked(); void slotDefaults(); }; #endif x2goclient-4.1.2.3/src/configwidget.cpp0000644000000000000000000000307314447111614014575 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include "configwidget.h" #include "onmainwindow.h" ConfigWidget::ConfigWidget ( QString id, ONMainWindow * mw, QWidget * parent, Qt::WindowFlags f ) : QFrame ( parent,f ) { sessionId=id; mainWindow=mw; miniMode=mw->retMiniMode(); embedMode = mw->getEmbedMode(); if(embedMode) sessionId="embedded"; } ConfigWidget::~ConfigWidget() { } x2goclient-4.1.2.3/src/configwidget.h0000644000000000000000000000323614447111614014243 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef CONFIGWIDGET_H #define CONFIGWIDGET_H #include #include "x2goclientconfig.h" /** @author Oleksandr Shneyder */ class ONMainWindow; class ConfigWidget : public QFrame { public: ConfigWidget ( QString id, ONMainWindow * mv, QWidget * parent = 0, Qt::WindowFlags f = 0 ); ~ConfigWidget(); protected: bool miniMode; bool embedMode; QString sessionId; ONMainWindow* mainWindow; }; #endif x2goclient-4.1.2.3/src/connectionwidget.cpp0000644000000000000000000001253614447111614015473 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include "connectionwidget.h" #include #include #include #include #include #include #include #include #include "x2gosettings.h" #include #include #include #include "onmainwindow.h" ConnectionWidget::ConnectionWidget ( QString id, ONMainWindow * mw, QWidget * parent, Qt::WindowFlags f ) : ConfigWidget ( id,mw,parent,f ) { QVBoxLayout *connLay=new QVBoxLayout ( this ); QGroupBox* netSpd=new QGroupBox ( tr ( "&Connection speed" ),this ); QVBoxLayout *spdLay=new QVBoxLayout ( netSpd ); spd=new QSlider ( Qt::Horizontal,netSpd ); spd->setMinimum ( 0 ); spd->setMaximum ( 4 ); spd->setTickPosition ( QSlider::TicksBelow ); spd->setTickInterval ( 1 ); spd->setSingleStep ( 1 ); spd->setPageStep ( 1 ); QHBoxLayout *tickLay=new QHBoxLayout(); QHBoxLayout *slideLay=new QHBoxLayout(); slideLay->addWidget ( spd ); QLabel* mlab= new QLabel ( "MODEM",netSpd ); tickLay->addWidget ( mlab ); tickLay->addStretch(); tickLay->addWidget ( new QLabel ( "ISDN",netSpd ) ); tickLay->addStretch(); tickLay->addWidget ( new QLabel ( "ADSL",netSpd ) ); tickLay->addStretch(); tickLay->addWidget ( new QLabel ( "WAN",netSpd ) ); tickLay->addStretch(); tickLay->addWidget ( new QLabel ( "LAN",netSpd ) ); spdLay->addLayout ( slideLay ); spdLay->addLayout ( tickLay ); QFontMetrics fm ( mlab->font() ); slideLay->insertSpacing ( 0,fm.width ( "MODEM" ) /2 ); slideLay->addSpacing ( fm.width ( "LAN" ) /2 ); QGroupBox* compr=new QGroupBox ( tr ( "C&ompression" ),this ); QHBoxLayout* comprLay=new QHBoxLayout ( compr ); packMethode = new QComboBox ( this ); quali= new QSpinBox ( this ); quali->setRange ( 0,9 ); QVBoxLayout* colLay=new QVBoxLayout(); QVBoxLayout* cowLay=new QVBoxLayout(); QHBoxLayout* spbl=new QHBoxLayout(); colLay->addWidget ( new QLabel ( tr ( "Method:" ),compr ) ); colLay->addWidget ( qualiLabel=new QLabel ( tr ( "Image quality:" ), compr ) ); cowLay->addWidget ( packMethode ); spbl->addWidget ( quali ); spbl->addStretch(); cowLay->addLayout ( spbl ); comprLay->addLayout ( colLay ); comprLay->addLayout ( cowLay ); connLay->addWidget ( netSpd ); connLay->addWidget ( compr ); connLay->addStretch(); connect ( packMethode,SIGNAL ( activated ( const QString& ) ),this, SLOT ( slot_changePack ( const QString& ) ) ); readConfig(); } ConnectionWidget::~ConnectionWidget() { } void ConnectionWidget::loadPackMethods() { QFile file ( ":/txt/packs" ); if ( !file.open ( QIODevice::ReadOnly | QIODevice::Text ) ) return; QTextStream in ( &file ); while ( !in.atEnd() ) { QString pc=in.readLine(); if ( pc.indexOf ( "-%" ) !=-1 ) { pc=pc.left ( pc.indexOf ( "-%" ) ); qualiList<addItem ( pc ); } file.close(); } void ConnectionWidget::slot_changePack ( const QString& pc ) { bool ct=qualiList.contains ( pc ); quali->setEnabled ( ct ); qualiLabel->setEnabled ( ct ); } void ConnectionWidget::readConfig() { loadPackMethods(); X2goSettings st ( "sessions" ); spd->setValue ( st.setting()->value ( sessionId+"/speed", ( QVariant ) mainWindow->getDefaultLink() ).toInt() ); QString mt=st.setting()->value ( sessionId+"/pack", ( QVariant ) mainWindow->getDefaultPack() ).toString(); packMethode->setCurrentIndex ( packMethode->findText ( mt ) ); quali->setValue ( st.setting()->value ( sessionId+"/quality", mainWindow->getDefaultQuality() ).toInt() ); slot_changePack ( mt ); } void ConnectionWidget::setDefaults() { spd->setValue ( 2 ); packMethode->setCurrentIndex ( packMethode->findText ( "16m-jpeg" ) ); quali->setValue ( 9 ); slot_changePack ( "16m-jpeg" ); } void ConnectionWidget::saveSettings() { X2goSettings st ( "sessions" ); st.setting()->setValue ( sessionId+"/speed", ( QVariant ) spd->value() ); st.setting()->setValue ( sessionId+"/pack", ( QVariant ) packMethode->currentText() ); st.setting()->setValue ( sessionId+"/quality", ( QVariant ) quali->value() ); st.setting()->sync(); } x2goclient-4.1.2.3/src/connectionwidget.h0000644000000000000000000000375314447111614015141 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef CONNECTIONWIDGET_H #define CONNECTIONWIDGET_H #include "configwidget.h" #include /** @author Oleksandr Shneyder */ class QPushButton; class QLabel; class QSlider; class QStringList; class ONMainWindow; class QComboBox; class QSpinBox; class ConnectionWidget : public ConfigWidget { Q_OBJECT public: ConnectionWidget ( QString id, ONMainWindow * mw, QWidget * parent=0, Qt::WindowFlags f=0 ); ~ConnectionWidget(); void setDefaults(); void saveSettings(); private slots: void slot_changePack ( const QString& pc ); private: void loadPackMethods(); private: QLabel* qualiLabel; QSlider *spd; QStringList qualiList; QComboBox* packMethode; QSpinBox* quali; private: void readConfig(); }; #endif x2goclient-4.1.2.3/src/contest.cpp0000644000000000000000000001235614447111614013607 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include "contest.h" #include "x2gologdebug.h" #include #include "httpbrokerclient.h" #include ConTest::ConTest(HttpBrokerClient* broker, QUrl url, QWidget* parent, Qt::WindowFlags f): QDialog(parent, f) { socket=0l; setupUi(this); this->broker=broker; brokerUrl=url; timer=new QTimer(this); connect(timer,SIGNAL(timeout()),this,SLOT(slotTimer())); connect(broker,SIGNAL(connectionTime(int,int)),this, SLOT(slotConSpeed(int,int))); start(); } ConTest::~ConTest() { } void ConTest::resetSocket() { if (socket) { socket->disconnectFromHost(); socket->close(); delete socket; socket=0l; } } void ConTest::reset() { timer->stop(); lhttps->setText(""); lssh->setText(""); lspeed->setText(""); prhttps->setValue(0); prspeed->setValue(0); prssh->setValue(0); httpsOk=false; resetSocket(); buttonBox->button(QDialogButtonBox::Retry)->setEnabled(false); } void ConTest::start() { reset(); testConnection(HTTPS); } void ConTest::testConnection(tests test) { time=0; timer->start(100); resetSocket(); currentTest=test; if (test==SPEED) { if (!httpsOk) { slotConSpeed(1,0); return; } broker->testConnection(); return; } socket=new QTcpSocket(this); socket->connectToHost(brokerUrl.host(),test); connect( socket,SIGNAL(connected()),this,SLOT(slotConnected())); connect( socket, SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(slotError(QAbstractSocket::SocketError))); } void ConTest::slotConnected() { x2goDebug<<"connected\n"; timer->stop(); QPalette pal=lhttps->palette(); pal.setColor(QPalette::WindowText, Qt::green); switch (currentTest) { case HTTPS: prhttps->setValue(100); lhttps->setText(tr("OK")); lhttps->setPalette(pal); httpsOk=true; testConnection(SSH); break; case SSH: prssh->setValue(100); lssh->setText(tr("OK")); lssh->setPalette(pal); testConnection(SPEED); break; default: break; } } void ConTest::slotConSpeed(int msecElapsed, int bytesRecived) { timer->stop(); prspeed->setValue(100); double sec=msecElapsed/1000.; int KB=bytesRecived/1024; int Kbsec=(int)(KB/sec)*8; QPalette pal=lspeed->palette(); pal.setColor(QPalette::WindowText, Qt::green); if (Kbsec<1000) pal.setColor(QPalette::WindowText, Qt::yellow); if (Kbsec<512) pal.setColor(QPalette::WindowText, Qt::red); lspeed->setPalette(pal); lspeed->setText(QString::number(Kbsec)+" Kb/s"); buttonBox->button(QDialogButtonBox::Retry)->setEnabled(true); } void ConTest::slotError(QAbstractSocket::SocketError socketError) { QString error; if (socketError==QAbstractSocket::SocketTimeoutError) error=tr("Socket operation timed out."); else error=socket->errorString(); x2goDebug<<"Error: "<stop(); QPalette pal=lhttps->palette(); pal.setColor(QPalette::WindowText, Qt::red); switch (currentTest) { case HTTPS: prhttps->setValue(100); lhttps->setText(tr("Failed: ")+error); lhttps->setPalette(pal); testConnection(SSH); break; case SSH: prssh->setValue(100); lssh->setText(tr("Failed: ")+error); lssh->setPalette(pal); testConnection(SPEED); break; default: break; } } void ConTest::slotTimer() { time++; if (time>150) { if (currentTest==SSH || currentTest==HTTPS) { socket->close(); slotError(QAbstractSocket::SocketTimeoutError); } } QProgressBar* bar=0l; switch (currentTest) { case SSH: bar=prssh; break; case HTTPS: bar=prhttps; break; case SPEED: bar=prspeed; break; } if (bar->value()==100) bar->setValue(0); else bar->setValue(bar->value()+10); } x2goclient-4.1.2.3/src/contest.h0000644000000000000000000000406314447111614013250 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef CONTEST_H #define CONTEST_H #include #include "ui_contest.h" #include #include class HttpBrokerClient; class QTcpSocket; class QTimer; class ConTest : public QDialog, public Ui_ConTest { Q_OBJECT public: ConTest(HttpBrokerClient* broker, QUrl url, QWidget* parent = 0, Qt::WindowFlags f = 0); virtual ~ConTest(); private: enum tests {SSH=22,HTTPS=443,SPEED} currentTest; void reset(); void testConnection(tests test); void resetSocket(); private slots: void slotConnected(); void slotError(QAbstractSocket::SocketError socketError); void slotTimer(); void slotConSpeed(int msecElapsed, int bytesRecived); private: HttpBrokerClient* broker; QUrl brokerUrl; QTcpSocket* socket; QTimer* timer; int time; bool httpsOk; public slots: void start(); }; #endif // CONTEST_H x2goclient-4.1.2.3/src/cupsprint.cpp0000644000000000000000000002425214447111614014155 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include "cupsprint.h" #ifndef Q_OS_WIN #include "x2gologdebug.h" #include "x2gosettings.h" #include CUPSPrint::CUPSPrint() { ppd=0l; num_dests= cupsGetDests ( &dests ); } CUPSPrint::~CUPSPrint() { cupsFreeDests ( num_dests, dests ); if ( ppd ) ppdClose ( ppd ); ppd=0l; } QStringList CUPSPrint::getPrinters() { QStringList printers; for ( int i=0;ivalue ( "CUPS/defaultprinter","" ). toString(); if ( defPrint.length() >0 ) { cups_dest_t *dest = cupsGetDest ( defPrint.toLatin1(), 0l, num_dests, dests ); if ( dest ) return defPrint; } cups_dest_t *dest = cupsGetDest ( 0l, 0l, num_dests, dests ); if ( dest ) defPrint=dest->name; return defPrint; } void CUPSPrint::setDefaultUserPrinter ( QString printer ) { X2goSettings st ( "printing" ); st.setting()->setValue ( "CUPS/defaultprinter", QVariant ( printer ) ); } bool CUPSPrint::getPrinterInfo ( const QString& printerName, QString& info, bool& acceptJobs, QString& location, QString& model, printState& state, QString& stateReason ) { cups_dest_t *dest = cupsGetDest ( printerName.toLatin1(), 0l, num_dests, dests ); if ( !dest ) return false; acceptJobs=qstrcmp ( cupsGetOption ( "printer-is-accepting-jobs", dest->num_options, dest->options ),"0" ); info=QString::fromLocal8Bit ( cupsGetOption ( "printer-info", dest->num_options, dest->options ) ); location=QString::fromLocal8Bit ( cupsGetOption ( "printer-location", dest->num_options, dest->options ) ); model=QString::fromLocal8Bit ( cupsGetOption ( "printer-make-and-model", dest->num_options, dest->options ) ); QString st=cupsGetOption ( "printer-state", dest->num_options, dest->options ); state=NDEF; if ( st=="3" ) state=IDLE; if ( st=="4" ) state=PRINTING; if ( st=="5" ) state=STOPPED; stateReason=QString::fromLocal8Bit ( cupsGetOption ( "printer-state-reasons", dest->num_options, dest->options ) ); return true; } bool CUPSPrint::setCurrentPrinter ( QString prn ) { currentPrinter=prn; QString fl=cupsGetPPD ( prn.toLatin1() ); if ( fl.length() <=0 ) return false; if ( ppd ) ppdClose ( ppd ); ppd=0l; ppd=ppdOpenFile ( fl.toLatin1() ); unlink ( fl.toLatin1() ); if ( ppd==0l ) return false; ppdMarkDefaults ( ppd ); loadUserOptions(); if ( ppdConflicts ( ppd ) !=0 ) { x2goDebug<<"There are conflicting options in user settings,\n" "loading defaults"<defchoice ); if ( !choice ) return false; } value=QString::fromLocal8Bit ( choice->choice ); valueText=QString::fromLocal8Bit ( choice->text ); // x2goDebug<<"getValue:"<num_choices;++k ) { ppd_choice_t* choice=& ( opt->choices[k] ); if ( choice->marked ) { cur_val=values.size(); } //if no choice is marked, return default if ( !qstrcmp ( choice->choice,opt->defchoice ) && cur_val==-1 ) { cur_val=values.size(); } values<choice ); descriptions<text ); } return cur_val; } int CUPSPrint::getOptionGroups ( QStringList& names, QStringList& texts ) { names.clear(); texts.clear(); if ( !ppd ) return -1; for ( int i=0;inum_groups;++i ) { ppd_group_t* group=& ( ppd->groups[i] ); names<name ); texts<text ); } return names.size(); } int CUPSPrint::getOptionsList ( const QString& groupName, QStringList& names, QStringList& texts ) { names.clear(); texts.clear(); if ( !ppd ) return -1; for ( int i=0;inum_groups;++i ) { ppd_group_t* group=& ( ppd->groups[i] ); if ( groupName.length() >0 && groupName != QString::fromLocal8Bit ( group->name ) ) continue; for ( int j=0;jnum_options;++j ) { ppd_option_t* option=& ( group->options[j] ); names<keyword ); texts<text ); } } return names.size(); } bool CUPSPrint::setValue ( const QString& option, const QString& value, QString& conflict_opt, QString& conflict_val ) { if ( !ppd ) return false; int conflictsBefore= ppdConflicts ( ppd ); QString valueBefore, textBefore; if ( !getOptionValue ( option,valueBefore,textBefore ) ) return false; ppdMarkOption ( ppd,option.toLatin1(),value.toLatin1() ); if ( conflictsBefore==ppdConflicts ( ppd ) ) { return true; } //find conflicting option for ( int i=0;inum_consts;++i ) { QString confOpt,confVal; if ( option==ppd->consts[i].option1 && value==ppd->consts[i].choice1 ) { confOpt=ppd->consts[i].option2; confVal=ppd->consts[i].choice2; } else if ( option==ppd->consts[i].option2 && value==ppd->consts[i].choice2 ) { confOpt=ppd->consts[i].option1; confVal=ppd->consts[i].choice1; } else continue; QString selectedValue, selectedText; if ( getOptionValue ( confOpt,selectedValue,selectedText ) ) { if ( selectedValue==confVal ) { //conflicting option/choice found conflict_val=confVal; conflict_opt=confOpt; break; } } } //set previous value ppdMarkOption ( ppd,option.toLatin1(),valueBefore.toLatin1() ); return false; } bool CUPSPrint::getOptionText ( const QString& option, QString& text ) { if ( !ppd ) return false; ppd_option_t* opt=ppdFindOption ( ppd,option.toLatin1() ); if ( !opt ) return false; text=QString::fromLocal8Bit ( opt->text ); return true; } void CUPSPrint::setDefaults() { //don't use ppdMarkDefaults here //ppdMarkDefaults do not unmark //already marked choices if ( !ppd ) return; for ( int i=0;inum_groups;++i ) { ppd_group_t* group=& ( ppd->groups[i] ); for ( int j=0;jnum_options;++j ) { ppd_option_t* option=& ( group->options[j] ); ppdMarkOption ( ppd,option->keyword,option->defchoice ); } } } void CUPSPrint::saveOptions() { if ( !ppd ) return; X2goSettings st( "printing" ); QStringList options; for ( int i=0;inum_groups;++i ) { ppd_group_t* group=& ( ppd->groups[i] ); for ( int j=0;jnum_options;++j ) { ppd_option_t* option=& ( group->options[j] ); QString val,valtext; if ( !getOptionValue ( option->keyword,val,valtext ) ) continue; //something is wrong here if ( val!=option->defchoice ) { QString opt=option->keyword; opt+="="+val; options<setValue ( "CUPS/options/"+currentPrinter, QVariant ( options ) ); } void CUPSPrint::loadUserOptions() { X2goSettings st ( "printing" ); QStringList options=st.setting()->value ( "CUPS/options/"+currentPrinter ).toStringList(); for ( int i=0;i #include #include CUPSPrinterSettingsDialog::CUPSPrinterSettingsDialog ( QString prnName, CUPSPrint* cupsObject, QWidget * parent, Qt::WindowFlags flags ) :QDialog ( parent, flags ) { m_cups=cupsObject; printer=prnName; ui.setupUi ( this ); setWindowTitle ( prnName ); QList sz; sz<<250<<100; ui.splitter->setSizes ( sz ); if ( !m_cups->setCurrentPrinter ( printer ) ) { //message here close(); } setGeneralTab(); setPPDTab(); connect ( ( QObject* ) ( ui.buttonBox->button ( QDialogButtonBox::RestoreDefaults ) ), SIGNAL ( clicked() ),this,SLOT ( slot_restoreDefaults() ) ); connect ( ( QObject* ) ( ui.buttonBox->button ( QDialogButtonBox::Save ) ), SIGNAL ( clicked() ),this,SLOT ( slot_saveOptions() ) ); connect ( ( QObject* ) ( ui.buttonBox->button ( QDialogButtonBox::Cancel ) ), SIGNAL ( clicked() ),this,SLOT ( reject() ) ); connect ( ( QObject* ) ( ui.buttonBox->button ( QDialogButtonBox::Ok ) ), SIGNAL ( clicked() ),this,SLOT ( slot_ok() ) ); } CUPSPrinterSettingsDialog::~CUPSPrinterSettingsDialog() { } void CUPSPrinterSettingsDialog::setCbBox ( QComboBox* cb, QString optionKeyword ) { QStringList values; QStringList descriptions; int cur_val=m_cups->getOptionValues ( optionKeyword, values,descriptions ); if ( cur_val==-1 ) cb->setEnabled ( false ); else { cb->addItems ( descriptions ); cb->setCurrentIndex ( cur_val ); } } void CUPSPrinterSettingsDialog::slot_optionSelected ( QTreeWidgetItem * current, QTreeWidgetItem * ) { ui.optionsTree->clear(); if ( current ) if ( current->childCount() ==0 ) { ui.gbOptions->setTitle ( current->text ( 0 ) ); QStringList valueNames, valueTexts; int selectedValue=m_cups-> getOptionValues ( current->text ( 2 ), valueNames,valueTexts ); for ( int i=0;isetText ( 0,valueTexts[i] ); ritem->setText ( 1,valueNames[i] ); if ( i==selectedValue ) ui.optionsTree->setCurrentItem ( ritem ); } return; } ui.gbOptions->setTitle ( tr ( "No option selected" ) ); } void CUPSPrinterSettingsDialog::slot_valueSelected ( QTreeWidgetItem * current, QTreeWidgetItem * ) { if ( !current ) return; QTreeWidgetItem* optionItem=ui.ppdTree->currentItem(); QString option=optionItem->text ( 2 ); QString newVal=current->text ( 1 ); QString prevVal,prevText; m_cups->getOptionValue ( option,prevVal,prevText ); if ( prevVal==newVal ) return; //we need change current item //do it outside this function setNewValue ( option,newVal ) ; QTimer::singleShot ( 1, this, SLOT ( slot_reloadValues() ) ); m_cups->getOptionValue ( option,prevVal,prevText ); optionItem->setText ( 1,prevText ); optionItem->setText ( 3,prevVal ); setGeneralTab(); } void CUPSPrinterSettingsDialog::setGeneralTab() { disconnect ( ui.cbPageSize,SIGNAL ( currentIndexChanged ( int ) ), this,SLOT ( slot_changePSize ( int ) ) ); disconnect ( ui.cbMediaType,SIGNAL ( currentIndexChanged ( int ) ), this,SLOT ( slot_changePType ( int ) ) ); disconnect ( ui.cbInputSlot,SIGNAL ( currentIndexChanged ( int ) ), this,SLOT ( slot_changeISlot ( int ) ) ); disconnect ( ui.rbNone,SIGNAL ( clicked ( ) ), this,SLOT ( slot_changeDuplex() ) ); disconnect ( ui.rbShort,SIGNAL ( clicked ( ) ), this,SLOT ( slot_changeDuplex() ) ); disconnect ( ui.rbLong,SIGNAL ( clicked ( ) ), this,SLOT ( slot_changeDuplex() ) ); ui.cbPageSize->clear(); ui.cbMediaType->clear(); ui.cbInputSlot->clear(); setCbBox ( ui.cbPageSize,"PageSize" ); setCbBox ( ui.cbMediaType,"MediaType" ); setCbBox ( ui.cbInputSlot,"InputSlot" ); QString valueName, valueText; ui.rbNone->setChecked ( true ); if ( m_cups->getOptionValue ( "Duplex",valueName,valueText ) ) { if ( valueName=="DuplexTumble" ) ui.rbShort->setChecked ( true ); if ( valueName=="DuplexNoTumble" ) ui.rbLong->setChecked ( true ); } else ui.gbDuplex->setEnabled ( false ); connect ( ui.cbPageSize,SIGNAL ( currentIndexChanged ( int ) ), this,SLOT ( slot_changePSize ( int ) ) ); connect ( ui.cbMediaType,SIGNAL ( currentIndexChanged ( int ) ), this,SLOT ( slot_changePType ( int ) ) ); connect ( ui.cbInputSlot,SIGNAL ( currentIndexChanged ( int ) ), this,SLOT ( slot_changeISlot ( int ) ) ); connect ( ui.rbNone,SIGNAL ( clicked ( ) ), this,SLOT ( slot_changeDuplex() ) ); connect ( ui.rbShort,SIGNAL ( clicked ( ) ), this,SLOT ( slot_changeDuplex() ) ); connect ( ui.rbLong,SIGNAL ( clicked ( ) ), this,SLOT ( slot_changeDuplex() ) ); } void CUPSPrinterSettingsDialog::setPPDTab() { disconnect ( ui.ppdTree, SIGNAL ( currentItemChanged ( QTreeWidgetItem*, QTreeWidgetItem* ) ), this, SLOT ( slot_optionSelected ( QTreeWidgetItem*, QTreeWidgetItem* ) ) ); disconnect ( ui.optionsTree, SIGNAL ( currentItemChanged ( QTreeWidgetItem*, QTreeWidgetItem* ) ), this, SLOT ( slot_valueSelected ( QTreeWidgetItem*, QTreeWidgetItem* ) ) ); QString info; bool acceptJobs; QString location; QString model; CUPSPrint::printState state; QString stateReason; QString valueName,valueText; UNUSED (m_cups->getPrinterInfo (printer, info, acceptJobs, location, model, state, stateReason)); ui.ppdTree->clear(); QTreeWidgetItem* ritem=new QTreeWidgetItem ( ( QTreeWidgetItem* ) 0, QTreeWidgetItem::Type ) ; ritem->setText ( 0,model ); ui.ppdTree->addTopLevelItem ( ritem ); QStringList grName, grText; m_cups->getOptionGroups ( grName,grText ); for ( int i=0;isetText ( 0,grText[i] ); gritem->setText ( 2,grName[i] ); QStringList optName, optText; m_cups->getOptionsList ( grName[i],optName,optText ); for ( int j=0;jsetText ( 0,optText[j] ); optitem->setText ( 2,optName[j] ); m_cups->getOptionValue ( optName[j],valueName, valueText ); optitem->setText ( 1,valueText ); optitem->setText ( 3,valueName ); } } ui.ppdTree->expandAll(); ui.ppdTree->header()->resizeSections ( QHeaderView::ResizeToContents ); slot_optionSelected ( ritem,0l ); connect ( ui.ppdTree, SIGNAL ( currentItemChanged ( QTreeWidgetItem*, QTreeWidgetItem* ) ), this, SLOT ( slot_optionSelected ( QTreeWidgetItem*, QTreeWidgetItem* ) ) ); connect ( ui.optionsTree, SIGNAL ( currentItemChanged ( QTreeWidgetItem*, QTreeWidgetItem* ) ), this, SLOT ( slot_valueSelected ( QTreeWidgetItem*, QTreeWidgetItem* ) ) ); } bool CUPSPrinterSettingsDialog::setNewValue ( const QString& option, const QString& value ) { QString confVal,confOpt; bool res=m_cups->setValue ( option,value,confOpt,confVal ); if ( !res ) { QString textMessage= tr ( "This value is in conflict with another option." ); QString txt; m_cups->getOptionText ( confOpt,txt ); QString val,valt; m_cups->getOptionValue ( confOpt,val,valt ); if ( confOpt.length() >0 &&confVal.length() >0 ) { textMessage+="\n("+txt+" : "+valt+")"; } QMessageBox::critical ( this,tr ( "Options conflict." ), textMessage ); } return res; } void CUPSPrinterSettingsDialog::slot_reloadValues() { if ( ui.ppdTree->currentItem() ) slot_optionSelected ( ui.ppdTree->currentItem(),0l ); QTreeWidgetItemIterator it ( ui.ppdTree ); while ( *it ) { if ( ( *it )->childCount() ==0 ) { QString opt= ( *it )->text ( 2 ); QString nval,ntext; m_cups->getOptionValue ( opt,nval,ntext ); if ( ( *it )->text ( 3 ) != nval ) ( *it )->setText ( 1,ntext ); ( *it )->setText ( 3,nval ); } ++it; } } void CUPSPrinterSettingsDialog::slot_changePSize ( int ind ) { changeFromCbBox ( "PageSize",ind ); } void CUPSPrinterSettingsDialog::slot_changePType ( int ind ) { changeFromCbBox ( "MediaType",ind ); } void CUPSPrinterSettingsDialog::slot_changeISlot ( int ind ) { changeFromCbBox ( "InputSlot",ind ); } void CUPSPrinterSettingsDialog::changeFromCbBox ( const QString& opt, int id ) { QStringList vals,texts; m_cups->getOptionValues ( opt,vals,texts ); if ( vals.size() isChecked() ) { changeGeneralOption ( "Duplex","DuplexTumble" ); } if ( ui.rbLong->isChecked() ) { changeGeneralOption ( "Duplex","DuplexNoTumble" ); } if ( ui.rbNone->isChecked() ) { changeGeneralOption ( "Duplex","None" ); } } void CUPSPrinterSettingsDialog::changeGeneralOption ( const QString& option, const QString& val ) { if ( !setNewValue ( option,val ) ) QTimer::singleShot ( 1, this, SLOT ( setGeneralTab() ) ); slot_reloadValues(); } void CUPSPrinterSettingsDialog::slot_restoreDefaults() { m_cups->setDefaults(); setGeneralTab(); slot_reloadValues(); } void CUPSPrinterSettingsDialog::slot_saveOptions() { m_cups->saveOptions(); } void CUPSPrinterSettingsDialog::slot_ok() { m_cups->saveOptions(); accept(); } #endif x2goclient-4.1.2.3/src/cupsprintersettingsdialog.h0000644000000000000000000000526214447111614017112 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef CUPSPRINTERSETTINGSDIALOG_H #define CUPSPRINTERSETTINGSDIALOG_H #include "x2goclientconfig.h" #ifndef Q_OS_WIN #include #include "ui_cupsprintsettingsdialog.h" /** @author Oleksandr Shneyder */ class CUPSPrint; class CUPSPrinterSettingsDialog : public QDialog { Q_OBJECT public: enum tabs{GENERAL,PPD}; CUPSPrinterSettingsDialog ( QString prnName, CUPSPrint* cupsObject, QWidget * parent=0l, Qt::WindowFlags flags =0 ); ~CUPSPrinterSettingsDialog(); private: CUPSPrint* m_cups; Ui::CupsPrinterSettingsDialog ui; QString printer; private: void setCbBox ( QComboBox* cb, QString optionKeyword ); void setPPDTab(); bool setNewValue ( const QString& option, const QString& value ); void changeFromCbBox ( const QString& opt, int id ); void changeGeneralOption ( const QString& option, const QString& val ); private slots: void slot_optionSelected ( QTreeWidgetItem * current, QTreeWidgetItem * previous ); void slot_valueSelected ( QTreeWidgetItem * current, QTreeWidgetItem * previous ); void slot_reloadValues(); void slot_changePSize ( int ind ); void slot_changePType ( int ind ); void slot_changeISlot ( int ind ); void slot_changeDuplex(); void setGeneralTab(); void slot_restoreDefaults(); void slot_saveOptions(); void slot_ok(); }; #endif #endif x2goclient-4.1.2.3/src/cupsprint.h0000644000000000000000000000537514447111614013627 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef CUPSPRINT_H #define CUPSPRINT_H #include "x2goclientconfig.h" #ifndef Q_OS_WIN #include #include #include /** @author Oleksandr Shneyder */ class CUPSPrint { public: enum printState {NDEF,IDLE,PRINTING,STOPPED}; CUPSPrint(); ~CUPSPrint(); void setDefaultUserPrinter ( QString printer ); QString getDefaultUserPrinter(); QStringList getPrinters(); bool getPrinterInfo ( const QString& printerName, QString& info, bool& acceptJobs, QString& location, QString& model, printState& state, QString& stateReason ); bool setCurrentPrinter ( QString ); bool getOptionValue ( const QString& option, QString& value, QString& valueText ); int getOptionValues ( const QString& option, QStringList& values, QStringList& descriptions ); int getOptionGroups ( QStringList& names, QStringList& texts ); int getOptionsList ( const QString& group, QStringList& names, QStringList& texts ); bool setValue ( const QString& option, const QString& value, QString& conflict_opt, QString& conflict_val ); bool getOptionText ( const QString& option, QString& text ); void setDefaults(); void saveOptions(); void print ( const QString& file, QString title="" ); private: cups_dest_t *dests; int num_dests; ppd_file_t *ppd; QString currentPrinter; private: void loadUserOptions(); }; #endif #endif x2goclient-4.1.2.3/src/cupsprintwidget.cpp0000644000000000000000000000631614447111614015362 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include "cupsprint.h" #include "cupsprintwidget.h" #ifndef Q_OS_WIN #include "x2gologdebug.h" #include "cupsprintersettingsdialog.h" CUPSPrintWidget::CUPSPrintWidget ( QWidget* parent ) : QWidget ( parent ) { m_cups=new CUPSPrint; ui.setupUi ( this ); ui.cbPrinters->addItems ( m_cups->getPrinters() ); int defind=ui.cbPrinters->findText ( m_cups->getDefaultUserPrinter() ); if ( defind!=-1 ) { ui.cbPrinters->setCurrentIndex ( defind ); slot_printerSelected ( defind ); } connect ( ui.cbPrinters, SIGNAL ( currentIndexChanged ( int ) ), this,SLOT ( slot_printerSelected ( int ) ) ) ; connect ( ui.pbProps, SIGNAL ( clicked() ), this, SLOT ( slot_printerSettings() ) ); } CUPSPrintWidget::~CUPSPrintWidget() { delete m_cups; } void CUPSPrintWidget::slot_printerSelected ( int index ) { if ( index == -1 ) return; QString info; bool acceptJobs; QString location; QString model; CUPSPrint::printState state; QString stateReason; if ( !m_cups->getPrinterInfo ( ui.cbPrinters->currentText(), info,acceptJobs, location,model,state,stateReason ) ) return; QString stText; switch ( state ) { case CUPSPrint::IDLE: stText=tr ( "Idle" ); break; case CUPSPrint::PRINTING: stText=tr ( "Printing" ); break; case CUPSPrint::STOPPED: stText=tr ( "Stopped" ); break; default: break; } if ( stateReason.length() >0 && stateReason != "none" ) stText+= " ("+stateReason+")"; ui.lState->setText ( stText ); ( acceptJobs ) ?ui.lJAccept->setText ( tr ( "Yes" ) ) :ui.lJAccept->setText ( tr ( "No" ) ); ui.lType->setText ( info ); ui.lLocation->setText ( location ); ui.lComment->setText ( model ); } void CUPSPrintWidget::slot_printerSettings() { CUPSPrinterSettingsDialog dlg ( ui.cbPrinters->currentText(), m_cups,this ); dlg.exec(); } void CUPSPrintWidget::savePrinter() { m_cups->setDefaultUserPrinter ( ui.cbPrinters->currentText() ); } #endif x2goclient-4.1.2.3/src/cupsprintwidget.h0000644000000000000000000000336514447111614015030 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef CUPSPRINTWIDGET_H #define CUPSPRINTWIDGET_H #include #include "x2goclientconfig.h" #ifndef Q_OS_WIN #include "cupsprint.h" #include "ui_cupsprintwidget.h" /** @author Oleksandr Shneyder */ class CUPSPrintWidget : public QWidget { Q_OBJECT public: CUPSPrintWidget ( QWidget* parent =0 ); ~CUPSPrintWidget(); void savePrinter(); private: CUPSPrint* m_cups; Ui::CUPSPrintWidget ui; private slots: void slot_printerSelected ( int index ); void slot_printerSettings(); }; #endif #endif x2goclient-4.1.2.3/src/editconnectiondialog.cpp0000644000000000000000000001157214447111614016314 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include "editconnectiondialog.h" #include "x2goclientconfig.h" #include "x2gologdebug.h" #include "onmainwindow.h" #include #include #include "sessionwidget.h" #include "sharewidget.h" #include "connectionwidget.h" #include "settingswidget.h" #include "mediawidget.h" EditConnectionDialog::EditConnectionDialog ( bool newSession, QString id, QWidget * par, int ind,Qt::WindowFlags f ) : QDialog ( par,f ) { QVBoxLayout* ml=new QVBoxLayout ( this ); fr=new QTabWidget ( this ); ml->addWidget ( fr ); ONMainWindow* parent= ( ONMainWindow* ) par; QFont fnt=font(); if ( parent->retMiniMode() ) fnt.setPointSize ( 9 ); setFont ( fnt ); sessSet=new SessionWidget ( newSession, id,parent ); conSet=new ConnectionWidget ( id,parent ); otherSet=new SettingsWidget ( id,parent ); mediaSet=new MediaWidget ( id,parent ); exportDir=new ShareWidget ( id,parent ); fr->addTab ( sessSet,tr ( "&Session" ) ); fr->addTab ( conSet,tr ( "&Connection" ) ); fr->addTab ( otherSet,tr ( "&Input/Output" ) ); fr->addTab ( mediaSet,tr ( "&Media" ) ); if (! parent->getHideFolderSharing()) fr->addTab ( exportDir,tr ( "&Shared folders" ) ); QPushButton* ok=new QPushButton ( tr ( "&OK" ),this ); QPushButton* cancel=new QPushButton ( tr ( "&Cancel" ),this ); QPushButton* def=new QPushButton ( tr ( "Defaults" ),this ); QHBoxLayout* bLay=new QHBoxLayout(); bLay->setSpacing ( 5 ); bLay->addStretch(); bLay->addWidget ( ok ); bLay->addWidget ( cancel ); bLay->addWidget ( def ); ml->addLayout ( bLay ); setSizeGripEnabled ( true ); setWindowIcon ( QIcon ( parent->iconsPath ( "/32x32/edit.png" ) ) ); connect ( ok,SIGNAL ( clicked() ),this,SLOT ( accept() ) ); connect ( cancel,SIGNAL ( clicked() ),this,SLOT ( reject() ) ); connect ( def,SIGNAL ( clicked() ),this,SLOT ( slot_default() ) ); connect ( sessSet,SIGNAL ( nameChanged ( const QString & ) ),this, SLOT ( slot_changeCaption ( const QString& ) ) ); connect ( this,SIGNAL ( accepted() ),this,SLOT ( slot_accepted() ) ); #ifdef Q_OS_LINUX connect (sessSet, SIGNAL(directRDP(bool,bool)), this, SLOT(slot_directRDP(bool,bool))); connect (sessSet, SIGNAL(settingsChanged(QString,QString,QString)), otherSet, SLOT(setServerSettings(QString,QString,QString))); #endif ok->setDefault ( true ); if ( parent->retMiniMode() ) setContentsMargins ( 3,3,3,3 ); fr->setCurrentIndex ( ind ); slot_changeCaption(sessSet->sessionName()); #ifdef Q_OS_LINUX sessSet->slot_rdpDirectClicked(); #endif } EditConnectionDialog::~EditConnectionDialog() {} void EditConnectionDialog::slot_changeCaption ( const QString& newName ) { setWindowTitle ( tr ( "Session preferences - " ) +newName ); } void EditConnectionDialog::slot_accepted() { conSet->saveSettings(); exportDir->saveSettings(); otherSet->saveSettings(); mediaSet->saveSettings(); sessSet->saveSettings(); } void EditConnectionDialog::slot_default() { switch ( fr->currentIndex() ) { case 0: { sessSet->setDefaults(); } break; case 1: { conSet->setDefaults(); } break; case 2: { otherSet->setDefaults(); } break; case 3: { mediaSet->setDefaults(); } break; case 4: { exportDir->setDefaults(); } break; } } #ifdef Q_OS_LINUX void EditConnectionDialog::slot_directRDP(bool direct, bool isXDMCP) { fr->setTabEnabled(1,!direct); fr->setTabEnabled(3,!direct); fr->setTabEnabled(4,!direct); otherSet->setDirectRdp(direct, isXDMCP); } #endif x2goclient-4.1.2.3/src/editconnectiondialog.h0000644000000000000000000000447714447111614015767 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef EDITCONNECTIONDIALOG_H #define EDITCONNECTIONDIALOG_H #include "x2goclientconfig.h" #include #include class QLineEdit; class QPushButton; class QCheckBox; class QSpinBox; class QComboBox; class QRadioButton; class QSlider; class QLabel; class QTabWidget; class ONMainWindow; class QStandardItemModel; class QTreeView; /** @author Oleksandr Shneyder */ class SessionWidget; class ConnectionWidget; class SettingsWidget; class MediaWidget; class ShareWidget; class EditConnectionDialog : public QDialog { Q_OBJECT public: EditConnectionDialog ( bool newSession, QString id, QWidget * par, int ind=0, Qt::WindowFlags f = 0 ); ~EditConnectionDialog(); private: QTabWidget *fr; SessionWidget* sessSet; ConnectionWidget* conSet; SettingsWidget* otherSet; MediaWidget* mediaSet; ShareWidget* exportDir; private slots: void slot_changeCaption ( const QString& newName ); void slot_accepted(); void slot_default(); #ifdef Q_OS_LINUX void slot_directRDP(bool direct, bool isXDMCP); #endif }; #endif x2goclient-4.1.2.3/src/exportdialog.cpp0000644000000000000000000001323014447111614014621 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include "x2goclientconfig.h" #include "exportdialog.h" #include "editconnectiondialog.h" #include #include #include #include #include "x2gosettings.h" #include #include #include #include #include "sessionbutton.h" #include "onmainwindow.h" #include #include "sessionexplorer.h" ExportDialog::ExportDialog ( QString sid,QWidget * par, Qt::WindowFlags f ) : QDialog ( par,f ) { sessionId=sid; QVBoxLayout* ml=new QVBoxLayout ( this ); QFrame *fr=new QFrame ( this ); QHBoxLayout* frLay=new QHBoxLayout ( fr ); parent= ( ONMainWindow* ) par; QPushButton* cancel=new QPushButton ( tr ( "&Cancel" ),this ); QHBoxLayout* bLay=new QHBoxLayout(); sessions=new QListView ( fr ); frLay->addWidget ( sessions ); exportDir=new QPushButton ( tr ( "&share" ),fr ); editSession=new QPushButton ( tr ( "&Preferences ..." ),fr ); newDir=new QPushButton ( tr ( "&Custom folder ..." ),fr ); if(X2goSettings::centralSettings()) { editSession->setEnabled(false); editSession->setVisible(false); } QVBoxLayout* actLay=new QVBoxLayout(); actLay->addWidget ( exportDir ); actLay->addWidget ( editSession ); actLay->addWidget ( newDir ); actLay->addStretch(); frLay->addLayout ( actLay ); QShortcut* sc=new QShortcut ( QKeySequence ( tr ( "Delete","Delete" ) ), this ); connect ( cancel,SIGNAL ( clicked() ),this,SLOT ( close() ) ); connect ( sc,SIGNAL ( activated() ),exportDir,SIGNAL ( clicked() ) ); connect ( editSession,SIGNAL ( clicked() ),this,SLOT ( slot_edit() ) ); connect ( newDir,SIGNAL ( clicked() ),this,SLOT ( slotNew() ) ); connect ( exportDir,SIGNAL ( clicked() ),this,SLOT ( slot_accept() ) ); bLay->setSpacing ( 5 ); bLay->addStretch(); bLay->addWidget ( cancel ); ml->addWidget ( fr ); ml->addLayout ( bLay ); fr->setFrameStyle ( QFrame::StyledPanel | QFrame::Raised ); fr->setLineWidth ( 2 ); setSizeGripEnabled ( true ); setWindowTitle ( tr ( "Share Folders" ) ); connect ( sessions,SIGNAL ( clicked ( const QModelIndex& ) ), this,SLOT ( slot_activated ( const QModelIndex& ) ) ); connect ( sessions,SIGNAL ( doubleClicked ( const QModelIndex& ) ), this,SLOT ( slot_dclicked ( const QModelIndex& ) ) ); loadSessions(); } ExportDialog::~ExportDialog() {} void ExportDialog::loadSessions() { QStringListModel *model= ( QStringListModel* ) sessions->model(); if ( !model ) model=new QStringListModel(); sessions->setModel ( model ); QStringList dirs; model->setStringList ( dirs ); X2goSettings st ( "sessions" ); QString exports=st.setting()->value ( sessionId+"/export", ( QVariant ) QString::null ).toString(); QStringList lst=exports.split ( ";",QString::SkipEmptyParts ); for ( int i=0; isetStringList ( dirs ); // removeSession->setEnabled(false); exportDir->setEnabled ( false ); sessions->setEditTriggers ( QAbstractItemView::NoEditTriggers ); } void ExportDialog::slot_activated ( const QModelIndex& ) { // removeSession->setEnabled(true); exportDir->setEnabled ( true ); } void ExportDialog::slot_dclicked ( const QModelIndex& ) { slot_accept(); } void ExportDialog::slotNew() { directory=QString::null; directory= QFileDialog::getExistingDirectory ( this, tr ( "Select folder" ), QDir::homePath() ); if ( directory!=QString::null ) accept(); } void ExportDialog::slot_edit() { const QList* sess=parent->getSessionExplorer()->getSessionsList(); for ( int i=0; i< sess->size(); ++i ) { if ( sess->at ( i )->id() ==sessionId ) { parent->getSessionExplorer()->exportsEdit ( sess->at ( i ) ); break; } } loadSessions(); } void ExportDialog::slot_accept() { int ind=sessions->currentIndex().row(); if ( ind<0 ) return; QStringListModel *model= ( QStringListModel* ) sessions->model(); directory=model->stringList() [ind]; accept(); } x2goclient-4.1.2.3/src/exportdialog.h0000644000000000000000000000402114447111614014264 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef EXPORTDIALOG_H #define EXPORTDIALOG_H #include "x2goclientconfig.h" #include class QListView; class QPushButton; class QModelIndex; class ONMainWindow; /** @author Oleksandr Shneyder */ class ExportDialog : public QDialog { Q_OBJECT public: ExportDialog(QString sid,QWidget * par, Qt::WindowFlags f = 0); ~ExportDialog(); QString getExport(){return directory;} private: QListView* sessions; QPushButton* editSession; QPushButton* exportDir; QPushButton* newDir; QString directory; ONMainWindow* parent; void loadSessions(); QString sessionId; private slots: void slot_activated(const QModelIndex& index); void slotNew(); void slot_edit(); void slot_dclicked(const QModelIndex& index); void slot_accept(); }; #endif x2goclient-4.1.2.3/src/folderbutton.cpp0000644000000000000000000001251714447111614014636 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include "folderbutton.h" #include "x2goclientconfig.h" #include "x2goutils.h" #include #include #include #include "x2gosettings.h" #include #include #include #include "onmainwindow.h" #include "x2gologdebug.h" #include #include #include "sessionexplorer.h" #include FolderButton::FolderButton ( ONMainWindow* mw,QWidget *parent, QString folderPath, QString folderName ) : SVGFrame ( mw->images_resource_path("/svg/folder.svg"),false,parent ) { QPalette pal=palette(); pal.setColor ( QPalette::Active, QPalette::WindowText, QPalette::Mid ); pal.setColor ( QPalette::Active, QPalette::ButtonText, QPalette::Mid ); pal.setColor ( QPalette::Active, QPalette::Text, QPalette::Mid ); pal.setColor ( QPalette::Inactive, QPalette::WindowText, QPalette::Mid ); pal.setColor ( QPalette::Inactive, QPalette::ButtonText, QPalette::Mid ); pal.setColor ( QPalette::Inactive, QPalette::Text, QPalette::Mid ); setPalette(pal); path=folderPath; name=folderName; QFont fnt=font(); if ( mw->retMiniMode() ) fnt.setPointSize ( 9 ); setFont ( fnt ); setFocusPolicy ( Qt::NoFocus ); bool miniMode=mw->retMiniMode(); if ( !miniMode ) setFixedSize ( 340,190 ); else setFixedSize ( 250,145 ); par= mw; connect ( this,SIGNAL ( clicked() ),this,SLOT ( slotClicked() ) ); nameLabel=new QLabel ( this ); description=tr("Sessions folder"); setChildrenList(QStringList() ); icon=new QLabel ( this ); nameLabel->setWordWrap(true); nameLabel->setTextInteractionFlags(Qt::NoTextInteraction); icon->move ( 10,25 ); if ( !miniMode ) { nameLabel->move ( 80,34 ); nameLabel->setFixedSize(235,135); } else { nameLabel->move ( 64,18 ); nameLabel->setFixedSize(170,120); } loadIcon(); } FolderButton::~FolderButton() {} void FolderButton::loadIcon() { X2goSettings *st; if (par->getBrokerMode()) st=new X2goSettings(par->getConfig()->iniFile,QSettings::IniFormat); else st= new X2goSettings( "sessions" ); QPixmap* pix=new QPixmap(); QString normPath=(path+"/"+name).split("/",QString::SkipEmptyParts).join("::"); QString picURL=st->setting()->value ( "icon_"+normPath, ( QVariant )QString()).toString(); if(picURL.indexOf("file://")!=-1) { //load icon from file URL pix->load(picURL.replace("file://","")); } else { pix->loadFromData(QByteArray::fromBase64( picURL.toLocal8Bit())); } if(pix->isNull()) { //loading icon has failed, load default icon pix->load(par->iconsPath("/128x128/folder.png")); } bool miniMode=par->retMiniMode(); if ( !miniMode ) { icon->setPixmap ( pix->scaled ( 64,64,Qt::IgnoreAspectRatio, Qt::SmoothTransformation ) ); } else { icon->setPixmap ( pix->scaled ( 48,48,Qt::IgnoreAspectRatio, Qt::SmoothTransformation ) ); } delete pix; } void FolderButton::slotClicked() { emit folderSelected ( this ); } bool FolderButton::lessThen ( const FolderButton* b1, const FolderButton* b2 ) { return b1->name.toLower().localeAwareCompare ( b2->name.toLower() ) <0; } void FolderButton::mousePressEvent ( QMouseEvent * event ) { SVGFrame::mousePressEvent ( event ); loadBg ( par->images_resource_path("/svg/folder_grey.svg" )); } void FolderButton::mouseReleaseEvent ( QMouseEvent * event ) { SVGFrame::mouseReleaseEvent ( event ); int x=event->x(); int y=event->y(); loadBg ( par->images_resource_path("/svg/folder.svg")); if ( x>=0 && x< width() && y>=0 && y"; if(description.length()>0) { text+="
("+description+")"; } if(children.count()) { text+="

"+children.join(", ")+"

"; } nameLabel->setText(text); } x2goclient-4.1.2.3/src/folderbutton.h0000644000000000000000000000467014447111614014304 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef FOLDERBUTTON_H #define FOLDERBUTTON_H #include "SVGFrame.h" #include #include class ONMainWindow; class QComboBox; class QPushButton; /** @author Oleksandr Shneyder */ class FolderButton : public SVGFrame { Q_OBJECT public: FolderButton ( ONMainWindow* mw, QWidget* parent, QString folderPath, QString folderName ); ~FolderButton(); const QPixmap* folderIcon() { return icon->pixmap(); } static bool lessThen ( const FolderButton* b1, const FolderButton* b2 ); QString getName() { return name; } QString getPath() { return path; } void setPath(QString path) { this->path=path; } void setName(QString name) { this->name=name; } void loadIcon(); void setChildrenList(QStringList children); private: QString path; QString name; QString description; QLabel* nameLabel; QLabel* icon; ONMainWindow* par; private slots: void slotClicked(); signals: void folderSelected ( FolderButton* ); void clicked(); protected: virtual void mousePressEvent ( QMouseEvent * event ); virtual void mouseReleaseEvent ( QMouseEvent * event ); }; #endif x2goclient-4.1.2.3/src/folderexplorer.cpp0000644000000000000000000001363214447111614015162 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include "folderexplorer.h" #include "x2gologdebug.h" #include "sessionexplorer.h" #include "folderbutton.h" #include "onmainwindow.h" #include #include #include #include FolderExplorer::FolderExplorer(QString path, SessionExplorer* explorer, ONMainWindow* mainw):QDialog((QWidget*)mainw) { setupUi(this); mw=(ONMainWindow*)mainw; this->explorer=explorer; root=new QTreeWidgetItem(treeWidget); root->setText(0,"/"); // root->setIcon(0,QIcon(mw->iconsPath("/128x128/folder.png"))); currentPath=path; initFolders(root, ""); root->setExpanded(true); if(currentPath=="/") root->setSelected(true); root->setData(0,Qt::UserRole, "/"); } void FolderExplorer::initFolders(QTreeWidgetItem* parent, QString path) { FolderButton* b; foreach(b, *(explorer->getFoldersList())) { if(b->getPath()==path) { QTreeWidgetItem* it=new QTreeWidgetItem(parent); it->setText(0,b->getName()); it->setIcon(0, QIcon(*(b->folderIcon()))); QString normPath=(b->getPath()+"/"+b->getName()).split("/",QString::SkipEmptyParts).join("/"); it->setData(0,Qt::UserRole, normPath+"/"); if(normPath+"/"==currentPath) { it->setSelected(true); QTreeWidgetItem* p=it->parent(); while(p!=root) { p->setExpanded(true); p=p->parent(); } } initFolders(it, normPath); } } } void FolderExplorer::slotContextMenu(QPoint p) { menuItem=treeWidget->itemAt(p); if(!menuItem) return; QMenu menu(treeWidget); connect(menu.addAction(tr("Create New Folder")), SIGNAL(triggered(bool)), this, SLOT(slotNewFolder())); if(menuItem!=root) { connect(menu.addAction(tr("Rename Folder ...")), SIGNAL(triggered(bool)), this, SLOT(slotChangeName())); connect(menu.addAction(tr("Change Icon ...")), SIGNAL(triggered(bool)), this, SLOT(slotChangeIcon())); connect(menu.addAction(tr("Delete Folder ...")), SIGNAL(triggered(bool)), this, SLOT(slotDeleteFolder())); } menu.exec(treeWidget->viewport()->mapToGlobal(p)); } void FolderExplorer::slotItemSelected(QTreeWidgetItem* it, int) { currentPath=it->data(0,Qt::UserRole).toString(); } void FolderExplorer::slotChangeIcon() { QString path= QFileDialog::getOpenFileName ( this, tr ( "Open picture" ), QDir::homePath(), tr ( "Pictures" ) +" (*.png *.xpm *.jpg)" ); if ( path!=QString::null ) { explorer->setFolderIcon(menuItem->data(0, Qt::UserRole).toString(), path); menuItem->setIcon(0, QIcon(path)); } } void FolderExplorer::slotChangeName() { bool ok; QString oldPath=menuItem->data(0,Qt::UserRole).toString(); QStringList parts=oldPath.split("/",QString::SkipEmptyParts); QString text = QInputDialog::getText(this, tr("X2Go Client"), tr("Folder Name:"), QLineEdit::Normal, parts.last(), &ok); if (ok && !text.isEmpty()) { menuItem->setText(0,text); parts.pop_back(); parts<setData(0,Qt::UserRole, currentPath); explorer->renameFolder(oldPath, currentPath); } } void FolderExplorer::slotDeleteFolder() { if(!explorer->isFolderEmpty(menuItem->data(0, Qt::UserRole).toString())) { QMessageBox::critical(this, tr("Error"), tr("Unable to remove \"")+menuItem->text(0)+ tr("\". Folder is not empty. Please remove the contents of this directory and try again.")); return; } if(QMessageBox::question(this, "X2Go Client", tr("Delete folder \"")+menuItem->text(0)+"\"?",QMessageBox::Ok|QMessageBox::Cancel) == QMessageBox::Ok) { explorer->deleteFolder(menuItem->data(0, Qt::UserRole).toString()); currentPath="/"; delete menuItem; } } void FolderExplorer::slotNewFolder() { QTreeWidgetItem* it=new QTreeWidgetItem(menuItem); QString name=tr("New Folder"); it->setText(0,name); it->setIcon(0, QIcon(mw->iconsPath("/128x128/folder.png"))); QString normPath=(menuItem->data(0,Qt::UserRole).toString()+"/"+name).split("/",QString::SkipEmptyParts).join("/"); it->setData(0,Qt::UserRole, normPath+"/"); treeWidget->clearSelection(); it->setSelected(true); QTreeWidgetItem* p=it->parent(); while(p!=root) { p->setExpanded(true); p=p->parent(); } slotItemSelected(it,0); explorer->createNewFolder(normPath); } x2goclient-4.1.2.3/src/folderexplorer.h0000644000000000000000000000372114447111614014625 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef FOLDEREXPLORER_H #define FOLDEREXPLORER_H #include "ui_folderexplorer.h" class SessionExplorer; class ONMainWindow; class FolderExplorer: public QDialog, Ui_FolderExplorer { Q_OBJECT public: FolderExplorer(QString path, SessionExplorer* explorer, ONMainWindow* mainw); QString getCurrentPath() { return currentPath; } private: SessionExplorer* explorer; QTreeWidgetItem* root; QTreeWidgetItem* menuItem; ONMainWindow* mw; QString currentPath; void initFolders(QTreeWidgetItem* parent, QString path); private slots: void slotContextMenu(QPoint p); void slotItemSelected(QTreeWidgetItem* it, int); void slotNewFolder(); void slotChangeName(); void slotChangeIcon(); void slotDeleteFolder(); }; #endif x2goclient-4.1.2.3/src/help.cpp0000644000000000000000000004417014447111614013057 0ustar /******************************************************************************** * Copyright (C) 2015-2023 by Mihai Moldovan +49 721 14595728 * * * * This program is free software; you can redistribute 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ********************************************************************************/ #include "x2goclientconfig.h" #include #include #include #include #include #include #include #include /* For terminal size. */ #ifdef Q_OS_WIN /* winsock2.h is not really needed, but including it silences a compile warning... */ #include #include #elif defined (Q_OS_UNIX) #include #include #endif #include "help.h" #include "version.h" #include "x2gologdebug.h" #include "onmainwindow.h" #include "x2goutils.h" help::prelude_t help::cleanup_prelude (help::prelude_t prelude) { for (help::prelude_t::iterator it = prelude.begin (); it != prelude.end (); ++it) { *it = (*it).trimmed (); } return (prelude); } help::params_t help::cleanup_params (help::params_t params) { for (help::params_t::iterator it = params.begin (); it != params.end (); ++it) { (*it).first = (*it).first.trimmed (); (*it).second = (*it).second.trimmed (); } return (params); } help::prelude_t help::build_prelude () { help::prelude_t ret; QStringList args = QCoreApplication::arguments (); QString ver ("X2Go Client " + QString (VERSION)); if (QFile::exists (":/txt/git-info")) { QFile file (":/txt/git-info"); if (file.open (QIODevice::ReadOnly | QIODevice::Text)) { QTextStream stream (&file); QString git_info (stream.readAll ().trimmed ()); git_info = git_changelog_extract_commit_sha (git_info); if (!(git_info.isEmpty ())) { ver.append (" (Git information: " + git_info + ")"); } } } ret.append (ver); ret.append ("Usage: " + QString (args.at (0)) + " [OPTION]..."); ret.append ("Options:"); ret.append (""); return (ret); } help::params_t help::build_params () { params_t ret; # define ADD_OPT(param, desc) do { ret.append (params_elem_t (param, qApp->translate ("Help", desc))); } while (0) # define NEWLINE "\n" ADD_OPT ("--help", QT_TRANSLATE_NOOP ("Help", "Shows this message.")); ADD_OPT ("--version", QT_TRANSLATE_NOOP ("Help", "Prints version information.")); if (QFile::exists (":/txt/changelog")) { ADD_OPT ("--changelog", QT_TRANSLATE_NOOP ("Help", "Shows the changelog.")); } if (QFile::exists (":/txt/git-info")) { ADD_OPT ("--git-info", QT_TRANSLATE_NOOP ("Help", "Shows git information as used at compile time. [Deprecated: please use --version.]")); } ADD_OPT ("--help-pack", QT_TRANSLATE_NOOP ("Help", "Shows available pack methods.")); ADD_OPT ("--debug", QT_TRANSLATE_NOOP ("Help", "Enables extensive debug output to the console." NEWLINE "On Windows, also enables PulseAudio logging to a file under \".x2go/pulse\" & cygwin sshd logging to a file under \".x2go/sshLogs\" directory, both under the USERPROFILE directory." NEWLINE "The logs are not deleted when X2Go Client terminates.")); ADD_OPT ("--libssh-debug", QT_TRANSLATE_NOOP ("Help", "Instructs libssh to print out extensive debug output to the console." NEWLINE "This will only have an effect if libssh is being used. It tends to generate a lot of output." NEWLINE "WARNING: Enabling this option could reveal sensitive information about client and server configuration, and, if libssh has been compiled with password debugging, user credentials. Do not publish log files created with this option.")); ADD_OPT ("--libssh-packetlog", QT_TRANSLATE_NOOP ("Help", "Instructs libssh to print out all network packets sent and received, including their contents." NEWLINE "This will only have an effect if libssh is being used. It tends to generate huge amounts of output." NEWLINE "WARNING: The same caveats as explained in the --libssh-debug option help text apply.")); ADD_OPT ("--no-autoresume", QT_TRANSLATE_NOOP ("Help", "Do not resume sessions automatically.")); ADD_OPT ("--no-menu", QT_TRANSLATE_NOOP ("Help", "Hides menu bar.")); ADD_OPT ("--no-session-edit", QT_TRANSLATE_NOOP ("Help", "Disables session editing.")); ADD_OPT ("--maximize", QT_TRANSLATE_NOOP ("Help", "Starts maximized.")); ADD_OPT ("--hide", QT_TRANSLATE_NOOP ("Help", "Starts hidden (minimized to system tray where available.)")); ADD_OPT ("--portable", QT_TRANSLATE_NOOP ("Help", "Starts in \"portable\" mode.")); ADD_OPT ("--pgp-card", QT_TRANSLATE_NOOP ("Help", "Forces OpenPGP smart card authentication.")); #if defined (Q_OS_DARWIN) || defined (Q_OS_WIN) ADD_OPT ("--disable-pulse", QT_TRANSLATE_NOOP ("Help", "Disable PulseAudio.")); ADD_OPT ("--disable-pulse-record", QT_TRANSLATE_NOOP ("Help", "Disable sound input.")); #endif /* defined (Q_OS_DARWIN) || defined (Q_OS_WIN) */ ADD_OPT ("--xinerama", QT_TRANSLATE_NOOP ("Help", "Enables Xinerama by default.")); ADD_OPT ("--ldap-printing", QT_TRANSLATE_NOOP ("Help", "Allows client side printing in LDAP mode.")); ADD_OPT ("--thinclient", QT_TRANSLATE_NOOP ("Help", "Enables thinclient mode. Starts without a window manager.")); ADD_OPT ("--haltbt", QT_TRANSLATE_NOOP ("Help", "Enables shutdown button.")); ADD_OPT ("--add-to-known-hosts", QT_TRANSLATE_NOOP ("Help", "Adds RSA key fingerprint to \".ssh/known_hosts\" if authenticity of the server can't be determined.")); ADD_OPT ("--ldap=", QT_TRANSLATE_NOOP ("Help", "Starts with LDAP support. Example: --ldap=ldapserver:389:o=organization,c=de")); ADD_OPT ("--ldap1=", QT_TRANSLATE_NOOP ("Help", "Defines the first LDAP failover server.")); ADD_OPT ("--ldap2=", QT_TRANSLATE_NOOP ("Help", "Defines the second LDAP failover server.")); ADD_OPT ("--ssh-port=", QT_TRANSLATE_NOOP ("Help", "Defines the remote SSH server port. Default: 22.")); ADD_OPT ("--client-ssh-port=", QT_TRANSLATE_NOOP ("Help", "Defines the local machine's SSH server port. Needed for Client-Side Printing and File Sharing support. Default: 22.")); ADD_OPT ("--command=", QT_TRANSLATE_NOOP ("Help", "Sets the default command. Default: 'KDE' (Desktop Session)")); ADD_OPT ("--session=", QT_TRANSLATE_NOOP ("Help", "Starts the session named \"session\".")); ADD_OPT ("--user=", QT_TRANSLATE_NOOP ("Help", "Sets the user name for connecting to the remote SSH server to \"username\".")); ADD_OPT ("--geometry=<x|fullscreen>", QT_TRANSLATE_NOOP ("Help", "Sets the default window geometry. Default: 800x600.")); ADD_OPT ("--dpi=", QT_TRANSLATE_NOOP ("Help", "Sets the remote X2Go Agent's DPI value to \"dpi\". Default: same as local display.")); ADD_OPT ("--link=", QT_TRANSLATE_NOOP ("Help", "Sets the default link type. Default: \"adsl\".")); ADD_OPT ("--pack=", QT_TRANSLATE_NOOP ("Help", "Sets default pack method. Default: \"16m-jpeg-9\".")); ADD_OPT ("--clipboard=", QT_TRANSLATE_NOOP ("Help", "Sets the default clipboard mode. Default: \"both\".")); ADD_OPT ("--kbd-layout=", QT_TRANSLATE_NOOP ("Help", "Sets the default keyboard layout to \"layout\". \"layout\" may be a comma-separated list.")); ADD_OPT ("--kbd-type=", QT_TRANSLATE_NOOP ("Help", "Sets the default keyboard type.")); ADD_OPT ("--home=
", QT_TRANSLATE_NOOP ("Help", "Sets the user's home directory.")); ADD_OPT ("--set-kbd=<0|1>", QT_TRANSLATE_NOOP ("Help", "Enables or disables overwriting the current keyboard settings.")); ADD_OPT ("--autostart=,[,...]", QT_TRANSLATE_NOOP ("Help", "Automatically launches the application(s) \"app\", \"app2\", ... on session start in Published Applications mode.")); ADD_OPT ("--session-conf=", QT_TRANSLATE_NOOP ("Help", "Defines an alternative session config file path.")); ADD_OPT ("--tray-icon", QT_TRANSLATE_NOOP ("Help", "Force-enables session system tray icon.")); ADD_OPT ("--close-disconnect", QT_TRANSLATE_NOOP ("Help", "Automatically closes X2Go Client after a disconnect.")); ADD_OPT ("--hide-foldersharing", QT_TRANSLATE_NOOP ("Help", "Hides all Folder-Sharing-related options.")); ADD_OPT ("--broker-name=", QT_TRANSLATE_NOOP ("Help", "Sets the broker name to display in X2Go Client. This parameter is optional.")); ADD_OPT ("--broker-url=://[username@][:port]/path", QT_TRANSLATE_NOOP ("Help", "Sets the URL of the session broker." NEWLINE "\"protocol\" must be one of \"http\", \"https\" or \"ssh\"." NEWLINE "If \"username@\" is provided, it will be pasted into the authorization dialog of X2Go Client." NEWLINE "URL examples are:" NEWLINE " https://x2gobroker.org/cgi-bin/x2gobroker.cgi" NEWLINE " ssh://user@x2gobroker.org:22/usr/lib/x2go/x2gobroker.pl")); ADD_OPT ("--broker-ssh-key=", QT_TRANSLATE_NOOP ("Help", "Sets the path to an SSH key to use for authentication against an SSH session broker. The client's behavior is undefined if this flag is used for non-SSH session brokers.")); ADD_OPT ("--broker-autologin", QT_TRANSLATE_NOOP ("Help", "Enables the use of the default SSH key or SSH agent for authentication against an SSH session broker. The client's behavior is undefined if this flag is used for non-SSH session brokers.")); ADD_OPT ("--broker-noauth", QT_TRANSLATE_NOOP ("Help", "Does not ask for user credentials during session broker authentication. This can be useful if you are using an HTTP(S) session broker without authentication. If you run an HTTP(S) server without authentication, but with user-specific profiles, then put the user name into the broker URL (refer to --broker-url.) The user name then will be extracted from the broker URL and be sent to the session broker. The client's behavior is undefined if this flag is used for non-HTTP(S) session brokers.")); ADD_OPT ("--broker-use-creds-for-session", QT_TRANSLATE_NOOP ("Help", "Use broker credentials as session user/password credentials when using broker mode with broker authentication. Currently only affects direct RDP sessions.")); ADD_OPT ("--broker-logoutbt", QT_TRANSLATE_NOOP ("Help", "Enables broker logout button.")); ADD_OPT ("--background=", QT_TRANSLATE_NOOP ("Help", "Use a custom/branded background image (SVG format) for X2Go Client's main window. If a directory is given, will randomly pick an SVG file inside of it.")); ADD_OPT ("--branding=", QT_TRANSLATE_NOOP ("Help", "Use a custom icon (SVG format) for additional branding to replace the default in the lower left corner of X2Go Client's main window.")); ADD_OPT ("--splash=", QT_TRANSLATE_NOOP ("Help", "Show splash screen if starting in hidden mode using specified pixmap file.")); #if defined (Q_OS_WIN) ADD_OPT ("--xserver-start-limit=", QT_TRANSLATE_NOOP ("Help", "Limit the X.Org Server start count to at most tries. Default: \"3\"." NEWLINE "If is zero or a negative number, no limit is imposed." NEWLINE "The limits for are platform dependent. If the passed value is out of bounds, X2Go Client falls back to the default value.")); #endif /* defined (Q_OS_WIN) */ #if defined (Q_OS_UNIX) ADD_OPT ("--bypass-cleanup-helper", QT_TRANSLATE_NOOP ("Help", "Disables X2Go Client's UNIX cleanup helper. This will prevent X2Go Client from terminating spawned processes after the main program terminates or crashes. Use with care and when in doubt, do not use this parameter at all.")); #endif /* defined (Q_OS_UNIX) */ # undef NEWLINE # undef ADD_OPT return (ret); } help::data_t help::build_data () { return (help::data_t (help::cleanup_prelude (help::build_prelude ()), help::cleanup_params (help::build_params ()))); } help::string_split_t help::split_long_line (QString &line, std::ptrdiff_t max_length) { string_split_t ret (line, ""); if (line.size () > max_length) { /* Try to find the next split point. */ std::ptrdiff_t split_point = line.lastIndexOf (" ", max_length - 1); /* Only care for valid split points. */ if (0 <= split_point) { x2goDebug << "Split onto " << line.left (split_point) << " and new part " << line.mid (split_point + 1); ret.first = line.left (split_point); ret.second = line.mid (split_point + 1); } } return (ret); } QString help::pretty_print (bool terminal_output) { return (help::pretty_print (help::build_data (), terminal_output)); } QString help::pretty_print (help::data_t data, bool terminal_output) { QString ret = ""; QTextStream out (&ret); out << data.first.join ("\n") << "\n"; std::size_t max_len = 0; /* Iterate over all parameter options and get max width. */ for (help::params_t::const_iterator it = data.second.constBegin (); it != data.second.constEnd (); ++it) { max_len = std::max (max_len, static_cast ((*it).first.size ())); } std::size_t terminal_cols = 0; if (terminal_output) { #ifdef Q_OS_WIN CONSOLE_SCREEN_BUFFER_INFO terminal_internal; HANDLE stderr_handle = GetStdHandle (STD_ERROR_HANDLE); if (stderr_handle && (stderr_handle != INVALID_HANDLE_VALUE)) { if (GetConsoleScreenBufferInfo (stderr_handle, &terminal_internal)) { terminal_cols = (terminal_internal.srWindow.Right - terminal_internal.srWindow.Left) + 1; } } #elif defined (Q_OS_UNIX) struct winsize terminal_internal; ioctl (0, TIOCGWINSZ, &terminal_internal); terminal_cols = terminal_internal.ws_col; #endif } x2goDebug << "Terminal cols: " << terminal_cols << endl; for (help::params_t::const_iterator it = data.second.constBegin (); it != data.second.constEnd (); ++it) { std::size_t indent = (max_len - (*it).first.size ()) + 4; x2goDebug << "Indent: " << indent << "; max_len: " << max_len << "; param size: " << (*it).first.size () << endl; out << " "; out << (*it).first; out << QString (" ").repeated (indent); /* Append first two spaces to the general indent level for upcoming lines. */ indent += 2; std::ptrdiff_t remaining = 0; /* Split up description on newlines. */ QStringList desc_split = (*it).second.split ("\n"); for (QStringList::const_iterator desc_split_it = desc_split.constBegin (); desc_split_it != desc_split.constEnd (); ++desc_split_it) { std::size_t cur_len = (*desc_split_it).size (); x2goDebug << "Going to output a description " << (*desc_split_it).size () << " chars wide." << endl; if (0 != terminal_cols) { /* * Only set this the first time right after having written the parameter and indent spaces. * Don't change it after that. */ if (desc_split_it == desc_split.constBegin ()) { remaining = terminal_cols - (indent + (*it).first.size ()); } x2goDebug << "Still have " << remaining << " characters left on this line." << endl; /* Ran out of space? That's bad... print a newline and don't use any indentation level. */ if (0 > remaining) { x2goDebug << "Ran out of space! Will break line and start the description on a new one." << endl; out << "\n"; remaining = terminal_cols; indent = 0; } } QString working_copy (*desc_split_it); while (!working_copy.isEmpty ()) { cur_len = working_copy.size (); x2goDebug << "Trying to fit a (remaining) description " << cur_len << " characters wide." << endl; string_split_t string_split; if (0 != terminal_cols) { string_split = split_long_line (working_copy, remaining); } else { /* For non-terminal printing (or if the width is unknown), use the default splitting length. */ string_split = split_long_line (working_copy); } /* Print potentially splitted line. */ working_copy = string_split.first; out << working_copy; /* Continue with next chunk. */ working_copy = string_split.second;; out << "\n"; /* * Print whitespace if the remainder string is non-empty * or printing shall continue on next line. */ if ((!working_copy.isEmpty ()) || ((desc_split_it + 1) != desc_split.constEnd ())) { indent = 2 + max_len + 4; out << QString (" ").repeated (indent); } } } } if (terminal_output) { qCritical ().nospace () << qPrintable (ret); } return (ret); } x2goclient-4.1.2.3/src/helpdialog.cpp0000644000000000000000000000415614447111614014237 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * Copyright (C) 2015-2023 by Mihai Moldovan * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include #include "helpdialog.h" #include "x2goutils.h" HelpDialog::HelpDialog (QWidget *parent): QDialog (parent) { setupUi (this); } void HelpDialog::setText (QString text) { /* Try real hard to get a monospaced font. */ QFont font ("monospace"); if (!font_is_monospaced (font)) { #if QT_VERSION >= 0x040700 font.setStyleHint (QFont::Monospace); #else font.setStyleHint (QFont::TypeWriter); #endif } if (!font_is_monospaced (font)) { font.setFamily ("Courier New"); } if (!font_is_monospaced (font)) { font.setFamily ("Courier"); } /* If the font is not monospaced by now, there's not much else we can do... */ font.setPointSize (10); plainTextEdit->setFont (font); plainTextEdit->setTabStopWidth (30); plainTextEdit->setWordWrapMode (QTextOption::NoWrap); plainTextEdit->setPlainText (text); } x2goclient-4.1.2.3/src/helpdialog.h0000644000000000000000000000301214447111614013672 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * Copyright (C) 2015-2023 by Mihai Moldovan * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef HELPDIALOG_H #define HELPDIALOG_H #include "ui_helpdialog.h" class HelpDialog : public QDialog, public Ui_HelpDialog { public: HelpDialog (QWidget *parent = 0); void setText (QString text); }; #endif /* !defined (HELPDIALOG_H) */ x2goclient-4.1.2.3/src/help.h0000644000000000000000000000612714447111614012524 0ustar /******************************************************************************** * Copyright (C) 2015-2023 by Mihai Moldovan +49 721 14595728 * * * * This program is free software; you can redistribute 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ********************************************************************************/ #ifndef HELP_H #define HELP_H #include #include #include #include namespace help { typedef QStringList prelude_t; typedef QPair params_elem_t; typedef QList params_t; typedef QPair data_t; typedef QPair string_split_t; /* Builds a prelude_t object. Values are hardcoded here. */ prelude_t build_prelude (); /* Builds a params_t object. Values are hardcoded here. */ params_t build_params (); /* Merges prelude_t and params_t into a data_t object. */ data_t build_data (); /* Cleanup functions for string trimming. */ prelude_t cleanup_prelude (prelude_t prelude); params_t cleanup_params (params_t params); /* * Splits a string into two components. * The first component is at most max_length (or 200) characters long. * The string is split on the nearest space surrounding max_length * (or max_length itself.) * Caveat: if the string length is less than max_length, no splitting * is performed. * In that case, the second component is empty. */ string_split_t split_long_line (QString &line, std::ptrdiff_t max_length = 100); /* * Returns a help_data_t structure as a QString. * If terminal_output is true, the terminal width is probed for and the function * family tries its best to adhere to the auto-detected width. * Additionally, terminal_output controls whether the resulting string is * printed to stderr or not. */ QString pretty_print (bool terminal_output = true); QString pretty_print (data_t data, bool terminal_output = true); } #endif /* !defined (HELP_H) */ x2goclient-4.1.2.3/src/httpbrokerclient.cpp0000644000000000000000000011156014447111614015510 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include "httpbrokerclient.h" #include #include #include #include #include #include #include #include #include #include #include "x2gologdebug.h" #include #include #include "onmainwindow.h" #include "x2gosettings.h" #include #include #include "SVGFrame.h" #include "onmainwindow.h" #include #include #include "InteractionDialog.h" #include #include "version.h" HttpBrokerClient::HttpBrokerClient ( ONMainWindow* wnd, ConfigFile* cfg ) { config=cfg; mainWindow=wnd; sshConnection=0; sessionsRequest=0l; selSessRequest=0l; chPassRequest=0l; testConRequest=0l; eventRequest=0l; QUrl lurl ( config->brokerurl ); if(lurl.userName().length()>0) config->brokerUser=lurl.userName(); nextAuthId=config->brokerUserId; if(config->brokerurl.indexOf("ssh://")==0) { sshBroker=true; x2goDebug<<"host:"<sshBrokerBin=lurl.path(); } else { sshBroker=false; if ((config->brokerCaCertFile.length() >0) && (QFile::exists(config->brokerCaCertFile))) { QSslSocket::addDefaultCaCertificates(config->brokerCaCertFile, QSsl::Pem); x2goDebug<<"Custom CA certificate file loaded into HTTPS broker client: "<brokerCaCertFile; } QDir dr; dr.mkpath(mainWindow->getHomeDirectory()+"/.x2go"); http=new QNetworkAccessManager ( this ); QNetworkDiskCache *cache = new QNetworkDiskCache(this); cache->setCacheDirectory(mainWindow->getHomeDirectory()+"/.x2go/cache"); http->setCache(cache); x2goDebug<<"Setting up connection to broker: "<brokerurl; connect ( http, SIGNAL ( sslErrors ( QNetworkReply*, const QList& ) ),this, SLOT ( slotSslErrors ( QNetworkReply*, const QList& ) ) ); connect ( http,SIGNAL ( finished (QNetworkReply*) ),this, SLOT ( slotRequestFinished (QNetworkReply*) ) ); } } HttpBrokerClient::~HttpBrokerClient() { } void HttpBrokerClient::createSshConnection() { QUrl lurl ( config->brokerurl ); sshConnection=new SshMasterConnection (this, lurl.host(), lurl.port(22),mainWindow->getAcceptRSA(), config->brokerUser, config->brokerPass,config->brokerSshKey,config->brokerAutologin, config->brokerKrbLogin, false); qRegisterMetaType ("SshMasterConnection::passphrase_types"); connect ( sshConnection, SIGNAL ( connectionOk(QString)), this, SLOT ( slotSshConnectionOk() ) ); connect ( sshConnection, SIGNAL ( serverAuthError ( int,QString, SshMasterConnection* ) ),this, SLOT ( slotSshServerAuthError ( int,QString, SshMasterConnection* ) ) ); connect ( sshConnection, SIGNAL ( needPassPhrase(SshMasterConnection*, SshMasterConnection::passphrase_types)),this, SLOT ( slotSshServerAuthPassphrase(SshMasterConnection*, SshMasterConnection::passphrase_types)) ); connect ( sshConnection, SIGNAL ( userAuthError ( QString ) ),this,SLOT ( slotSshUserAuthError ( QString ) ) ); connect ( sshConnection, SIGNAL ( connectionError(QString,QString)), this, SLOT ( slotSshConnectionError ( QString,QString ) ) ); connect ( sshConnection, SIGNAL(ioErr(SshProcess*,QString,QString)), this, SLOT(slotSshIoErr(SshProcess*,QString,QString))); connect ( sshConnection, SIGNAL(startInteraction(SshMasterConnection*,QString)),mainWindow, SLOT(slotSshInteractionStart(SshMasterConnection*,QString)) ); connect ( sshConnection, SIGNAL(updateInteraction(SshMasterConnection*,QString)),mainWindow, SLOT(slotSshInteractionUpdate(SshMasterConnection*,QString)) ); connect ( sshConnection, SIGNAL(finishInteraction(SshMasterConnection*)),mainWindow, SLOT(slotSshInteractionFinish(SshMasterConnection*))); connect ( mainWindow->getInteractionDialog(), SIGNAL(textEntered(QString)), sshConnection, SLOT(interactionTextEnter(QString))); connect ( mainWindow->getInteractionDialog(), SIGNAL(interrupt()), sshConnection, SLOT(interactionInterruptSlot())); sshConnection->start(); } void HttpBrokerClient::slotSshConnectionError(QString message, QString lastSessionError) { if ( sshConnection ) { sshConnection->wait(); delete sshConnection; sshConnection=0l; } QMessageBox::critical ( 0l,message,lastSessionError, QMessageBox::Ok, QMessageBox::NoButton ); } void HttpBrokerClient::slotSshConnectionOk() { mainWindow->getInteractionDialog()->hide(); getUserSessions(); } void HttpBrokerClient::slotSshServerAuthError(int error, QString sshMessage, SshMasterConnection* connection) { QString errMsg; switch ( error ) { case SSH_SERVER_KNOWN_CHANGED: errMsg=tr ( "Host key for server changed.\nIt is now: " ) +sshMessage+"\n"+ tr ( "For security reasons, the connection attempt will be aborted." ); connection->writeKnownHosts(false); connection->wait(); if(sshConnection && sshConnection !=connection) { sshConnection->wait(); delete sshConnection; } sshConnection=0; slotSshUserAuthError ( errMsg ); return; case SSH_SERVER_FOUND_OTHER: errMsg=tr ( "The host key for this server was not found but another " "type of key exists. An attacker might have changed the default server key to " "trick your client into thinking the key does not exist yet." ); connection->writeKnownHosts(false); connection->wait(); if(sshConnection && sshConnection !=connection) { sshConnection->wait(); delete sshConnection; } sshConnection=0; slotSshUserAuthError ( errMsg ); return ; case SSH_SERVER_ERROR: connection->writeKnownHosts(false); connection->wait(); if(sshConnection && sshConnection !=connection) { sshConnection->wait(); delete sshConnection; } sshConnection=0; slotSshUserAuthError ( sshMessage ); return ; case SSH_SERVER_FILE_NOT_FOUND: errMsg=tr ( "Could not find known hosts file. " "If you accept the host key here, the file will be automatically created." ); break; case SSH_SERVER_NOT_KNOWN: errMsg=tr ( "The server is unknown. Do you trust the host key?\nPublic key hash: " ) +sshMessage; break; } if ( QMessageBox::warning ( 0, tr ( "Host key verification failed." ),errMsg,tr ( "Yes" ), tr ( "No" ) ) !=0 ) { connection->writeKnownHosts(false); connection->wait(); if(sshConnection && sshConnection !=connection) { sshConnection->wait(); delete sshConnection; } sshConnection=0; slotSshUserAuthError ( tr ( "Host key verification failed." ) ); return; } connection->writeKnownHosts(true); connection->wait(); connection->start(); } void HttpBrokerClient::slotSshServerAuthPassphrase(SshMasterConnection* connection, SshMasterConnection::passphrase_types passphrase_type) { bool ok; QString message; switch (passphrase_type) { case SshMasterConnection::PASSPHRASE_PRIVKEY: message = tr ("Enter passphrase to decrypt a key"); ok = true; break; case SshMasterConnection::PASSPHRASE_CHALLENGE: message = tr ("Verification code:"); ok = true; break; case SshMasterConnection::PASSPHRASE_PASSWORD: message = tr ("Enter user account password:"); ok = true; break; default: x2goDebug << "Unknown passphrase type requested! Was: " << passphrase_type << endl; ok = false; break; } if (ok) { QString phrase = QInputDialog::getText (0, connection->getUser () + "@" + connection->getHost () + ":" + QString::number (connection->getPort ()), message, QLineEdit::Password, QString (""), &ok); if (!ok) { phrase = QString (""); } connection->setKeyPhrase (phrase); } } void HttpBrokerClient::closeSSHInteractionDialog() { slotSshUserAuthError("NO_ERROR"); } void HttpBrokerClient::slotSshUserAuthError(QString error) { if ( sshConnection ) { sshConnection->wait(); delete sshConnection; sshConnection=0l; } mainWindow->getInteractionDialog()->hide(); if(error!="NO_ERROR") QMessageBox::critical ( 0l,tr ( "Authentication failed." ),error, QMessageBox::Ok, QMessageBox::NoButton ); emit authFailed(); return; } void HttpBrokerClient::getUserSessions() { QString brokerUser=config->brokerUser; // Otherwise, after logout from the session, we will be connected by a previous user without a password by authid. if (config->brokerAutologoff) { nextAuthId=config->brokerUserId; } x2goDebug<<"Called getUserSessions: brokeruser: "<getUsePGPCard()) brokerUser=mainWindow->getCardLogin(); config->sessiondata=QString::null; if(!sshBroker) { QString req; QTextStream ( &req ) << "task=listsessions&"<< "user="<brokerurl)); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); sessionsRequest=http->post (request, req.toUtf8() ); } else { if(!sshConnection) { createSshConnection(); return; } if (nextAuthId.length() > 0) { sshConnection->executeCommand ( config->sshBrokerBin+" --user "+ brokerUser +" --authid "+nextAuthId+ " --task listsessions", this, SLOT ( slotListSessions ( bool, QString,int ) )); } else { sshConnection->executeCommand ( config->sshBrokerBin+" --user "+ brokerUser +" --task listsessions", this, SLOT ( slotListSessions ( bool, QString,int ) )); } } } void HttpBrokerClient::selectUserSession(const QString& session, const QString& loginName) { x2goDebug<<"Called selectUserSession for session "<brokerUser; if(mainWindow->getUsePGPCard()) brokerUser=mainWindow->getCardLogin(); if(!sshBroker) { QString req; QTextStream ( &req ) << "task=selectsession&"<< "sid="<brokerurl)); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); selSessRequest=http->post (request, req.toUtf8() ); } else { QString sshCmd=config->sshBrokerBin+" --user "+ brokerUser + " --task selectsession --sid \""+session+"\""; if(nextAuthId.length() > 0) { sshCmd+=" --authid "+nextAuthId; } if(loginName.length() > 0) { sshCmd+=" --login " + loginName; } sshConnection->executeCommand (sshCmd, this,SLOT ( slotSelectSession(bool,QString,int))); } } void HttpBrokerClient::sendEvent(const QString& ev, const QString& id, const QString& server, const QString& client, const QString& login, const QString& cmd, const QString& display, const QString& start, uint connectionTime) { x2goDebug<<"Called sendEvent."; QString brokerUser=config->brokerUser; if(mainWindow->getUsePGPCard()) brokerUser=mainWindow->getCardLogin(); QString os="linux"; #ifdef Q_OS_WIN os="windows"; #endif #ifdef Q_OS_DARWIN os="mac"; #endif if(!sshBroker) { QString req; QTextStream ( &req ) << "task=clientevent&"<< "user="<brokerurl)); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); eventRequest=http->post (request, req.toUtf8() ); } else { if (nextAuthId.length() > 0) { sshConnection->executeCommand ( config->sshBrokerBin+" --user "+ brokerUser +" --authid "+nextAuthId+ " --task clientevent --sid \""+id+"\" --event "+ev+" --server \""+server+"\" --client \""+client+"\" --login "+"\""+ login+"\" --cmd \""+cmd+"\" --display \""+display+"\" --start \""+start+"\" --elapsed "+QString::number(connectionTime)+" --version \""+VERSION+"\" --os "+os, this,SLOT ( slotEventSent(bool,QString,int))); } else { sshConnection->executeCommand ( config->sshBrokerBin+" --user "+ brokerUser + " --task clientevent --sid \""+id+"\" --event "+ev+" --server \""+server+"\" --client \""+client+"\" --login "+"\""+ login+"\" --cmd \""+cmd+"\" --display \""+display+"\" --start \""+start+"\" --elapsed "+QString::number(connectionTime)+" --version \""+VERSION+"\" --os "+os, this,SLOT ( slotEventSent(bool,QString,int))); } } } void HttpBrokerClient::slotEventSent(bool success, QString answer, int) { if(!success) { x2goDebug<setBrokerStatus(tr("Disconnected from broker: ")+answer, true); QMessageBox::critical(0,tr("Error"),answer); emit fatalHttpError(); return; } if(!checkAccess(answer)) return; mainWindow->setBrokerStatus(tr("Connected to broker")); x2goDebug<<"event sent:"<suspendFromBroker(sid); } if(answer.indexOf("TERMINATE")!=-1) { QString sid=answer.split("TERMINATE ")[1].simplified(); x2goDebug<<"broker asks to terminate "<terminateFromBroker(sid); } } void HttpBrokerClient::changePassword(QString newPass) { newBrokerPass=newPass; QString brokerUser=config->brokerUser; if(mainWindow->getUsePGPCard()) brokerUser=mainWindow->getCardLogin(); if(!sshBroker) { QString req; QTextStream ( &req ) << "task=setpass&"<< "newpass="<brokerurl)); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); chPassRequest=http->post (request, req.toUtf8() ); } else { if (nextAuthId.length() > 0) { sshConnection->executeCommand ( config->sshBrokerBin+" --user "+ brokerUser +" --authid "+nextAuthId+ " --task setpass --newpass "+newPass, this, SLOT ( slotPassChanged(bool,QString,int))); } else { sshConnection->executeCommand ( config->sshBrokerBin+" --user "+ brokerUser +" --task setpass --newpass "+newPass, this, SLOT ( slotPassChanged(bool,QString,int))); } } } void HttpBrokerClient::testConnection() { x2goDebug<<"Called testConnection."; if(!sshBroker) { QString req; QTextStream ( &req ) << "task=testcon"; x2goDebug << "sending request: "<< scramblePwd(req.toUtf8()); QNetworkRequest request(QUrl(config->brokerurl)); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); testConRequest=http->post (request, req.toUtf8() ); } else { if (nextAuthId.length() > 0) { sshConnection->executeCommand(config->sshBrokerBin+" --authid "+nextAuthId+ " --task testcon", this, SLOT ( slotSelectSession(bool,QString,int))); } else { sshConnection->executeCommand(config->sshBrokerBin+" --task testcon", this, SLOT ( slotSelectSession(bool,QString,int))); } } } void HttpBrokerClient::processClientConfig(const QString& raw_content) { X2goSettings st(raw_content, QSettings::IniFormat); mainWindow->config.brokerEvents=st.setting()->value("events",false).toBool(); mainWindow->config.brokerLiveEventsTimeout=st.setting()->value("liveevent",0).toUInt(); mainWindow->config.brokerSyncTimeout=st.setting()->value("syncinterval",0).toUInt(); if(mainWindow->config.brokerEvents) { x2goDebug<<"sending client events to broker"; if(mainWindow->config.brokerLiveEventsTimeout) { x2goDebug<<"sending alive events to broker every "<config.brokerLiveEventsTimeout<<" seconds"; } } if(mainWindow->config.brokerSyncTimeout) { x2goDebug<<"synchronizing with broker every "<config.brokerSyncTimeout<<" seconds"; } } void HttpBrokerClient::createIniFile(const QString& raw_content) { QString content; content = raw_content; content.replace("
","\n"); // x2goDebug<<"Inifile content: "<1) { cont=lines[1]; cont=cont.split("END_USER_SESSIONS\n")[0]; } if(!sshBroker) { QStringList iniLines=cont.split("\n"); cont.clear(); clearResRequests(); //check if some of the icon or icon_foldername values are URLs and need to be downloaded foreach(QString ln, iniLines) { ln=ln.trimmed(); if(ln.indexOf("icon")==0) { QStringList lnParts=ln.split("="); QString iconUrl=lnParts.last().trimmed(); if((iconUrl.indexOf("http://")!=-1)||(iconUrl.indexOf("https://")!=-1)) { ln=lnParts[0]+"=file://"+getResource(iconUrl); } } cont+=ln+"\n"; } mainWindow->config.iniFile=cont; if(resReplies.count()==0) { //we didn't request any resources, all session info is loaded emit sessionsLoaded(); } } else { mainWindow->config.iniFile=cont; emit sessionsLoaded(); } lines=content.split("START_CLIENT_CONFIG\n"); if (lines.count()>1) { cont=lines[1]; cont=cont.split("END_CLIENT_CONFIG\n")[0]; processClientConfig(cont); } else { x2goDebug<<"no client config from broker"; } } //get the fname on disk from resource URL QString HttpBrokerClient::resourceFname(const QUrl& url) { QString fname=url.toString(); fname.replace("http://",""); fname.replace("https://",""); fname.replace("/","_"); QDir dr; dr.mkdir(mainWindow->getHomeDirectory()+"/.x2go/res"); return mainWindow->getHomeDirectory()+"/.x2go/res/"+fname; } //return true if the URL is already requested bool HttpBrokerClient::isResRequested(const QUrl& url) { foreach(QNetworkReply* reply, resReplies) { if(reply->url().toString()==url.toString()) { return true; } } return false; } //download resource if needed and return the name on the disk QString HttpBrokerClient::getResource(QString resURL) { QUrl url(resURL); if(!isResRequested(url)) { resReplies << http->get(QNetworkRequest(url)); } return resourceFname(url); } //clear list of res requests void HttpBrokerClient::clearResRequests() { foreach(QNetworkReply* reply, resReplies) { reply->deleteLater(); } resReplies.clear(); } bool HttpBrokerClient::checkAccess(QString answer ) { // x2goDebug<<"Called checkAccess - answer was: "<" "Please try again." ) ); emit authFailed(); return false; } config->brokerAuthenticated=true; emit (enableBrokerLogoutButton ()); int authBegin=answer.indexOf("AUTHID:"); if (authBegin!=-1) { nextAuthId=answer.mid(authBegin+7, answer.indexOf("\n",authBegin)-authBegin-7); } return true; } void HttpBrokerClient::slotConnectionTest(bool success, QString answer, int) { x2goDebug<<"Called slotConnectionTest."; if(!success) { x2goDebug<setBrokerStatus(tr("Connected to broker")); createIniFile(answer); } void HttpBrokerClient::slotPassChanged(bool success, QString answer, int) { if(!success) { x2goDebug<error() != QNetworkReply::NoError) { x2goDebug<<"Download request for "<url().toString()<< " failed with error: "<errorString(); } else { // x2goDebug<<"saving to "<url().toString())<<" from cache: "<attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool(); QFile file(resourceFname(reply->url().toString())); file.open(QIODevice::WriteOnly); file.write(reply->readAll()); file.close(); } foreach(QNetworkReply* r, resReplies) { if(!r->isFinished()) { return; } } emit sessionsLoaded(); return; } if(reply->error() != QNetworkReply::NoError) { x2goDebug<<"Broker HTTP request failed with error: "<errorString(); mainWindow->setBrokerStatus(tr("Disconnected from broker: ")+reply->errorString(), true); if(reply == eventRequest || reply == sessionsRequest) { reply->deleteLater(); if(reply == eventRequest) eventRequest=0l; else sessionsRequest=0l; //do not exit, just return the function return; } QMessageBox::critical(0,tr("Error"),reply->errorString()); emit fatalHttpError(); return; } QString answer ( reply->readAll() ); // x2goDebug<<"A http request returned. Result was: "<deleteLater(); } void HttpBrokerClient::parseSession(QString sinfo) { config->sessiondata=""; suspendedSession.clear(); x2goDebug<<"Starting parser."; QStringList lst=sinfo.split("SERVER:",QString::SkipEmptyParts); int keyStartPos=sinfo.indexOf("-----BEGIN DSA PRIVATE KEY-----"); if(keyStartPos==-1) keyStartPos=sinfo.indexOf("-----BEGIN RSA PRIVATE KEY-----"); if(keyStartPos==-1) keyStartPos=sinfo.indexOf("-----BEGIN OPENSSH PRIVATE KEY-----"); QString endStr="-----END DSA PRIVATE KEY-----"; int keyEndPos=sinfo.indexOf(endStr); if(keyEndPos==-1) { endStr="-----END RSA PRIVATE KEY-----"; keyEndPos=sinfo.indexOf(endStr); } if(keyEndPos==-1) { endStr="-----END OPENSSH PRIVATE KEY-----"; keyEndPos=sinfo.indexOf(endStr); } if (! (keyEndPos == -1 || keyStartPos == -1 || lst.size()==0)) { x2goDebug<<"Found key for authentication"; config->key=sinfo.mid(keyStartPos, keyEndPos+endStr.length()-keyStartPos); } QString serverLine=(lst[1].split("\n"))[0]; QStringList words=serverLine.split(":",QString::SkipEmptyParts); config->serverIp=words[0]; if (words.count()>1) config->sshport=words[1]; x2goDebug<<"Server IP address: "<serverIp; x2goDebug<<"Server port: "<sshport; if (sinfo.indexOf("SESSION_INFO")!=-1) { QStringList lst=sinfo.split("SESSION_INFO:",QString::SkipEmptyParts); //config->sessiondata=lst[1]; x2goDebug<<"Session data: "<selectSession(suspendedSession); } else { emit sessionSelected(); } x2goDebug<<"Parsing has finished."; } void HttpBrokerClient::resumeSession(const QString& id, const QString& server) { x2goDebug<<"Resuming session with id:"<sessiondata=sline; config->serverIp=server; emit sessionSelected(); break; } } } void HttpBrokerClient::slotSslErrors ( QNetworkReply* netReply, const QList & errors ) { QStringList err; QSslCertificate cert; for ( int i=0; ibrokerurl ); QString homeDir=mainWindow->getHomeDirectory(); if ( QFile::exists ( homeDir+"/.x2go/ssl/exceptions/"+ lurl.host() +"/"+fname ) ) { QFile fl ( homeDir+"/.x2go/ssl/exceptions/"+ lurl.host() +"/"+fname ); fl.open ( QIODevice::ReadOnly | QIODevice::Text ); QSslCertificate mcert ( &fl ); if ( mcert==cert ) { netReply->ignoreSslErrors(); requestTime.restart(); return; } } QString text=tr ( "
Server uses an invalid " "security certificate.

" ); text+=err.join ( "
" ); text+=tr ( "

" "You should not add an exception " "if you are using an internet connection " "that you do not trust completely or if you are " "not used to seeing a warning for this server.

" ); QMessageBox mb ( QMessageBox::Warning,tr ( "Secure connection failed." ), text ); text=QString::null; QTextStream ( &text ) <= 0x050000 cert.issuerInfo ( QSslCertificate::CommonName ).join("; ") #else cert.issuerInfo ( QSslCertificate::CommonName ) #endif <= 0x050000 cert.issuerInfo ( QSslCertificate::Organization ).join("; ") #else cert.issuerInfo ( QSslCertificate::Organization ) #endif <= 0x050000 cert.issuerInfo ( QSslCertificate::OrganizationalUnitName ).join("; ") #else cert.issuerInfo ( QSslCertificate::OrganizationalUnitName ) #endif <= 0x050000 cert.subjectInfo ( QSslCertificate::CommonName ).join("; ") #else cert.subjectInfo ( QSslCertificate::CommonName ) #endif <= 0x050000 cert.subjectInfo ( QSslCertificate::Organization ).join("; ") #else cert.subjectInfo ( QSslCertificate::Organization ) #endif <= 0x050000 cert.subjectInfo ( QSslCertificate::OrganizationalUnitName ).join("; ") #else cert.subjectInfo ( QSslCertificate::OrganizationalUnitName ) #endif <ignoreSslErrors(); x2goDebug<<"Storing certificate in "< * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef HTTPBROKERCLIENT_H #define HTTPBROKERCLIENT_H #include "x2goclientconfig.h" #include #include #include #include #include #include #include #include #include #include "sshmasterconnection.h" /** @author Oleksandr Shneyder */ class QNetworkAccessManager; struct ConfigFile; class ONMainWindow; class HttpBrokerClient: public QObject { Q_OBJECT public: HttpBrokerClient ( ONMainWindow* wnd, ConfigFile* cfg ); ~HttpBrokerClient(); void selectUserSession(const QString& session, const QString& loginName); void changePassword(QString newPass); void testConnection(); void closeSSHInteractionDialog(); void sendEvent(const QString& ev, const QString& id, const QString& server, const QString& client, const QString& login, const QString& cmd, const QString& display, const QString& start, uint connectionTime); void resumeSession(const QString& id, const QString& server); private: QNetworkAccessManager* http; QNetworkRequest* netRequest; QSslSocket* sslSocket; QNetworkReply* sessionsRequest; QNetworkReply* selSessRequest; QNetworkReply* chPassRequest; QNetworkReply* testConRequest; QNetworkReply* eventRequest; //List of replies with http resources (icons) QList resReplies; QString nextAuthId; QString newBrokerPass; ConfigFile* config; ONMainWindow* mainWindow; QTime requestTime; bool sshBroker; SshMasterConnection* sshConnection; QStringList suspendedSession; private: void createIniFile(const QString& raw_content); void processClientConfig(const QString& raw_content); void parseSession(QString sInfo); void createSshConnection(); bool checkAccess(QString answer); QString scramblePwd(const QString& req); QString getResource(QString resURL); QString resourceFname(const QUrl& url); bool isResRequested(const QUrl& url); void clearResRequests(); private slots: void slotRequestFinished ( QNetworkReply* reply ); void slotSslErrors ( QNetworkReply* netReply, const QList & errors ) ; QString getHexVal ( const QByteArray& ba ); void slotSshConnectionError ( QString message, QString lastSessionError ); void slotSshServerAuthError ( int error, QString sshMessage, SshMasterConnection* connection ); void slotSshServerAuthPassphrase ( SshMasterConnection* connection, SshMasterConnection::passphrase_types passphrase_type = SshMasterConnection::PASSPHRASE_PRIVKEY ); void slotSshUserAuthError ( QString error ); void slotSshConnectionOk(); void slotListSessions ( bool success, QString answer, int pid); void slotSelectSession ( bool success, QString answer, int pid); void slotPassChanged ( bool success, QString answer, int pid); void slotEventSent ( bool success, QString answer, int pid); void slotConnectionTest( bool success, QString answer, int pid); void slotSshIoErr(SshProcess* caller, QString error, QString lastSessionError); public slots: void getUserSessions(); signals: void haveSshKey ( QString ); void fatalHttpError(); void authFailed(); void sessionsLoaded(); void sessionSelected( ); void passwordChanged( QString ); void connectionTime(int, int); void enableBrokerLogoutButton (); }; #endif x2goclient-4.1.2.3/src/imgframe.cpp0000644000000000000000000000330314447111614013707 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include "imgframe.h" #include "x2goclientconfig.h" #include IMGFrame::IMGFrame(QImage* ,QWidget* parent, Qt::WindowFlags f) :QFrame(parent,f) { //setBg(img); } IMGFrame::~IMGFrame() { } void IMGFrame::setBg(QImage* img) { if(img) { setAutoFillBackground(true); QPalette pal=palette(); pal.setBrush(QPalette::Window,QBrush(QPixmap::fromImage(*img))); setPalette(pal); } } void IMGFrame::resizeEvent(QResizeEvent* event) { QFrame::resizeEvent(event); emit resized(event->size()); } x2goclient-4.1.2.3/src/imgframe.h0000644000000000000000000000320214447111614013352 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef IMGFRAME_H #define IMGFRAME_H #include "x2goclientconfig.h" #include /** @author Oleksandr Shneyder */ class QResizeEvent; class IMGFrame : public QFrame { Q_OBJECT public: IMGFrame(QImage* img,QWidget* parent=0, Qt::WindowFlags f=0); ~IMGFrame(); void setBg(QImage* img); virtual void resizeEvent(QResizeEvent* event); signals: void resized (const QSize); }; #endif x2goclient-4.1.2.3/src/InteractionDialog.cpp0000644000000000000000000001147314447111614015526 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include "InteractionDialog.h" #include "x2goclientconfig.h" #include "onmainwindow.h" #include #include #include #include #include #include #include #ifndef Q_OS_LINUX #if QT_VERSION < 0x050000 #include #else #include #endif #endif InteractionDialog::InteractionDialog(ONMainWindow* mainw, QWidget* parent): SVGFrame(mainw->images_resource_path("/svg/passform.svg"), false,parent ) { mw=mainw; if ( !mw->retMiniMode() ) setFixedSize ( this->sizeHint().width(),this->sizeHint().height()*1.5 ); else setFixedSize ( 310,280 ); QPalette pal=this->palette(); pal.setBrush ( QPalette::Window, QColor ( 255,255,255,0 ) ); pal.setColor ( QPalette::Active, QPalette::WindowText, QPalette::Mid ); pal.setColor ( QPalette::Active, QPalette::ButtonText, QPalette::Mid ); pal.setColor ( QPalette::Active, QPalette::Text, QPalette::Mid ); pal.setColor ( QPalette::Inactive, QPalette::WindowText, QPalette::Mid ); pal.setColor ( QPalette::Inactive, QPalette::ButtonText, QPalette::Mid ); pal.setColor ( QPalette::Inactive, QPalette::Text, QPalette::Mid ); this->setPalette ( pal ); pal.setColor ( QPalette::Button, QColor ( 255,255,255,0 ) ); pal.setColor ( QPalette::Window, QColor ( 255,255,255,255 ) ); pal.setColor ( QPalette::Base, QColor ( 255,255,255,255 ) ); QFont fnt=this->font(); if ( mw->retMiniMode() ) fnt.setPointSize ( 9 ); this->setFont ( fnt ); this->hide(); textEdit=new QTextEdit(this); QVBoxLayout* lay=new QVBoxLayout(this); lay->addWidget(new QLabel(tr("Terminal output:"))); lay->addWidget(textEdit); textEntry=new QLineEdit(this); textEntry->setEchoMode(QLineEdit::Password); lay->addWidget(textEntry); cancelButton=new QPushButton(tr("Cancel"),this); lay->addWidget(cancelButton); textEdit->setReadOnly(true); connect(textEntry,SIGNAL(returnPressed()),this,SLOT(slotTextEntered())); connect(cancelButton, SIGNAL(clicked(bool)),this,SLOT(slotButtonPressed())); textEdit->setFrameStyle ( QFrame::StyledPanel|QFrame::Plain ); cancelButton->setFlat(true); #ifndef Q_OS_LINUX QStyle* widgetExtraStyle; #if QT_VERSION < 0x050000 widgetExtraStyle = new QPlastiqueStyle (); #else widgetExtraStyle = QStyleFactory::create ("fusion"); #endif this->setStyle(widgetExtraStyle); textEntry->setStyle(widgetExtraStyle); textEdit->setStyle(widgetExtraStyle); textEdit->viewport()->setStyle(widgetExtraStyle); cancelButton->setStyle(widgetExtraStyle); #endif } InteractionDialog::~InteractionDialog() { // qDebug()<<"Iter dlg destruct\n"; } void InteractionDialog::appendText(QString txt) { textEntry->setEnabled(true); textEdit->append(txt); textEntry->setFocus(); interrupted=false; display=false; cancelButton->setText(tr("Cancel")); QTimer::singleShot(0, textEntry, SLOT(setFocus())); } void InteractionDialog::reset() { textEdit->clear(); } void InteractionDialog::slotTextEntered() { QString text=textEntry->text()+"\n"; textEntry->clear(); emit textEntered(text); } void InteractionDialog::slotButtonPressed() { if(!display) { emit interrupt(); interrupted=true; } else { qDebug()<<"reconnect"; emit closeInterractionDialog(); } } void InteractionDialog::setDisplayMode() { cancelButton->setText(tr("Reconnect")); textEntry->setEnabled(false); display=true; } void InteractionDialog::setInteractionMode(IMode value) { interactionMode=value; } x2goclient-4.1.2.3/src/InteractionDialog.h0000644000000000000000000000425514447111614015173 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef INTERACTIONDIALOG_H #define INTERACTIONDIALOG_H #include "x2goclientconfig.h" #include "SVGFrame.h" class ONMainWindow; class QTextEdit; class QLineEdit; class QPushButton; class InteractionDialog: public SVGFrame { Q_OBJECT public: enum IMode {SESSION,BROKER}; InteractionDialog (ONMainWindow* mainw, QWidget* parent); virtual ~InteractionDialog(); void reset(); void appendText(QString txt); bool isInterrupted() { return interrupted; } void setDisplayMode(); void setInteractionMode(IMode value); IMode getInteractionMode() { return interactionMode; } private: ONMainWindow* mw; QTextEdit* textEdit; QPushButton* cancelButton; QLineEdit* textEntry; bool interrupted; bool display; IMode interactionMode; private slots: void slotTextEntered(); void slotButtonPressed(); signals: void textEntered(QString text); void interrupt(); void closeInterractionDialog(); }; #endif x2goclient-4.1.2.3/src/LDAPSession.cpp0000644000000000000000000002363314447111614014214 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include "LDAPSession.h" #include "x2goclientconfig.h" #ifdef USELDAP #include ByteArray::ByteArray() { size=0; data=0; } ByteArray::ByteArray ( const ByteArray& src ) { size=0; data=0; *this=src; } ByteArray::~ByteArray() { _delete(); } void ByteArray::load ( const char* buf,int len ) { _delete(); if ( len>0 ) { size=len; data=new char[size+1]; if ( !data ) throw string ( "Not enouth memory" ); memcpy ( data,buf,len ); data[size]=0; } } void ByteArray::fromStdStr ( const string& src ) { load ( src.c_str(),src.size() ); } void ByteArray::operator = ( const ByteArray& src ) { load ( src.data,src.size ); } void ByteArray::_delete() { if ( data ) { delete []data; size=0; } } ///////////////////////////////////// LDAPSession::LDAPSession ( string server,int port,string bindDN, string pass, bool simple, bool start_tls ) { ld=ldap_init ( server.c_str(),port ); if ( !ld ) throw LDAPExeption ( "ldap_init","Can't initialize LDAP library." ); int ver=3; int errc=ldap_set_option ( ld,LDAP_OPT_PROTOCOL_VERSION,&ver ); if ( errc != LDAP_SUCCESS ) throw LDAPExeption ( "ldap_set_option", ldap_err2string ( errc ) ); if ( start_tls ) { errc=ldap_start_tls_s ( ld,NULL,NULL ); if ( errc != LDAP_SUCCESS ) throw LDAPExeption ( "ldap_start_tls_s", ldap_err2string ( errc ) ); } if ( !simple ) { errc=ldap_bind_s ( ld,bindDN.c_str(),pass.c_str(), LDAP_AUTH_SIMPLE ); if ( errc != LDAP_SUCCESS ) throw LDAPExeption ( "ldap_bind_s", ldap_err2string ( errc ) ); } else { errc=ldap_simple_bind_s ( ld,bindDN.c_str(),pass.c_str() ); if ( errc != LDAP_SUCCESS ) throw LDAPExeption ( "ldap_simple_bind_s", ldap_err2string ( errc ) ); } } void LDAPSession::addStringValue ( string dn, const list& values ) { list::const_iterator it=values.begin(); list::const_iterator end=values.end(); int i=0; LDAPMod** mods= ( LDAPMod** ) malloc ( sizeof ( LDAPMod* ) *values.size() +1 ); for ( ;it!=end;++it ) { mods[i]= ( LDAPMod* ) malloc ( sizeof ( LDAPMod ) ); mods[i]->mod_op=LDAP_MOD_ADD; mods[i]->mod_type= ( char* ) malloc ( sizeof ( char ) * ( *it ).attr.length() ); strcpy ( mods[i]->mod_type, ( *it ).attr.c_str() ); list::const_iterator sit= ( *it ).value.begin(); list::const_iterator send= ( *it ).value.end(); int j=0; mods[i]->mod_vals.modv_strvals= ( char** ) malloc ( sizeof ( char* ) * ( *it ).value.size() +1 ); for ( ;sit!=send;++sit ) { mods[i]->mod_vals.modv_strvals[j]= ( char* ) malloc ( sizeof ( char ) * ( *sit ).length() ); strcpy ( mods[i]->mod_vals.modv_strvals[j], ( *sit ).c_str() ); ++j; } mods[i]->mod_vals.modv_strvals[j]=0l; ++i; } mods[i]=0l; int errc= ldap_add_s ( ld,dn.c_str(),mods ); if ( errc != LDAP_SUCCESS ) throw LDAPExeption ( "ldap_add_s",ldap_err2string ( errc ) ); ldap_mods_free ( mods,1 ); } void LDAPSession::modifyStringValue ( string dn, const list& values ) { list::const_iterator it=values.begin(); list::const_iterator end=values.end(); int i=0; LDAPMod** mods= ( LDAPMod** ) malloc ( sizeof ( LDAPMod* ) *values.size() +1 ); for ( ;it!=end;++it ) { mods[i]= ( LDAPMod* ) malloc ( sizeof ( LDAPMod ) ); mods[i]->mod_op=LDAP_MOD_REPLACE; mods[i]->mod_type= ( char* ) malloc ( sizeof ( char ) * ( *it ).attr.length() ); strcpy ( mods[i]->mod_type, ( *it ).attr.c_str() ); list::const_iterator sit= ( *it ).value.begin(); list::const_iterator send= ( *it ).value.end(); int j=0; mods[i]->mod_vals.modv_strvals= ( char** ) malloc ( sizeof ( char* ) * ( *it ).value.size() +1 ); for ( ;sit!=send;++sit ) { mods[i]->mod_vals.modv_strvals[j]= ( char* ) malloc ( sizeof ( char ) * ( *sit ).length() ); strcpy ( mods[i]->mod_vals.modv_strvals[j], ( *sit ).c_str() ); ++j; } mods[i]->mod_vals.modv_strvals[j]=0l; ++i; } mods[i]=0l; int errc= ldap_modify_s ( ld,dn.c_str(),mods ); if ( errc != LDAP_SUCCESS ) throw LDAPExeption ( "ldap_modify_s",ldap_err2string ( errc ) ); ldap_mods_free ( mods,1 ); } void LDAPSession::remove ( string dn ) { int errc= ldap_delete_s ( ld,dn.c_str() ); if ( errc != LDAP_SUCCESS ) throw LDAPExeption ( "ldap_delete_s",ldap_err2string ( errc ) ); } void LDAPSession::binSearch ( string dn,const list &attributes, string searchParam, list& result ) { char** attr; attr= ( char** ) malloc ( sizeof ( char* ) *attributes.size() +1 ); int i=0; list::const_iterator it=attributes.begin(); list::const_iterator end=attributes.end(); for ( ;it!=end;++it ) { attr[i]= ( char* ) malloc ( sizeof ( char ) * ( *it ).length() ); strcpy ( attr[i], ( *it ).c_str() ); ++i; } attr[i]=0l; LDAPMessage* res; int errc=ldap_search_s ( ld,dn.c_str(),LDAP_SCOPE_SUBTREE, searchParam.c_str(),attr,0,&res ); if ( errc != LDAP_SUCCESS ) { i=0; it=attributes.begin(); for ( ;it!=end;++it ) { free ( attr[i] ); ++i; } free ( attr ); throw LDAPExeption ( "ldap_search_s",ldap_err2string ( errc ) ); } LDAPMessage *entry=ldap_first_entry ( ld,res ); while ( entry ) { LDAPBinEntry binEntry; it=attributes.begin(); for ( ;it!=end;++it ) { LDAPBinValue val; val.attr= ( *it ); berval **atr=ldap_get_values_len ( ld,entry, ( *it ).c_str() ); int count=ldap_count_values_len ( atr ); for ( i=0;ibv_val,atr[i]->bv_len ); val.value.push_back ( arr ); } ldap_value_free_len ( atr ); binEntry.push_back ( val ); } entry=ldap_next_entry ( ld,entry ); result.push_back ( binEntry ); } free ( res ); i=0; it=attributes.begin(); for ( ;it!=end;++it ) { free ( attr[i] ); ++i; } free ( attr ); } void LDAPSession::stringSearch ( string dn,const list &attributes, string searchParam, list& result ) { char** attr; attr= ( char** ) malloc ( sizeof ( char* ) *attributes.size() +1 ); int i=0; list::const_iterator it=attributes.begin(); list::const_iterator end=attributes.end(); for ( ;it!=end;++it ) { attr[i]= ( char* ) malloc ( sizeof ( char ) * ( *it ).length() +1 ); strcpy ( attr[i], ( *it ).c_str() ); ++i; } attr[i]=0l; LDAPMessage* res; int errc=ldap_search_s ( ld,dn.c_str(),LDAP_SCOPE_SUBTREE, searchParam.c_str(),attr,0,&res ); if ( errc != LDAP_SUCCESS ) { i=0; it=attributes.begin(); for ( ;it!=end;++it ) { free ( attr[i] ); ++i; } free ( attr ); throw LDAPExeption ( "ldap_search_s",ldap_err2string ( errc ) ); } LDAPMessage *entry=ldap_first_entry ( ld,res ); while ( entry ) { LDAPStringEntry stringEntry; it=attributes.begin(); for ( ;it!=end;++it ) { LDAPStringValue val; val.attr= ( *it ); char **atr=ldap_get_values ( ld,entry, ( *it ).c_str() ); int count=ldap_count_values ( atr ); for ( i=0;i LDAPSession::getStringAttrValues ( const LDAPStringEntry& entry, string attr ) { list::const_iterator it=entry.begin(); list::const_iterator end=entry.end(); list lst; for ( ;it!=end;++it ) { if ( ( *it ).attr==attr ) return ( *it ).value; } return lst; } list LDAPSession::getBinAttrValues ( const LDAPBinEntry& entry, string attr ) { list::const_iterator it=entry.begin(); list::const_iterator end=entry.end(); list lst; for ( ;it!=end;++it ) { if ( ( *it ).attr==attr ) return ( *it ).value; } return lst; } LDAPSession::~LDAPSession() { ldap_unbind ( ld ); } #endif x2goclient-4.1.2.3/src/LDAPSession.h0000644000000000000000000000577714447111614013672 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef LDAPSESSION_H #define LDAPSESSION_H #define LDAP_DEPRECATED 1 #include "x2goclientconfig.h" #ifdef USELDAP #include #include #include using namespace std; struct LDAPExeption { LDAPExeption ( string type,string str ) {err_type=type;err_str=str;} string err_type; string err_str; }; class ByteArray { public: ByteArray(); ByteArray ( const ByteArray& ); ~ByteArray(); const char* getData() {return data;} string asString() {return data;} int length() {return size;} void load ( const char*,int ); void fromStdStr ( const string& ); void operator = ( const ByteArray& ); private: void _delete(); char* data; int size; }; struct LDAPBinValue { string attr; list value; }; struct LDAPStringValue { string attr; list value; }; typedef list LDAPStringEntry; typedef list LDAPBinEntry; #endif class LDAPSession { #ifdef USELDAP public: LDAPSession ( string,int,string,string, bool simple=false, bool start_tls=true ); ~LDAPSession(); void addStringValue ( string dn, const list& values ); void remove ( string ); static list getStringAttrValues ( const LDAPStringEntry& entry, string attr ); static list getBinAttrValues ( const LDAPBinEntry& entry, string attr ); void modifyStringValue ( string dn, const list& values ); void stringSearch ( string dn,const list &attributes, string searchParam, list &result ); void binSearch ( string dn,const list &attributes, string searchParam, list &result ); private: LDAP* ld; #endif }; #endif x2goclient-4.1.2.3/src/mediawidget.cpp0000644000000000000000000002656114447111614014416 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include "mediawidget.h" #include "onmainwindow.h" #include #include #include #include #include #include #include #include #include "x2gosettings.h" #include #include #include #include #include #include "x2gologdebug.h" #include MediaWidget::MediaWidget ( QString id, ONMainWindow * mw, QWidget * parent, Qt::WindowFlags f ) : ConfigWidget ( id,mw,parent,f ) { sbgr=new QGroupBox ( tr ( "Sound" ),this ); QVBoxLayout *sndLay=new QVBoxLayout ( sbgr ); QHBoxLayout* sLay=new QHBoxLayout ( ); QVBoxLayout* sLay_sys=new QVBoxLayout ( ); QVBoxLayout* sLay_opt=new QVBoxLayout ( ); sLay->addLayout ( sLay_sys ); sLay->addLayout ( sLay_opt ); QVBoxLayout* setLay=new QVBoxLayout ( this ); sound=new QCheckBox ( tr ( "Enable sound support" ),sbgr ); QButtonGroup* sndsys=new QButtonGroup; pulse=new QRadioButton ( "PulseAudio",sbgr ); arts=new QRadioButton ( "arts",sbgr ); esd=new QRadioButton ( "esd",sbgr ); sndsys->addButton ( pulse,PULSE ); sndsys->addButton ( arts,ARTS ); sndsys->addButton ( esd,ESD ); sndsys->setExclusive ( true ); rbStartSnd=new QRadioButton ( tr ( "Start sound daemon" ),sbgr ); rbNotStartSnd=new QRadioButton ( tr ( "Use running sound daemon" ),sbgr ); cbSndSshTun=new QCheckBox ( tr ( "Use SSH port forwarding to tunnel\n" "sound system connections through firewalls" ),sbgr ); cbDefSndPort=new QCheckBox ( tr ( "Use default sound port" ),sbgr ); sbSndPort=new QSpinBox ( sbgr ); sbSndPort->setMinimum ( 1 ); sbSndPort->setMaximum ( 65535 ); QHBoxLayout *sndPortLay = new QHBoxLayout(); lSndPort=new QLabel ( tr ( "Sound port:" ),sbgr ); sndPortLay->addWidget ( lSndPort ); sndPortLay->addWidget ( sbSndPort ); sLay_sys->addWidget ( pulse ); sLay_sys->addWidget ( arts ); sLay_sys->addWidget ( esd ); sLay_opt->addWidget ( rbStartSnd ); sLay_opt->addWidget ( rbNotStartSnd ); sLay_opt->addWidget ( cbSndSshTun ); QFrame* hl=new QFrame ( sbgr ); hl->setFrameStyle ( QFrame::HLine | QFrame::Sunken ); sLay_opt->addWidget ( hl ); sLay_opt->addWidget ( cbDefSndPort ); sLay_opt->addLayout ( sndPortLay ); sndLay->addWidget ( sound ); sndLay->addLayout ( sLay ); #if defined (Q_OS_WIN) || defined (Q_OS_DARWIN) arts->hide(); hl->hide(); cbDefSndPort->hide(); lSndPort->hide(); sbSndPort->hide(); #endif /* defined (Q_OS_WIN) || defined (Q_OS_DARWIN) */ cbClientPrint=new QCheckBox ( tr ( "Client side printing support" ), this ); setLay->addWidget(sbgr); setLay->addWidget ( cbClientPrint ); setLay->addStretch(); connect ( sound,SIGNAL ( toggled ( bool ) ),this, SLOT ( slot_sndToggled ( bool ) ) ); connect ( sndsys,SIGNAL ( buttonClicked ( int ) ),this, SLOT ( slot_sndSysSelected ( int ) ) ); connect ( rbStartSnd,SIGNAL ( clicked ( ) ),this, SLOT ( slot_sndStartClicked() ) ); connect ( rbNotStartSnd,SIGNAL ( clicked ( ) ),this, SLOT ( slot_sndStartClicked() ) ); connect ( cbDefSndPort,SIGNAL ( toggled ( bool ) ),this, SLOT ( slot_sndDefPortChecked ( bool ) ) ); setDefaults(); readConfig(); } MediaWidget::~MediaWidget() { } void MediaWidget::slot_sndSysSelected ( int system ) { rbStartSnd->show(); rbNotStartSnd->show(); cbSndSshTun->hide(); cbDefSndPort->setChecked ( true ); cbDefSndPort->setEnabled ( true ); switch ( system ) { case PULSE: { rbStartSnd->hide(); rbNotStartSnd->hide(); cbSndSshTun->show(); cbSndSshTun->setEnabled ( true ); break; } case ARTS: { cbDefSndPort->setChecked ( false ); cbDefSndPort->setEnabled ( false ); sbSndPort->setValue ( 20221 ); QMessageBox::warning (NULL, tr ("Deprecation Warning"), tr ("ARTS support is scheduled to be removed soon.\n\n" "Please upgrade to PulseAudio."), QMessageBox::Ok, QMessageBox::NoButton); break; } case ESD: { rbStartSnd->hide (); rbNotStartSnd->hide (); cbSndSshTun->show (); #ifdef Q_OS_WIN cbSndSshTun->setEnabled ( false ); cbSndSshTun->setChecked ( true ); #elif defined (Q_OS_DARWIN) cbSndSshTun->setEnabled (true); #endif /* defined (Q_OS_WIN) */ #if !defined (Q_OS_WIN) && !defined (Q_OS_DARWIN) QMessageBox::warning (NULL, tr ("Deprecation Warning"), tr ("ESounD support is scheduled to be removed soon.\n\n" "Please upgrade to PulseAudio."), QMessageBox::Ok, QMessageBox::NoButton); #endif sbSndPort->setValue ( 16001 ); break; } } slot_sndStartClicked(); } void MediaWidget::slot_sndToggled ( bool val ) { arts->setEnabled ( val ); pulse->setEnabled ( val ); esd->setEnabled ( val ); rbStartSnd->setEnabled ( val ); rbNotStartSnd->setEnabled ( val ); cbSndSshTun->setEnabled ( false ); /* ESD is also handled by PA on Windows and OS X. */ #if defined (Q_OS_WIN) || defined (Q_OS_DARWIN) if ((pulse->isChecked ()) || (esd->isChecked ())) { cbSndSshTun->setEnabled (val); } #else if (pulse->isChecked ()) { cbSndSshTun->setEnabled ( val ); } #endif /* defined (Q_OS_WIN) || defined (Q_OS_DARWIN) */ lSndPort->setEnabled ( val ); if ( !arts->isChecked() ) cbDefSndPort->setEnabled ( val ); sbSndPort->setEnabled ( val ); if ( val ) slot_sndStartClicked(); } void MediaWidget::slot_sndStartClicked() { bool start=rbStartSnd->isChecked(); #ifdef Q_OS_WIN start=false; #endif if ( pulse->isChecked() ) { lSndPort->setEnabled ( true ); sbSndPort->setEnabled ( true ); cbDefSndPort->setEnabled (sound->isChecked()); } else { lSndPort->setEnabled ( !start ); sbSndPort->setEnabled ( !start ); cbDefSndPort->setEnabled ( !start ); } if ( arts->isChecked() ) cbDefSndPort->setEnabled ( false ); if ( ( !start && esd->isChecked() ) ||pulse->isChecked() ) slot_sndDefPortChecked ( cbDefSndPort->isChecked() ); } void MediaWidget::slot_sndDefPortChecked ( bool val ) { sbSndPort->setEnabled ( !val ); lSndPort->setEnabled ( !val ); if ( val ) { if ( pulse->isChecked() ) sbSndPort->setValue ( 4713 ); if ( arts->isChecked() ) sbSndPort->setValue ( 20221 ); if ( esd->isChecked() ) sbSndPort->setValue ( 16001 ); } } void MediaWidget::readConfig() { X2goSettings st ( "sessions" ); bool snd=st.setting()->value ( sessionId+"/sound", ( QVariant ) mainWindow->getDefaultUseSound() ).toBool(); QString sndsys=st.setting()->value ( sessionId+"/soundsystem", "pulse" ).toString(); bool startServ=st.setting()->value ( sessionId+"/startsoundsystem", true ).toBool(); bool sndInTun=st.setting()->value ( sessionId+"/soundtunnel", true ).toBool(); bool defSndPort=st.setting()->value ( sessionId+"/defsndport", true ).toBool(); int sndPort= st.setting()->value ( sessionId+"/sndport",4713 ).toInt(); if ( startServ ) rbStartSnd->setChecked ( true ); else rbNotStartSnd->setChecked ( true ); pulse->setChecked ( true ); slot_sndSysSelected ( PULSE ); #if defined (Q_OS_WIN) || defined (Q_OS_DARWIN) if ( sndsys=="arts" ) { sndsys="pulse"; } #endif /* defined (Q_OS_WIN) || defined (Q_OS_DARWIN) */ if ( sndsys=="arts" ) { arts->setChecked ( true ); slot_sndSysSelected ( ARTS ); } if ( sndsys=="esd" ) { esd->setChecked ( true ); slot_sndSysSelected ( ESD ); } cbSndSshTun->setChecked ( sndInTun ); sound->setChecked ( snd ); if ( !defSndPort ) sbSndPort->setValue ( sndPort ); cbDefSndPort->setChecked ( defSndPort ); if ( sndsys=="arts" ) cbDefSndPort->setChecked ( false ); slot_sndToggled ( snd ); slot_sndStartClicked(); if(!sound) cbDefSndPort->setEnabled(false); cbClientPrint->setChecked ( st.setting()->value ( sessionId+"/print", true ).toBool() ); } void MediaWidget::setDefaults() { sound->setChecked ( true ); pulse->setChecked ( true ); slot_sndToggled ( true ); slot_sndSysSelected ( PULSE ); cbSndSshTun->setChecked ( true ); rbStartSnd->setChecked ( true ); cbClientPrint->setChecked ( true ); } void MediaWidget::saveSettings() { X2goSettings st ( "sessions" ); st.setting()->setValue ( sessionId+"/sound", ( QVariant ) sound->isChecked() ); if ( arts->isChecked() ) st.setting()->setValue ( sessionId+"/soundsystem", ( QVariant ) "arts" ); if ( esd->isChecked() ) st.setting()->setValue ( sessionId+"/soundsystem", ( QVariant ) "esd" ); if ( pulse->isChecked() ) st.setting()->setValue ( sessionId+"/soundsystem", ( QVariant ) "pulse" ); st.setting()->setValue ( sessionId+"/startsoundsystem", ( QVariant ) rbStartSnd->isChecked() ); st.setting()->setValue ( sessionId+"/soundtunnel", ( QVariant ) cbSndSshTun->isChecked() ); st.setting()->setValue ( sessionId+"/defsndport", ( QVariant ) cbDefSndPort->isChecked() ); st.setting()->setValue ( sessionId+"/sndport", ( QVariant ) sbSndPort->value() ); st.setting()->setValue ( sessionId+"/print", ( QVariant ) cbClientPrint->isChecked() ); st.setting()->sync(); } x2goclient-4.1.2.3/src/mediawidget.h0000644000000000000000000000443614447111614014060 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef MEDIAWIDGET_H #define MEDIAWIDGET_H #include /** @author Oleksandr Shneyder */ class QSpinBox; class QRadioButton; class QCheckBox; class QLineEdit; class QSpinBox; class QLabel; class QPushButton; class QMainWindow; class QGroupBox; class MediaWidget : public ConfigWidget { Q_OBJECT public: MediaWidget ( QString id, ONMainWindow * mw, QWidget * parent=0, Qt::WindowFlags f=0 ); ~MediaWidget(); void setDefaults(); void saveSettings(); private slots: void slot_sndSysSelected ( int system ); void slot_sndToggled ( bool val ); void slot_sndStartClicked(); void slot_sndDefPortChecked ( bool val ); private: enum {PULSE,ARTS,ESD}; QRadioButton* arts; QRadioButton* pulse; QRadioButton* esd; QCheckBox* sound; QRadioButton* rbStartSnd; QRadioButton* rbNotStartSnd; QCheckBox* cbSndSshTun; QCheckBox* cbClientPrint; QCheckBox* cbDefSndPort; QLabel* lSndPort; QSpinBox* sbSndPort; QGroupBox *sbgr; private: void readConfig(); }; #endif x2goclient-4.1.2.3/src/non_modal_messagebox.cpp0000644000000000000000000000632514447111614016312 0ustar /************************************************************************** * Copyright (C) 2015-2023 by Mihai Moldovan * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include #include #include "non_modal_messagebox.h" #include "x2goutils.h" // Please look up the documentation in the header file! void Non_Modal_MessageBox::critical (QWidget *parent, const QString &title, const QString &text, const QString &informative_text, bool rich_text, QMessageBox::StandardButtons buttons, QMessageBox::StandardButton defaultButton) { QMessageBox *msg_box = new QMessageBox (QMessageBox::Critical, title, text, buttons, parent); msg_box->setAttribute (Qt::WA_DeleteOnClose); msg_box->setDefaultButton (defaultButton); if (rich_text) { msg_box->setTextFormat (Qt::RichText); msg_box->setInformativeText (convert_to_rich_text (informative_text, true)); } // Set to minimum width of 500px. QSpacerItem *horizontal_spacer = new QSpacerItem (500, 0, QSizePolicy::Minimum, QSizePolicy::Expanding); QGridLayout *grid_layout = (QGridLayout*) (msg_box->layout ()); grid_layout->addItem (horizontal_spacer, grid_layout->rowCount (), 0, 1, grid_layout->columnCount ()); // Here's the real magic. msg_box->setModal (false); msg_box->show (); msg_box->raise (); msg_box->activateWindow (); } void Non_Modal_MessageBox::critical (QWidget *parent, const QString &title, const QString &text, const QString &informative_text, QMessageBox::StandardButtons buttons, QMessageBox::StandardButton defaultButton) { Non_Modal_MessageBox::critical (parent, title, text, informative_text, false, buttons, defaultButton); } void Non_Modal_MessageBox::critical (QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons, QMessageBox::StandardButton defaultButton) { Non_Modal_MessageBox::critical (parent, title, text, QString (), buttons, defaultButton); } x2goclient-4.1.2.3/src/non_modal_messagebox.h0000644000000000000000000000477414447111614015765 0ustar /************************************************************************** * Copyright (C) 2015-2023 by Mihai Moldovan * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef NON_MODAL_MESSAGEBOX_H #define NON_MODAL_MESSAGEBOX_H #include class Non_Modal_MessageBox { public: // Main implementation. static void critical (QWidget *parent, const QString &title, const QString &text, const QString &informative_text, bool rich_text, QMessageBox::StandardButtons buttons = QMessageBox::Ok, QMessageBox::StandardButton defaultButton = QMessageBox::NoButton); // Wrapper. static void critical (QWidget *parent, const QString &title, const QString &text, const QString &informative_text, QMessageBox::StandardButtons buttons = QMessageBox::Ok, QMessageBox::StandardButton defaultButton = QMessageBox::NoButton); // Wrapper for QMessageBox::critical-like usage. // Use this instead QMessageBox::critical for a non-modal variant. // Caveat: this function does return immediately and will NOT return the clicked button. static void critical (QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = QMessageBox::Ok, QMessageBox::StandardButton defaultButton = QMessageBox::NoButton); }; #endif /* !defined (NON_MODAL_MESSAGEBOX_H) */ x2goclient-4.1.2.3/src/ongetpass.cpp0000644000000000000000000000736214447111614014134 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include "ongetpass.h" #include "x2goclientconfig.h" #include #include #ifdef CFGCLIENT #include #endif #ifndef Q_OS_WIN #include #include #endif #if QT_VERSION < 0x050000 #include #endif #include #include #include #include #include #include "x2gologdebug.h" int x2goMain ( int argc, char *argv[] ) { QApplication app ( argc,argv ); #ifdef Q_OS_LINUX #if QT_VERSION < 0x050000 app.setStyle ( new QPlastiqueStyle() ); #else app.setStyle ("fusion"); #endif #endif QStringList args; if ( argc > 1 ) args=app.arguments(); if ( args.count() >1 && args[1]=="--dialog" ) { #ifdef CFGCLIENT ONMainWindow::installTranslator(); #endif QString type=args[2]; QString caption=args[4]; caption=caption.replace ( "NX","X2Go" ); QString text=args[6]; if ( type=="error" || type=="panic" ) return QMessageBox::critical ( 0, caption,text ); if ( type=="ok" ) return QMessageBox::information ( 0, caption,text ); if ( type=="yesno" ) { if(text.indexOf("No response received from the remote server")!=-1 && text.indexOf("Do you want to terminate the current session")!=-1) { text=QObject::tr("No response received from the remote server. Do you want to terminate the current session?"); int rez=QMessageBox::question ( 0, caption,text, QMessageBox::Yes, QMessageBox::No ); if(rez==QMessageBox::Yes && args.count()>9) { #ifndef Q_OS_WIN int pid=args[9].toUInt(); kill(pid, SIGKILL); #else QProcess::execute("bash -c \"kill -9 "+args[9]+"\""); #endif } return rez; } else return QMessageBox::question ( 0, caption,text, QMessageBox::Yes, QMessageBox::No ); } return -1; } #ifdef CFGCLIENT else { ONMainWindow* mw = new ONMainWindow; mw->show(); int retval; app.setQuitOnLastWindowClosed(false); retval = app.exec(); delete mw; return retval; } #endif return 0; } x2goclient-4.1.2.3/src/ongetpass.h0000644000000000000000000000304614447111614013574 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef ONGETPASS_H #define ONGETPASS_H #include #ifdef __cplusplus extern "C" { #endif #ifdef Q_OS_WIN __declspec(dllexport) #endif int x2goMain ( int argc, char *argv[] ); void askpass ( const QString& param, const QString& accept, const QString& cookie, const QString& socketName ); #ifdef __cplusplus } #endif #endif x2goclient-4.1.2.3/src/onmainwindow.cpp0000644000000000000000000143416714447111614014652 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include "onmainwindow_privat.h" #include "help.h" #include #if QT_VERSION >= QT_VERSION_CHECK(5, 2, 0) #include #endif void x2goSession::operator = ( const x2goSession& s ) { agentPid=s.agentPid; clientIp=s.clientIp; cookie=s.cookie; crTime=s.crTime; display=s.display; grPort=s.grPort; server=s.server; sessionId=s.sessionId; sndPort=s.sndPort; fsPort=s.fsPort; status=s.status; sessionType=s.sessionType; command=s.command; } bool ONMainWindow::portable=false; QString ONMainWindow::homeDir; QString ONMainWindow::sessionCfg; #ifdef Q_OS_WIN QString ONMainWindow::u3Device; #endif bool ONMainWindow::debugging=false; bool ONMainWindow::libssh_debugging = false; bool ONMainWindow::libssh_packetlog = false; ONMainWindow::ONMainWindow ( QWidget *parent ) :QMainWindow ( parent ) { haveTerminal=false; #ifndef Q_OS_WIN QFile fl("/dev/tty"); if(fl.open( QIODevice::ReadOnly)) { haveTerminal=true; fl.close(); } #endif #ifdef Q_OS_LINUX image=shape=0; #endif x2goInfof(1) << tr("Starting X2Go Client %1...").arg (QString (VERSION)); debugging = false; libssh_debugging = false; libssh_packetlog = false; resourceTmpDir=0; setFocusPolicy ( Qt::NoFocus ); installTranslator(); autoresume=true; cleanAllFiles=false; drawMenu=true; usePGPCard=false; PGPInited=false; extLogin=false; startMaximized=false; startHidden=false; keepTrayIcon=false; hideFolderSharing=false; brokerNoauthWithSessionUsername=false; brokerCredsForSession=false; thinMode=false; closeDisconnect=false; showHaltBtn=false; showBrokerLogoutBtn=false; defaultUseSound=true; defaultSetKbd=true; extStarted=false; cmdAutologin=false; defaultLink=2; defaultFullscreen=false; defaultXinerama=false; acceptRsa=false; cardStarted=false; cardReady=false; shadowSession=false; proxyRunning=false; // useSshAgent=false; closeEventSent=false; miniMode=false; embedMode=false; proxyWinEmbedded=false; proxyWinId=0; embedParent=embedChild=0l; defaultSession=false; connTest=false; defaultUser=false; defaultWidth=800; defaultHeight=600; defaultPack="16m-jpeg"; defaultQuality=9; defaultLayout<physicalDpiX(); int dpiy = QApplication::desktop()->physicalDpiY(); if ( dpix >0 && dpiy >0) { defaultSetDPI=true; defaultDPI=(dpix+dpiy)/2; } else { defaultSetDPI=false; defaultDPI=96; } #ifdef Q_OS_WIN clientSshPort="7022"; X2goSettings st ( "settings" ); winSshdStarted=false; #else sshd=0l; #endif appDir=QApplication::applicationDirPath(); homeDir=QDir::homePath(); #ifdef Q_OS_WIN xorg=0l; xDisplay=0; x_start_tries_ = 0; x_start_limit_ = 3; #endif if(X2goSettings::centralSettings()) { x2goInfof(0)<<"using central configuration"; noSessionEdit=true; } cleanAskPass(); setWindowTitle ( tr ( "X2Go Client" ) ); ld=0; tunnel=0l; sndTunnel=0l; fsTunnel=0l; nxproxy=0l; soundServer=0l; scDaemon=0l; statusLabel=0; gpg=0l; bBrokerLogout = NULL; restartResume=false; isPassShown=true; readExportsFrom=QString::null; spoolTimer=0l; brokerAliveTimer=0l; brokerSyncTimer=0l; #ifdef Q_OS_DARWIN modMapTimer = NULL; kbMap = QString (); #endif /* defined(Q_OS_DARWIN) */ ldapOnly=false; embedControlChanged=false; resourcesLoaded=true; statusString=tr ( "connecting" ); #if defined (Q_OS_DARWIN) || defined (Q_OS_WIN) pulseManager = NULL; pulseManagerThread = NULL; #endif /* defined (Q_OS_DARWIN) || defined (Q_OS_WIN) */ connectionType=DEFAULT; hide(); kdeIconsPath=getKdeIconsPath(); addToAppNames ( "WWWBROWSER",tr ( "Internet browser" ) ); addToAppNames ( "MAILCLIENT",tr ( "Email client" ) ); addToAppNames ( "OFFICE",tr ( "OpenOffice.org" ) ); addToAppNames ( "TERMINAL",tr ( "Terminal" ) ); #ifndef Q_OS_LINUX #if QT_VERSION < 0x050000 widgetExtraStyle = new QPlastiqueStyle (); #else widgetExtraStyle = QStyleFactory::create ("fusion"); #endif #endif #ifdef CFGCLIENT QStringList args; if(!X2goSettings::centralSettings()) args=QCoreApplication::arguments(); else { X2goSettings st ( "settings" ); QString cmdLine=st.setting()->value ( "commandline", "" ).toString(); // x2goErrorf(100)<<"cmd line:"<show(); } void ONMainWindow::destroySplash() { if(splash) { splash->close(); delete splash; splash=0; } } void ONMainWindow::initUI() { //set homedir as portable,etc #ifdef Q_OS_WIN QString u3Path=u3DataPath(); //we have U3 System if ( u3Path.length() >0 ) { portableDataPath=u3Path; ONMainWindow::portable=true; setWindowTitle ( "X2Go Client - U3" ); } #endif initSplash(); if ( ONMainWindow::portable ) { if ( portableDataPath.length() <=0 ) portableDataPath=QDir::currentPath(); homeDir=portableDataPath; x2goInfof(2)<start(1000); } loadSettings(); trayIconActiveConnectionMenu = NULL; trayIconMenu=NULL; trayAutoHidden=false; trayEnabled=trayMinToTray=trayMinCon=trayMaxDiscon=false; trayIconInit(); if(brokerMode) statusBar()->show(); if ( embedMode ) { miniMode=false; useLdap=false; } if ( readExportsFrom!=QString::null ) { exportTimer=new QTimer ( this ); connect ( exportTimer,SIGNAL ( timeout() ),this, SLOT ( slotExportTimer() ) ); } if ( extLogin ) { extTimer=new QTimer ( this ); extTimer->start ( 2000 ); connect ( extTimer,SIGNAL ( timeout() ),this, SLOT ( slotExtTimer() ) ); } if ( startMaximized ) { QTimer::singleShot ( 10, this, SLOT ( slotResize() ) ); } QDesktopWidget wd; if ( wd.screenGeometry(wd.screenNumber(this)).width() <1024 || wd.screenGeometry(wd.screenNumber(this)).height() <768 ) { miniMode=true; x2goDebug<<"Switching to \"mini\" mode..."; } if ( usePGPCard && !useLdap) { QTimer::singleShot ( 10, this, SLOT ( slotStartPGPAuth() ) ); } //fr=new SVGFrame(QString::null,true,this); fr=new IMGFrame ( ( QImage* ) 0l,this ); setCentralWidget ( fr ); // See if BGFile is a directory and retrieve an SVG file randomly from within QFileInfo bg_dir(BGFile); if (bg_dir.isDir()) { QDirIterator it(BGFile, QStringList() << "*.svg", QDir::Files, QDirIterator::NoIteratorFlags); QStringList fileList; while (it.hasNext()) fileList << it.next(); qsrand(QTime::currentTime().msec()); int max=fileList.size(); int random_selector=qrand() % max; BGFile=fileList.at(random_selector); } if (BGFile.size()) bgFrame=new SVGFrame ( ( QString ) BGFile,true,fr ); else { if(QFile::exists(images_resource_path("/svg/bg.png"))) { bgFrame=new SVGFrame ( ( QString ) images_resource_path("/svg/bg.png"),true,fr ); } else { bgFrame=new SVGFrame ( ( QString ) images_resource_path("/svg/bg.svg"),true,fr ); } } //bgFrame=new SVGFrame((QString)"/home/admin/test.svg",false,fr); QString x2gologopath=images_resource_path("/svg/x2gologo.svg"); SVGFrame* x2g=new SVGFrame ( ( QString ) x2gologopath, false,fr ); QPalette pl=x2g->palette(); pl.setColor ( QPalette::Base, QColor ( 255,255,255,0 ) ); pl.setColor ( QPalette::Window, QColor ( 255,255,255,0 ) ); x2g->setPalette ( pl ); QString onlogopath; if (OnFile.size()) { onlogopath=OnFile; } else { onlogopath=images_resource_path ("/svg/onlogo.svg"); } on=new SVGFrame ( onlogopath,false,fr ); on->setPalette ( pl ); if ( !miniMode ) { QImage im(onlogopath); if(im.width()&&im.height()) { on->setFixedSize ( 100*im.width()/im.height(),100 ); } QImage im1(x2gologopath); if(im1.width()&&im1.height()) { x2g->setFixedSize ( 100*im1.width()/im1.height(),100 ); } } else { x2g->setFixedSize ( 50,50 ); on->setFixedSize ( 50,50 ); } mainL=new QHBoxLayout ( fr ); QVBoxLayout* onlay=new QVBoxLayout(); onlay->addStretch(); onlay->addWidget ( on ); QVBoxLayout* x2golay=new QVBoxLayout(); x2golay->addStretch(); x2golay->addWidget ( x2g ); bgLay=new QHBoxLayout ( bgFrame ); bgLay->setSpacing ( 0 ); bgLay->setMargin ( 0 ); bgLay->addLayout ( onlay ); bgLay->addStretch(); username=new QHBoxLayout(); bgLay->addLayout ( username ); if ( embedMode ) bgLay->addStretch(); bgLay->addLayout ( x2golay ); act_set=new QAction ( QIcon ( iconsPath ( "/32x32/edit_settings.png" ) ), tr ( "&Settings ..." ),this ); if (supportMenuFile!=QString::null) { act_support=new QAction ( tr ( "Support ..." ),this ); connect ( act_support,SIGNAL ( triggered ( bool ) ),this, SLOT ( slotSupport() ) ); } act_abclient=new QAction ( QIcon ( iconsPath("/32x32/x2goclient.png" )), tr ( "About X2Go Client" ),this ); connect ( act_set,SIGNAL ( triggered ( bool ) ),this, SLOT ( slotConfig() ) ); connect ( act_abclient,SIGNAL ( triggered ( bool ) ),this, SLOT ( slotAbout() ) ); sessionExplorer=new SessionExplorer(this); #ifdef Q_OS_DARWIN embedMode=false; #endif #if defined (Q_OS_WIN) //&& defined (CFGCLIENT ) xorgSettings(); #endif #ifdef Q_OS_WIN winServersReady=false; saveCygnusSettings(); #endif initPassDlg(); initStatusDlg(); interDlg=new InteractionDialog(this, bgFrame); connect(interDlg, SIGNAL(closeInterractionDialog()), this, SLOT(slotCloseInteractionDialog())); username->addWidget ( interDlg ); if ( !embedMode ) { initWidgetsNormal(); } #ifdef Q_OS_WIN QProcess::startDetached("x2gohelper.exe "+QString::number(GetCurrentProcessId())); QTimer::singleShot ( 500, this, SLOT ( startWinServers() ) ); #endif /* FIXME: add Linux. */ #if defined (Q_OS_DARWIN) || defined (Q_OS_WIN) QTimer::singleShot (500, this, SLOT (pulseManagerWrapper ())); #endif /* defined (Q_OS_DARWIN) || defined (Q_OS_WIN) */ mainL->setSpacing ( 0 ); mainL->setMargin ( 0 ); mainL->insertWidget ( 0, bgFrame ); hide(); QTimer::singleShot ( 1, this, SLOT ( slotResize() ) ); connect ( fr,SIGNAL ( resized ( const QSize ) ),this, SLOT ( slotResize ( const QSize ) ) ); slotResize ( fr->size() ); #ifdef Q_OS_LINUX if (thinMode) { QTimer *timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(slotSyncX())); timer->start(200); } #endif if (showHaltBtn) { QPushButton* bHalt=new QPushButton(bgFrame); QPixmap p(images_resource_path("/png/power-button.png")); bHalt->setIcon(p); bHalt->setFocusPolicy(Qt::NoFocus); bHalt->setFixedSize(32,32); bHalt->move(10,10); bHalt->show(); connect(bHalt,SIGNAL(clicked()),this, SLOT(slotShutdownThinClient())); } bBrokerLogout = new QPushButton (bgFrame); QPixmap p (images_resource_path("/png/broker-logout-button.png")); bBrokerLogout->setIcon (p); bBrokerLogout->setFocusPolicy (Qt::NoFocus); bBrokerLogout->setFixedSize (32,32); if (showHaltBtn) { bBrokerLogout->move (40,10); } else { bBrokerLogout->move (10,10); } bBrokerLogout->setEnabled (false); if (showBrokerLogoutBtn) { bBrokerLogout->show (); } else { bBrokerLogout->hide (); } connect (bBrokerLogout, SIGNAL (clicked ()), this, SLOT (slotBrokerLogoutButton ())); if (brokerMode) { broker=new HttpBrokerClient ( this, &config ); connect ( broker,SIGNAL ( fatalHttpError() ),this, SLOT ( close() ) ); connect ( broker, SIGNAL ( authFailed()), this ,SLOT ( slotGetBrokerAuth())); connect ( broker, SIGNAL( sessionsLoaded()), this, SLOT (slotReadSessions())); connect ( broker, SIGNAL ( sessionSelected()), this, SLOT (slotGetBrokerSession())); connect ( broker, SIGNAL ( passwordChanged(QString)), this, SLOT ( slotPassChanged(QString))); connect (broker, SIGNAL (enableBrokerLogoutButton ()), this, SLOT (slotEnableBrokerLogoutButton ())); brokerAliveTimer=new QTimer(this); connect ( brokerAliveTimer, SIGNAL ( timeout() ), this, SLOT ( slotSendBrokerAlive() ) ); brokerSyncTimer=new QTimer(this); connect ( brokerSyncTimer, SIGNAL( timeout()), broker , SLOT(getUserSessions())); } initSelectSessDlg(); proxyWinTimer=new QTimer ( this ); connect ( proxyWinTimer, SIGNAL ( timeout() ), this, SLOT ( slotFindProxyWin() ) ); xineramaTimer=new QTimer (this); connect( xineramaTimer, SIGNAL(timeout()), this, SLOT(slotConfigXinerama())); x2goInfof(3)<= QT_VERSION_CHECK(5, 0, 0) resize(QGuiApplication::primaryScreen()->size()); #else showMaximized(); #endif activateWindow(); raise(); } QTimer::singleShot (200, this, SLOT (slotInitLibssh ())); } void ONMainWindow::slotShutdownThinClient() { QFile file(QDir::homePath()+"/.halt"); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) return; QTextStream out(&file); out << "\n"; file.close(); } void ONMainWindow::slotEnableBrokerLogoutButton () { bBrokerLogout->setEnabled (true); } void ONMainWindow::slotBrokerLogoutButton () { /* * Log out of the broker if currently logged in, otherwise * does nothing. */ if (config.brokerAuthenticated) { x2goDebug << "Logging off from broker via logout button."; QTimer::singleShot (1, this, SLOT (slotGetBrokerAuth ())); } } void ONMainWindow::slotSendBrokerAlive() { sendEventToBroker(ALIVE); } void ONMainWindow::slotSyncX() { if (proxyRunning) { if (!isHidden()) hide(); #ifdef Q_OS_LINUX XSync(QX11Info::display(),false); #endif } else { if (isHidden()) { showMaximized(); activateWindow(); raise(); } } } bool ONMainWindow::get_translator (QString file_name_start, QTranslator **translator) { QTranslator *tmp_translator = new QTranslator (); /* Qt 4.8.0 introduced a new overload for QTranslator::load(), taking a QLocale * object and loading up the UI language. * Additionally, a lower-cased version is automatically added to the search * list on case-sensitive file systems. * We still need to iterate over the UI languages list in case an English * locale is in there. As we do not ship a nop-English translation, loading * an English translation will always fail and the next language in the list * be preferred. * We also still need the original "compat" version for Qt < 4.8.0. */ QString filename = file_name_start; QStringList ui_languages; #if QT_VERSION < 0x040800 filename = QString (filename + "_%1" ).arg (QLocale::system ().name ()); filename = filename.toLower (); #else /* QT_VERSION < 0x040800 */ ui_languages = QLocale::system ().uiLanguages (); #endif /* QT_VERSION < 0x040800 */ #if QT_VERSION < 0x040800 if (tmp_translator->load (filename)) { *translator = tmp_translator; x2goInfof (4) << tr ("Translator: ") + filename.toLatin1 () + tr (" found."); return (true); } else { x2goWarningf (1) << tr ("Can't load translator: ") + filename.toLatin1 (); return (false); } #else /* QT_VERSION < 0x040800 */ QString load_filename = ""; bool translator_found = false; for (QStringList::const_iterator it = ui_languages.constBegin (); it != ui_languages.constEnd (); ++it) { /* Respect English locales. Don't try to load any translation, because we do not ship nop-English translations. */ if ((*it).startsWith ("en")) { x2goWarningf (1) << "English language requested, not loading translator."; break; } else { /* * QLocale::uiLanguages() may return an unexpected format. * See: https://bugreports.qt.io/browse/QTBUG-25973 */ QString tmp_locale = (*it); tmp_locale.replace ("-", "_"); load_filename = filename; load_filename.append ("_").append (tmp_locale.toLower ()); if (tmp_translator->load (load_filename)) { /* Some translation successfully loaded. That's good enough. */ x2goInfof (4) << tr ("Translator: ") + load_filename.toLatin1 () + tr (" found."); translator_found = true; *translator = tmp_translator; break; } else { x2goWarningf (1) << tr ("Non-fatal: can't load translator: ") + load_filename.toLatin1 (); x2goWarningf (1) << tr ("Trying to load language with lower preference, if existent."); } } } return (translator_found); #endif /* QT_VERSION < 0x040800 */ } void ONMainWindow::installTranslator () { QTranslator *x2goclientTranslator = new QTranslator (); bool translator_found = get_translator (QString (":/i18n/x2goclient"), &x2goclientTranslator); if (translator_found) { QCoreApplication::installTranslator (x2goclientTranslator); } QTranslator *qtTranslator = new QTranslator (); translator_found = get_translator (QString (":/i18n/qt"), &qtTranslator); if (translator_found) { QCoreApplication::installTranslator (qtTranslator); } } void ONMainWindow::initWidgetsEmbed() { } void ONMainWindow::initWidgetsNormal() { username->setSpacing ( 10 ); username->addStretch(); username->addStretch(); ln=new SVGFrame ( ( QString ) images_resource_path("/svg/line.svg"),true,fr ); ln->setFixedWidth ( ln->sizeHint().width() ); uname=new QLineEdit ( bgFrame ); setWidgetStyle ( uname ); uname->hide(); uname->setFrame ( false ); u=new QLabel ( tr ( "Session:" ),bgFrame ); u->hide(); QFont fnt=u->font(); fnt.setPointSize ( 16 ); if ( miniMode ) { fnt.setPointSize ( 12 ); } u->setFont ( fnt ); connect ( uname,SIGNAL ( returnPressed() ),this, SLOT ( slotUnameEntered() ) ); QPalette pal=u->palette(); pal.setColor ( QPalette::WindowText, QColor ( 200,200,200,255 ) ); u->setPalette ( pal ); uname->setFont ( fnt ); pal=uname->palette(); pal.setColor ( QPalette::Base, QColor ( 255,255,255,0 ) ); pal.setColor ( QPalette::Text, QColor ( 200,200,200,255 ) ); uname->setPalette ( pal ); u->show(); uname->show(); QVBoxLayout* vblay=new QVBoxLayout(); users=new QScrollArea ( fr ); vblay->addLayout(sessionExplorer->getSelectLayout()); vblay->addLayout(sessionExplorer->getNavigationLayout()); vblay->addWidget(users); pal=users->verticalScrollBar()->palette(); pal.setBrush ( QPalette::Window, QColor ( 110,112,127,255 ) ); pal.setBrush ( QPalette::Base, QColor ( 110,112,127,255 ) ); pal.setBrush ( QPalette::Button, QColor ( 110,112,127,255 ) ); users->verticalScrollBar()->setPalette ( pal ); users->setFrameStyle ( QFrame::Plain ); users->setFocusPolicy ( Qt::NoFocus ); pal=users->palette(); pal.setBrush ( QPalette::Window, QColor ( 110,112,127,255 ) ); users->setPalette ( pal ); users->setWidgetResizable ( true ); uframe=new QFrame(); users->setWidget ( uframe ); mainL->insertWidget ( 1, ln ); // mainL->addWidget ( users ); mainL->addLayout(vblay); QAction *act_exit=new QAction ( QIcon ( iconsPath ( "/32x32/exit.png" ) ), tr ( "&Quit" ),this ); act_exit->setShortcut ( tr ( "Ctrl+Q" ) ); act_exit->setStatusTip ( tr ( "Quit" ) ); act_new=new QAction ( QIcon ( iconsPath ( "/32x32/new_file.png" ) ), tr ( "&New session ..." ),this ); act_new->setShortcut ( tr ( "Ctrl+N" ) ); setWindowIcon ( QIcon ( iconsPath("/128x128/x2go.png" )) ); act_edit=new QAction ( QIcon ( iconsPath ( "/32x32/edit.png" ) ), tr ( "Session management ..." ),this ); act_edit->setShortcut ( tr ( "Ctrl+E" ) ); if (noSessionEdit) { act_edit->setEnabled(false); act_new->setEnabled(false); } act_sessicon=new QAction ( QIcon ( iconsPath ( "/32x32/create_file.png" ) ), tr ( "&Create session icon on desktop ..." ), this ); if (brokerMode) act_sessicon->setEnabled(false); if (changeBrokerPass) { act_changeBrokerPass=new QAction ( QIcon ( iconsPath ( "/32x32/auth.png" ) ), tr ( "&Set broker password ..." ), this ); connect ( act_changeBrokerPass,SIGNAL ( triggered(bool)),this, SLOT ( slotChangeBrokerPass()) ); act_changeBrokerPass->setEnabled(false); } if (connTest) { act_testCon=new QAction ( QIcon ( iconsPath ( "/32x32/contest.png" ) ), tr ( "&Connectivity test ..." ), this ); connect ( act_testCon,SIGNAL ( triggered(bool)),this, SLOT ( slotTestConnection()) ); } QAction *act_tb=new QAction ( tr ( "Show toolbar" ),this ); act_tb->setCheckable ( true ); act_tb->setChecked ( showToolBar ); QAction *act_abqt=new QAction ( tr ( "About Qt" ),this ); connect ( act_abqt,SIGNAL ( triggered ( bool ) ),this, SLOT ( slotAboutQt() ) ); connect ( act_new,SIGNAL ( triggered ( bool ) ),this, SLOT ( slotNewSession() ) ); connect ( act_sessicon,SIGNAL ( triggered ( bool ) ),this, SLOT ( slotCreateSessionIcon() ) ); connect ( act_edit,SIGNAL ( triggered ( bool ) ),this, SLOT ( slotManage() ) ); connect ( act_exit,SIGNAL ( triggered ( bool ) ),this, SLOT ( trayQuit()) ) ; connect ( act_tb,SIGNAL ( toggled ( bool ) ),this, SLOT ( displayToolBar ( bool ) ) ); stb=addToolBar ( tr ( "Show toolbar" ) ); if ( drawMenu ) { QMenu* menu_sess=menuBar()->addMenu ( tr ( "&Session" ) ); QMenu* menu_opts=0; if(!X2goSettings::centralSettings()) menu_opts=menuBar()->addMenu ( tr ( "&Options" ) ); if (!brokerMode && !X2goSettings::centralSettings()) { menu_sess->addAction ( act_new ); menu_sess->addAction ( act_edit ); #if (!defined Q_OS_DARWIN) if ( !portable ) menu_sess->addAction ( act_sessicon ); #endif menu_sess->addSeparator(); } menu_sess->addAction ( act_exit ); if(!X2goSettings::centralSettings()) { menu_opts->addAction ( act_set ); menu_opts->addAction ( act_tb ); if (changeBrokerPass) menu_opts->addAction(act_changeBrokerPass); if (connTest) menu_opts->addAction(act_testCon); } QMenu* menu_help=menuBar()->addMenu ( tr ( "&Help" ) ); if (supportMenuFile!=QString::null) menu_help->addAction ( act_support ); menu_help->addAction ( act_abclient ); menu_help->addAction ( act_abqt ); if (!brokerMode) { stb->addAction ( act_new ); stb->addAction ( act_edit ); #if (!defined Q_OS_DARWIN) if ( !portable ) stb->addAction ( act_sessicon ); #endif stb->addSeparator(); } stb->addAction ( act_set ); if (changeBrokerPass) stb->addAction(act_changeBrokerPass); if (connTest) stb->addAction(act_testCon); if ( !showToolBar || X2goSettings::centralSettings()) stb->hide(); connect ( act_tb,SIGNAL ( toggled ( bool ) ),stb, SLOT ( setVisible ( bool ) ) ); } else stb->hide(); #if !defined USELDAP useLdap=false; #endif if ( useLdap ) { act_new->setEnabled ( false ); act_edit->setEnabled ( false ); u->setText ( tr ( "Login:" ) ); QTimer::singleShot ( 1500, this, SLOT ( readUsers() ) ); } else { if (!brokerMode) QTimer::singleShot ( 1, this, SLOT ( slotReadSessions() ) ); else { bgLay->insertStretch(3); QTimer::singleShot(1, this,SLOT(slotGetBrokerAuth())); } } } void ONMainWindow::slotPassChanged(const QString& result) { if (result==QString::null) { QMessageBox::critical(this, tr("Error"),tr("Operation failed")); } else { QMessageBox::information(this, tr("Password changed"),tr("Password changed")); config.brokerPass=result; } setEnabled(true); slotClosePass(); sessionStatusDlg->hide(); } void ONMainWindow::slotTestConnection() { ConTest test( broker, config.brokerurl, this); test.exec(); } void ONMainWindow::slotChangeBrokerPass() { x2goDebug<<"Changing broker password."; BrokerPassDlg passDlg; if (passDlg.exec()!=QDialog::Accepted) return; if (passDlg.oldPass()!=config.brokerPass) { QMessageBox::critical(this,tr("Error"),tr("Wrong password!")); return; } broker->changePassword(passDlg.newPass()); setStatStatus ( tr ( "Connecting to broker" ) ); stInfo->insertPlainText ( "broker url: "+config.brokerurl ); setEnabled ( false ); uname->hide(); u->hide(); return; } void ONMainWindow::slotCheckPortableDir() { if (!QFile::exists(homeDir)) { x2goDebug<<"Portable directory does not exist, closing."; close(); } } void ONMainWindow::slotGetBrokerAuth() { pass->clear(); login->clear(); QString pixFile=iconsPath("/128x128/x2gosession.png"); if (SPixFile!=QString::null) pixFile=SPixFile; QPixmap pix(pixFile); if ( !miniMode ) { fotoLabel->setPixmap ( pix.scaled ( 64,64, Qt::IgnoreAspectRatio, Qt::SmoothTransformation ) ); fotoLabel->setFixedSize ( 64,64 ); } else { fotoLabel->setPixmap ( pix.scaled ( 48,48, Qt::IgnoreAspectRatio, Qt::SmoothTransformation ) ); fotoLabel->setFixedSize ( 48,48 ); } users->hide(); ln->hide(); QString text=tr("Authentication"); /* if(config.brokerName.length()>0) text+=config.brokerName; else text+=config.brokerurl;*/ nameLabel->setText ( text ); slotShowPassForm(); config.brokerAuthenticated = false; bBrokerLogout->setEnabled (false); statusBar()->showMessage(config.brokerurl); if(config.brokerUser.length()>0) { login->setText(config.brokerUser); pass->setFocus(); } if(config.brokerNoAuth) slotSessEnter(); else if(config.brokerurl.indexOf("ssh://")==0 && (config.brokerAutologin || config.brokerKrbLogin|| config.brokerSshKey.length()>0)) slotSessEnter(); } void ONMainWindow::setBrokerStatus(const QString& text, bool error) { QPalette p=statusBar()->palette(); if(error) p.setColor(QPalette::WindowText, QColor(204,54,54)); else p.setColor(QPalette::WindowText, QColor(22,103,39)); statusBar()->setPalette(p); statusBar()->showMessage(text); if(splash) { splash->showMessage(text, Qt::AlignLeft|Qt::AlignBottom, Qt::white); } } void ONMainWindow::trayIconInit() { X2goSettings st ( "settings" ); trayEnabled=st.setting()->value ( "trayicon/enabled", false ).toBool(); trayMinCon=st.setting()->value ( "trayicon/mincon", false ).toBool(); trayMaxDiscon=st.setting()->value ( "trayicon/maxdiscon", false ).toBool(); trayNoclose=st.setting()->value ( "trayicon/noclose", false ).toBool(); trayMinToTray=st.setting()->value ( "trayicon/mintotray", false ).toBool(); if (!trayEnabled) { trayMinCon=trayMaxDiscon=trayNoclose=trayMinToTray=false; if (trayIcon) { delete trayIcon; delete trayIconMenu; trayIcon=0l; trayIconMenu=0l; } } else { if (!trayIcon) { trayIconMenu = new QMenu(this); trayIconMenu->addAction(tr("Restore"),this, SLOT(showNormal())); trayIconActiveConnectionMenu = trayIconMenu->addMenu(tr("Not connected")); appMenu[Application::MULTIMEDIA]=initTrayAppMenu(tr("Multimedia"), QPixmap(iconsPath("/22x22/applications-multimedia.png"))); appMenu[Application::DEVELOPMENT]=initTrayAppMenu(tr("Development"), QPixmap(iconsPath("/22x22/applications-development.png"))); appMenu[Application::EDUCATION]=initTrayAppMenu(tr("Education"), QPixmap(iconsPath("/22x22/applications-education.png"))); appMenu[Application::GAME]=initTrayAppMenu(tr("Game"), QPixmap(iconsPath("/22x22/applications-games.png"))); appMenu[Application::GRAPHICS]=initTrayAppMenu(tr("Graphics"), QPixmap(iconsPath("/22x22/applications-graphics.png"))); appMenu[Application::NETWORK]=initTrayAppMenu(tr("Network"), QPixmap(iconsPath("/22x22/applications-internet.png"))); appMenu[Application::OFFICE]=initTrayAppMenu(tr("Office"), QPixmap(iconsPath("/22x22/applications-office.png"))); appMenu[Application::SETTINGS]=initTrayAppMenu(tr("Settings"), QPixmap(iconsPath("/22x22/preferences-system.png"))); appMenu[Application::SYSTEM]=initTrayAppMenu(tr("System"), QPixmap(iconsPath("/22x22/applications-system.png"))); appMenu[Application::UTILITY]=initTrayAppMenu(tr("Utility"), QPixmap(iconsPath("/22x22/applications-utilities.png"))); appMenu[Application::OTHER]=initTrayAppMenu(tr("Other"), QPixmap(iconsPath("/22x22/applications-other.png"))); appSeparator=trayIconActiveConnectionMenu->addSeparator(); if (!hideFolderSharing) trayIconActiveConnectionMenu->addAction(tr ("Share folder ..." ),this, SLOT(slotExportDirectory())); trayIconActiveConnectionMenu->addAction(tr("Suspend"),this, SLOT(slotSuspendSessFromSt())); trayIconActiveConnectionMenu->addAction(tr("Terminate"),this, SLOT(slotTermSessFromSt())); connect (trayIconActiveConnectionMenu, SIGNAL(triggered(QAction*)), this, SLOT(slotAppMenuTriggered(QAction*))); if (sessionStatusDlg && sessionStatusDlg->isVisible()) { if (!useLdap) { if (!(sessionExplorer->getLastSession())) { x2goDebug << "No session selected, not setting tray icon title."; } else { trayIconActiveConnectionMenu->setTitle(sessionExplorer->getLastSession()->name()); } } else trayIconActiveConnectionMenu->setTitle(lastUser->username()); } else { trayIconActiveConnectionMenu->setEnabled(false); } trayIconMenu->addSeparator(); trayIconMenu->addAction(tr("Quit"),this, SLOT(trayQuit())); // setup the tray icon itself trayIcon = new QSystemTrayIcon(this); #ifndef Q_OS_DARWIN connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(trayIconActivated(QSystemTrayIcon::ActivationReason))); #endif connect(trayIcon, SIGNAL(messageClicked()), this, SLOT(trayMessageClicked())); trayIcon->setContextMenu(trayIconMenu); trayIcon->setIcon(QIcon ( iconsPath("/128x128/x2go.png")) ); #ifdef Q_OS_DARWIN trayIcon->setToolTip(tr("A click displays the context menu.")); #else trayIcon->setToolTip(tr("A left click hides or restores the window. A right click displays the context menu.")); #endif } if (!startHidden | forceToShowTrayicon) { trayIcon->show(); plugAppsInTray(); } } } QMenu* ONMainWindow::initTrayAppMenu(QString text, QPixmap icon) { QMenu* menu=trayIconActiveConnectionMenu->addMenu(text); if (!keepTrayIcon) { menu->setIcon(icon); } return menu; } void ONMainWindow::slotAppMenuTriggered(QAction* action) { x2goDebug<<"slotAppMenuTriggered: "<data().toString(); if (action->data().toString() != "") runApplication(action->data().toString()); } void ONMainWindow::plugAppsInTray() { if (!trayIcon) return; removeAppsFromTray(); x2goDebug<<"Plugging apps in tray."; bool empty=true; topActions.clear(); foreach(Application app, applications) { QAction* act; if (app.category==Application::TOP) { act=new QAction(app.icon,app.name,trayIconActiveConnectionMenu); trayIconActiveConnectionMenu->insertAction(appSeparator, act); topActions.append(act); } else { act=appMenu[app.category]->addAction(app.icon,app.name); appMenu[app.category]->menuAction()->setVisible(true); } act->setToolTip(app.comment); act->setData(app.exec); empty=false; } if (!empty) appSeparator->setVisible(true); } void ONMainWindow::removeAppsFromTray() { if (!trayIcon) return; x2goDebug<<"Removing apps from tray"; for (int i=0; i<=Application::OTHER; ++i) { appMenu[i]->clear(); appMenu[i]->menuAction()->setVisible(false); } foreach (QAction* act, topActions) { trayIconActiveConnectionMenu->removeAction(act); delete act; } topActions.clear(); appSeparator->setVisible(false); } QString ONMainWindow::findTheme ( QString /*theme*/ ) { return QString::null; } QString ONMainWindow::getKdeIconsPath() { return ":/img/icons"; } void ONMainWindow::slotResize ( const QSize sz ) { if ( startHidden ) { return; } int height; int usize; height=sz.height(); if ( !embedMode ) { if ( !miniMode ) { usize=sz.width()-800; if ( usize<360 ) usize=360; if ( usize>500 ) usize=500; } else { usize=285; } if ( users->width() !=usize ) { users->setFixedWidth ( usize ); if ( useLdap ) { QList::iterator it; QList::iterator end=names.end(); for ( it=names.begin(); it!=end; it++ ) { if ( !miniMode ) ( *it )->move ( ( usize-360 ) /2, ( *it )->pos().y() ); else ( *it )->move ( ( usize-250 ) /2, ( *it )->pos().y() ); } } else { QList::iterator fit; QList::iterator fend=sessionExplorer->getFoldersList()->end(); for ( fit=sessionExplorer->getFoldersList()->begin(); fit!=fend; fit++ ) { if ( !miniMode ) ( *fit )->move ( ( usize-360 ) /2, ( *fit )->pos().y() ); else ( *fit )->move ( ( usize-250 ) /2, ( *fit )->pos().y() ); } QList::iterator it; QList::iterator end=sessionExplorer->getSessionsList()->end(); for ( it=sessionExplorer->getSessionsList()->begin(); it!=end; it++ ) { if ( !miniMode ) ( *it )->move ( ( usize-360 ) /2, ( *it )->pos().y() ); else ( *it )->move ( ( usize-250 ) /2, ( *it )->pos().y() ); } } } u->setFixedWidth ( u->sizeHint().width() ); int bwidth=bgFrame->width(); int upos= ( bwidth-u->width() ) /2; if ( upos<0 ) upos=0; int rwidth=bwidth- ( upos+u->width() +5 ); if ( rwidth<0 ) rwidth=1; uname->setMinimumWidth ( rwidth ); u->move ( upos,height/2 ); uname->move ( u->pos().x() +u->width() +5,u->pos().y() ); sessionExplorer->resize(); } } void ONMainWindow::closeClient() { destroySplash(); x2goInfof(6)<hide(); closeEventSent=true; if ( !startMaximized && !startHidden && !embedMode ) { x2goDebug<<"Saving settings ..."; X2goSettings st ( "sizes" ); st.setting()->setValue ( "mainwindow/size", QVariant ( size() ) ); st.setting()->setValue ( "mainwindow/pos",QVariant ( pos() ) ); st.setting()->setValue ( "mainwindow/maximized", QVariant ( isMaximized() ) ); st.setting()->sync(); x2goDebug<<"Saved settings."; #ifdef Q_OS_LINUX if (image) XFreePixmap(QX11Info::display(),image); if (shape) XFreePixmap(QX11Info::display(),shape); #endif } if ( nxproxy!=0l ) { if ( nxproxy->state() ==QProcess::Running ) { x2goDebug<<"Terminating proxy ..."; nxproxy->terminate(); x2goDebug<<"Terminated proxy."; } x2goDebug<<"Deleting proxy ..."; delete nxproxy; x2goDebug<<"Deleted proxy."; } if ( sshConnection && !useLdap) { x2goDebug<<"Waiting for the SSH connection to finish ..."; delete sshConnection; x2goDebug<<"SSH connection finished."; sshConnection=0; } if (useLdap) { for (int i=0; iterminate(); x2goDebug<<"Terminated the X.Org Server."; x2goDebug<<"Deleting the X.Org Server ..."; delete xorg; x2goDebug<<"Deleted the X.Org Server."; } if ( winSshdStarted ) { TerminateProcess ( sshd.hProcess,0 ); CloseHandle ( sshd.hProcess ); CloseHandle ( sshd.hThread ); } #endif /* defined (Q_OS_WIN) */ #if defined (Q_OS_DARWIN) || defined (Q_OS_WIN) if (pulseManager) { disconnect(pulseManager, SIGNAL(sig_pulse_user_warning(bool, const QString&, const QString&, bool)), this, SLOT(slotShowPAMSGDialog(bool, const QString&, const QString&, bool))); delete (pulseManager); if (pulseManagerThread) { pulseManagerThread->quit (); pulseManagerThread->wait (); } delete (pulseManagerThread); } #endif /* defined (Q_OS_DARWIN) || defined (Q_OS_WIN) */ #ifndef Q_OS_WIN if (sshd) { x2goDebug << "Terminating the OpenSSH server ..."; sshd->terminate (); /* Allow sshd a grace time of 5 seconds to terminate. */ QTime sleep_time = QTime::currentTime ().addSecs (5); bool killed = false; while (QTime::currentTime () < sleep_time) { if (QProcess::NotRunning == sshd->state ()) { killed = true; break; } QCoreApplication::processEvents (QEventLoop::AllEvents, 100); } if (!killed) { /* Grace period over, force termination. */ sshd->kill (); if (!(sshd->waitForFinished (500))) { x2goWarningf (8) << "OpenSSH Server failed to terminate in time " " and the kill command timed out."; } } x2goDebug << "Terminated the OpenSSH server."; delete sshd; } #endif /* !defined (Q_OS_WIN) */ if ( embedMode ) { passForm->close(); selectSessionDlg->close(); #ifndef Q_OS_DARWIN // closeEmbedWidget(); #endif } if ( ONMainWindow::portable ) { #ifdef Q_OS_WIN if ( !cyEntry ) { removeCygwinEntry(); } #endif cleanPortable(); } if(resourceTmpDir) { removeDir(resourceTmpDir->path()); delete resourceTmpDir; } if (ssh_finalize ()) { x2goDebug << "Unable to finalize libssh. Something may be wrong!"; } else { x2goDebug << "libssh finalized."; } delete (bBrokerLogout); x2goInfof(7)<ignore(); } else { trayQuit(); } } void ONMainWindow::hideEvent(QHideEvent* event) { QMainWindow::hideEvent(event); if (event->spontaneous() && trayMinToTray) hide(); } void ONMainWindow::trayQuit() { x2goDebug<<"Quitting from tray icon and closing application."<quit(); } void ONMainWindow::trayIconActivated(QSystemTrayIcon::ActivationReason reason ) { switch (reason) { // use single left click on unix // and double click on windows (Is it standard behaviour conform?) #ifdef Q_OS_UNIX case QSystemTrayIcon::Trigger: #else case QSystemTrayIcon::DoubleClick: #endif x2goDebug << "tray icon clicked with Trigger (left click)"; if (isVisible()) hide(); else { showNormal(); } break; default: break; } } void ONMainWindow::trayMessageClicked() { } void ONMainWindow::loadSettings() { X2goSettings st ( "sizes" ); mwSize=st.setting()->value ( "mainwindow/size", ( QVariant ) QSize ( 800,600 ) ).toSize(); mwPos=st.setting()->value ( "mainwindow/pos", ( QVariant ) QPoint ( 20,20 ) ).toPoint(); mwMax=st.setting()->value ( "mainwindow/maximized", ( QVariant ) false ).toBool(); /* * Sanity check for X2Go Client main window position. * Check whether the given position is within bounds of any connected display. * Otherwise use the default. */ bool placement_found = false; QDesktopWidget *desktop_widget = QApplication::desktop (); QRect main_window_geom (mwPos, mwSize); for (size_t i = 0; i < static_cast (desktop_widget->screenCount ()); ++i) { QRect tmp_geom = desktop_widget->availableGeometry (i); if (tmp_geom.intersects (main_window_geom)) { placement_found = true; break; } } if (!placement_found) { mwPos = QPoint (20, 20); } X2goSettings st1 ( "settings" ); if ( !ldapOnly ) { useLdap=st1.setting()->value ( "LDAP/useldap", ( QVariant ) false ).toBool(); ldapServer=st1.setting()->value ( "LDAP/server", ( QVariant ) "localhost" ).toString(); ldapPort=st1.setting()->value ( "LDAP/port", ( QVariant ) 389 ).toInt(); ldapDn=st1.setting()->value ( "LDAP/basedn", ( QVariant ) QString::null ).toString(); ldapServer1=st1.setting()->value ( "LDAP/server1", ( QVariant ) QString::null ).toString(); ldapPort1=st1.setting()->value ( "LDAP/port1", ( QVariant ) 0 ).toInt(); ldapServer2=st1.setting()->value ( "LDAP/server2", ( QVariant ) QString::null ).toString(); ldapPort2=st1.setting()->value ( "LDAP/port2", ( QVariant ) 0 ).toInt(); } showToolBar=st1.setting()->value ( "toolbar/show", ( QVariant ) true ).toBool(); } QString ONMainWindow::iconsPath ( const QString &fname ) const { /* QFile fl(this->kdeIconsPath+fname); if(fl.exists()) return kdeIconsPath+fname;*/ return (images_resource_path (fname, "/icons/")); } QString ONMainWindow::images_resource_path (const QString &filename, const QString &base) const { if(resourceDir.length()>0) { if(QFile::exists(resourceDir+"/img/"+base+"/"+filename)) return resourceDir+"/img/"+base+"/"+filename; // x2goDebug<<"not exists: "<setFont ( fnt ); QList::iterator it; QList::iterator end=userList.end(); int i=0; for ( it=userList.begin(); it!=end; it++ ) { int val=i+1; UserButton* l; if ( ( *it ).foto.isNull() ) l=new UserButton ( this, uframe, ( *it ).uid, ( *it ).name,foto,pal ); else l=new UserButton ( this, uframe, ( *it ).uid, ( *it ).name, ( *it ).foto,pal ); connect ( l,SIGNAL ( userSelected ( UserButton* ) ),this, SLOT ( slotSelectedFromList ( UserButton* ) ) ); if ( !miniMode ) l->move ( ( users->width()-360 ) /2, i*120+ ( val-1 ) *25+5 ); else l->move ( ( users->width()-260 ) /2, i*120+ ( val-1 ) *25+5 ); l->show(); names.append ( l ); i++; } int val=i; uframe->setFixedHeight ( val*120+ ( val-1 ) *25 ); uname->setText ( "" ); disconnect ( uname,SIGNAL ( textEdited ( const QString& ) ),this, SLOT ( slotSnameChanged ( const QString& ) ) ); connect ( uname,SIGNAL ( textEdited ( const QString& ) ),this, SLOT ( slotUnameChanged ( const QString& ) ) ); if ( usePGPCard && !PGPInited) { PGPInited=true; x2goDebug<<"Users loaded, starting smart card daemon."; QTimer::singleShot ( 10, this, SLOT ( slotStartPGPAuth() ) ); } } void ONMainWindow::showPass ( UserButton* user ) { QPalette pal=users->palette(); setUsersEnabled ( false ); QString fullName; QPixmap foto; if ( user ) { foto=user->foto(); nick=user->username(); fullName=user->fullName(); user->hide(); lastUser=user; } else { lastUser=0; foto.load ( iconsPath ( "/64x64/personal.png" ) ); foto=foto.scaled ( 100,100 ); nick=uname->text(); fullName="User Unknown"; } fotoLabel->setPixmap ( foto ); QString text=""+nick+"
("+fullName+")"; nameLabel->setText ( text ); login->setText ( nick ); login->hide(); pass->setEchoMode ( QLineEdit::Password ); pass->setFocus(); slotShowPassForm(); } void ONMainWindow::slotSelectedFromList ( UserButton* user ) { pass->setText ( "" ); showPass ( user ); } bool ONMainWindow::isPassFormHidden() { return passForm->isHidden(); } bool ONMainWindow::isSelectFormHidden() { return selectSessionDlg->isHidden(); } void ONMainWindow::slotClosePass() { if (brokerMode) { if (!config.brokerAuthenticated) { x2goErrorf(15)<hide(); if ( !embedMode ) { u->show(); uname->show(); if ( useLdap ) { if ( lastUser ) { lastUser->show(); uname->setText ( lastUser->username() ); } } else { if (sessionExplorer->getLastSession()) { sessionExplorer->getLastSession()->show(); uname->setText ( sessionExplorer->getLastSession()->name() ); } sessionExplorer->setLastSession(0); } uname->setEnabled ( true ); u->setEnabled ( true ); setUsersEnabled ( true ); uname->selectAll(); uname->setFocus(); } } void ONMainWindow::slotPassEnter() { if(!embedMode) shadowSession=false; #if defined ( Q_OS_WIN ) || defined (Q_OS_DARWIN ) QString disp=getXDisplay(); if ( disp==QString::null ) return; #endif #ifdef USELDAP if ( ! initLdapSession() ) { QMessageBox::critical ( 0l,tr ( "Error" ), tr ( "Please check LDAP settings" ), QMessageBox::Ok,QMessageBox::NoButton ); slotConfig(); return; } passForm->setEnabled ( false ); x2goServers.clear(); list attr; attr.push_back ( "cn" ); attr.push_back ( "serialNumber" ); attr.push_back ( "l" ); list res; QString searchBase="ou=Servers,ou=ON,"+ldapDn; try { ld->stringSearch ( searchBase.toStdString(),attr, "objectClass=ipHost",res ); } catch ( LDAPExeption e ) { QString message="Exception in: "; message=message+e.err_type.c_str(); message=message+" : "+e.err_str.c_str(); QMessageBox::critical ( 0l,tr ( "Error" ),message, QMessageBox::Ok,QMessageBox::NoButton ); slotConfig(); return; } if ( res.size() ==0 ) { QString message=tr ( "no X2Go Server found in LDAP " ); QMessageBox::critical ( 0l,tr ( "Error" ),message, QMessageBox::Ok,QMessageBox::NoButton ); slotConfig(); return; } list::iterator it=res.begin(); list::iterator end=res.end(); QString freeServer; QString firstServer; bool isFirstServerSet=false; for ( ; it!=end; ++it ) { serv server; server.name=LDAPSession::getStringAttrValues ( *it,"cn" ).front().c_str(); QString sPort="22"; list sL=LDAPSession::getStringAttrValues ( *it,"l" ); if ( sL.size() >0 ) { sPort=sL.front().c_str(); } x2goDebug<<"SSH server: "< serialNumber=LDAPSession::getStringAttrValues ( *it,"serialNumber" ); if ( serialNumber.size() >0 ) { sFactor=serialNumber.front().c_str(); } x2goDebug<<"SSH server: "<setEnabled ( false ); QString passwd; if ( !extLogin ) currentKey=QString::null; QString user=getCurrentUname(); // get x2gogetservers not from ldap server, but from first x2goserver // QString host=ldapServer; QString host=firstServer; passwd=getCurrentPass(); if (sshConnection) delete sshConnection; sshConnection=startSshConnection ( host,sshPort,acceptRsa,user,passwd,true, false ); #endif } void ONMainWindow::slotUnameChanged ( const QString& text ) { if ( prevText==text ) return; if ( text=="" ) return; QList::iterator it; QList::iterator endit=names.end(); for ( it=names.begin(); it!=endit; it++ ) { QString username= ( *it )->username(); if ( username.indexOf ( text,0,Qt::CaseInsensitive ) ==0 ) { QPoint pos= ( *it )->pos(); uname->setText ( username ); QScrollBar* bar=users->verticalScrollBar(); int docLang=bar->maximum()-bar->minimum() + bar->pageStep(); double position= ( double ) ( pos.y() ) / ( double ) ( uframe->height() ); bar->setValue ( ( int ) ( docLang*position-height() /2+ ( *it )->height() /2 ) ); uname->setSelection ( username.length(),text.length()- username.length() ); break; } } prevText=text; } void ONMainWindow::slotUnameEntered() { QString text=uname->text(); if ( useLdap ) { UserButton* user=NULL; QList::iterator it; QList::iterator endit=names.end(); for ( it=names.begin(); it!=endit; it++ ) { QString username= ( *it )->username(); if ( username==text ) { user=*it; break; } } showPass ( user ); } else { SessionButton* sess=NULL; QList::iterator it; QList::iterator endit=sessionExplorer->getSessionsList()->end(); for ( it=sessionExplorer->getSessionsList()->begin(); it!=endit; it++ ) { QString name= ( *it )->name(); if ( name==text ) { sess=*it; break; } } if ( sess ) slotSelectedFromList ( sess ); } } void ONMainWindow::readUsers() { #ifdef USELDAP if ( ! initLdapSession() ) { QMessageBox::critical ( 0l,tr ( "Error" ), tr ( "Please check LDAP settings" ), QMessageBox::Ok,QMessageBox::NoButton ); slotConfig(); return; } list attr; attr.push_back ( "uidNumber" ); attr.push_back ( "uid" ); attr.push_back ( "cn" ); attr.push_back ( "jpegPhoto" ); list result; try { ld->binSearch ( ldapDn.toStdString(),attr, "objectClass=posixAccount",result ); } catch ( LDAPExeption e ) { QString message="Exception in: "; message=message+e.err_type.c_str(); message=message+" : "+e.err_str.c_str(); QMessageBox::critical ( 0l,tr ( "Error" ), message,QMessageBox::Ok, QMessageBox::NoButton ); QMessageBox::critical ( 0l,tr ( "Error" ), tr ( "Please check LDAP settings" ), QMessageBox::Ok,QMessageBox::NoButton ); slotConfig(); return; } list::iterator it=result.begin(); list::iterator end=result.end(); for ( ; it!=end; ++it ) { user u; QString uin=LDAPSession::getBinAttrValues ( *it,"uidNumber" ).front().getData(); u.uin=uin.toUInt(); if ( u.uinlastUid ) { continue; } u.uid=LDAPSession::getBinAttrValues ( *it, "uid" ).front().getData(); u.name=u.name.fromUtf8 ( LDAPSession::getBinAttrValues ( *it, "cn" ).front().getData() ); list lst=LDAPSession::getBinAttrValues ( *it,"jpegPhoto" ); if ( lst.size() ) { u.foto.loadFromData ( ( const uchar* ) ( lst.front().getData() ), lst.front().length() ); } userList.append ( u ); } qSort ( userList.begin(),userList.end(),user::lessThen ); delete ld; ld=0; displayUsers(); if ( defaultUser ) { defaultUser=false; for ( int i=0; isetText ( defaultUserName ); slotUnameChanged ( defaultUserName ); QTimer::singleShot ( 100, this, SLOT ( slotUnameEntered() ) ); break; } } } #endif } void ONMainWindow::slotConfig() { if ( !startMaximized && !startHidden && !embedMode ) { X2goSettings st ( "sizes" ); st.setting()->setValue ( "mainwindow/size", QVariant ( size() ) ); st.setting()->setValue ( "mainwindow/pos",QVariant ( pos() ) ); st.setting()->sync(); } if ( ld ) delete ld; ld=0; #if defined (Q_OS_WIN) || defined (Q_OS_DARWIN) bool oldDisableInput = false; { X2goSettings st ("settings"); oldDisableInput = st.setting ()->value ("pulse/norecord", (QVariant) false).toBool (); } #endif /* defined (Q_OS_WIN) || defined (Q_OS_DARWIN) */ ConfigDialog dlg ( this ); if ( dlg.exec() ==QDialog::Accepted ) { int i; #if defined (Q_OS_WIN) || defined (Q_OS_DARWIN) if(!systemDisablePA) { X2goSettings st ("settings"); bool disablePA = st.setting ()->value ("pulse/disable", (QVariant) false).toBool (); if(!pulseManager && !disablePA) { x2goDebug<<"PA manager not inited yet, starting PA thread"; QTimer::singleShot (10, this, SLOT (pulseManagerWrapper ())); } else if(pulseManager && disablePA) { if(pulseManager->is_server_running()) { x2goDebug<<"Stopping PulseAudio"; pulseManager->shutdown(); } } else if(pulseManager && !disablePA)//pulse is already inited and not disabled by config dialog { bool newDisableInput = st.setting ()->value ("pulse/norecord", (QVariant) false).toBool (); if(systemDisablePARecord) newDisableInput=true; if (oldDisableInput != newDisableInput) { bool ret = pulseManager->set_record (!newDisableInput); if (!ret) { x2goDebug << "Failed to change recording status of PulseManager. PulseAudio not started?" << endl; } pulseManager->restart (); } } } #endif /* defined (Q_OS_WIN) || defined (Q_OS_DARWIN) */ if ( passForm->isVisible() && !embedMode ) { if (brokerMode && (!config.brokerAuthenticated)) { return; } slotClosePass(); } if ( sessionStatusDlg->isVisible() || embedMode ) { trayIconInit(); //if session is running or embed mode, save changes, //but not accept // return; } if ( !embedMode ) { for ( i=0; iclose(); sessionExplorer->cleanSessions(); userList.clear(); } loadSettings(); trayIconInit(); if ( useLdap ) { act_new->setEnabled ( false ); act_edit->setEnabled ( false ); u->setText ( tr ( "Login:" ) ); QTimer::singleShot ( 1, this, SLOT ( readUsers() ) ); } else { act_new->setEnabled ( true ); act_edit->setEnabled ( true ); u->setText ( tr ( "Session:" ) ); QTimer::singleShot ( 1, this, SLOT ( slotReadSessions() ) ); } slotResize ( fr->size() ); } } void ONMainWindow::slotReadSessions() { users->show(); ln->show(); if(brokerMode) { // bgLay->removeItem(bgLay->itemAt(3)); slotResize(QSize(width(), height())); } X2goSettings *st; if (brokerMode) { if (changeBrokerPass) act_changeBrokerPass->setEnabled(true); config.key=QString::null; config.user=QString::null; config.sessiondata=QString::null; st=new X2goSettings(config.iniFile,QSettings::IniFormat); sessionStatusDlg->hide(); setEnabled ( true ); if(config.brokerSyncTimeout*1000!=brokerSyncTimer->interval()) { brokerSyncTimer->setInterval(config.brokerSyncTimeout*1000); } if(config.brokerSyncTimeout && !(brokerSyncTimer->isActive())) { brokerSyncTimer->start(); } if(!config.brokerSyncTimeout) { brokerSyncTimer->stop(); } } else st= new X2goSettings( "sessions" ); QStringList slst=st->setting()->childGroups(); x2goDebug<<"Reading "<updateSessions(slst); if ( slst.size() ==0 ) slotNewSession(); uname->setText ( "" ); disconnect ( uname,SIGNAL ( textEdited ( const QString& ) ),this, SLOT ( slotUnameChanged ( const QString& ) ) ); connect ( uname,SIGNAL ( textEdited ( const QString& ) ),this, SLOT ( slotSnameChanged ( const QString& ) ) ); if(usePGPCard &&brokerMode&&cardReady) { if(sessionExplorer->getSessionsList()->count()==1) { slotSelectedFromList(sessionExplorer->getSessionsList()->at(0)); } } if ( !defaultSession&& startHidden ) { startHidden=false; destroySplash(); slotResize(); show(); activateWindow(); raise(); } if ( defaultSession ) { bool sfound=false; defaultSession=false; if ( defaultSessionId.length() >0 ) { for ( int i=0; i< sessionExplorer->getSessionsList()->size(); ++i ) { if ( sessionExplorer->getSessionsList()->at(i)->id() ==defaultSessionId ) { sessionExplorer->setCurrrentPath(sessionExplorer->getSessionsList()->at(i)->getPath()); sessionExplorer->placeButtons(); sfound=true; slotSelectedFromList ( sessionExplorer->getSessionsList()->at(i) ); break; } } } else if(defaultSessionName.length() > 0) { QString normalDefaultSName=defaultSessionName.split("/",QString::SkipEmptyParts).join("/"); for ( int i=0; igetSessionsList()->size(); ++i ) { QString normalName=(sessionExplorer->getSessionsList()->at(i)->getPath()+"/"+sessionExplorer->getSessionsList()->at(i)->name()); normalName=normalName.split("/",QString::SkipEmptyParts).join("/"); if ( normalName == normalDefaultSName ) { sessionExplorer->setCurrrentPath(sessionExplorer->getSessionsList()->at(i)->getPath()); sessionExplorer->placeButtons(); sfound=true; uname->setText ( sessionExplorer->getSessionsList()->at(i)->name() ); QTimer::singleShot ( 100, this, SLOT ( slotUnameEntered() ) ); slotSnameChanged ( defaultSessionName ); break; } } } //no session name or id provided //started with ".x2go" session file. //if this file has only one session, chose it automatically else { if(sessionExplorer->getSessionsList()->size()==1) { sessionExplorer->setCurrrentPath(sessionExplorer->getSessionsList()->at(0)->getPath()); sessionExplorer->placeButtons(); sfound=true; slotSelectedFromList ( sessionExplorer->getSessionsList()->at(0) ); } } if ( !sfound && startHidden ) { startHidden=false; destroySplash(); slotResize(); show(); activateWindow(); raise(); } } delete st; } void ONMainWindow::slotNewSession() { if(X2goSettings::centralSettings()) return; QString id=QDateTime::currentDateTime(). toString ( "yyyyMMddhhmmsszzz" ); EditConnectionDialog dlg (true, id, this ); if ( dlg.exec() ==QDialog::Accepted ) { SessionButton* bt=sessionExplorer->createBut ( id ); sessionExplorer->placeButtons(); users->ensureVisible ( bt->x(),bt->y(),50,220 ); } } void ONMainWindow::slotManage() { SessionManageDialog dlg ( this ); dlg.exec(); } void ONMainWindow::slotCreateSessionIcon() { SessionManageDialog dlg ( this,true ); dlg.exec(); } void ONMainWindow::displayToolBar ( bool show ) { X2goSettings st1 ( "settings" ); st1.setting()->setValue ( "toolbar/show",show ); st1.setting()->sync(); } bool ONMainWindow::initLdapSession ( bool showError ) { #ifdef USELDAP x2goDebug<<"Initializing LDAP sessions ..."; try { ld=new LDAPSession ( ldapServer.toStdString(), ldapPort,"","",true,false ); } catch ( LDAPExeption e ) { QString message="Exception0 in: "; message=message+e.err_type.c_str(); message=message+" : "+e.err_str.c_str(); x2goDebug< attr; attr.push_back ( SESSIONCMD ); attr.push_back ( FIRSTUID ); attr.push_back ( LASTUID ); list res; QString searchBase="ou=Settings,ou=ON,"+ldapDn; QString srch="cn=session settings"; try { ld->stringSearch ( searchBase.toStdString(),attr, srch.toStdString(),res ); } catch ( LDAPExeption e ) { QString message="Exception in: "; message=message+e.err_type.c_str(); message=message+" : "+e.err_str.c_str(); QMessageBox::critical ( 0l,tr ( "Error" ),message, QMessageBox::Ok, QMessageBox::NoButton ); return false; } if ( res.size() !=0 ) { LDAPStringEntry entry=res.front(); list str=LDAPSession::getStringAttrValues ( entry,SESSIONCMD ); if ( str.size() ) { sessionCmd=str.front().c_str(); } str=LDAPSession::getStringAttrValues ( entry,FIRSTUID ); if ( str.size() ) { firstUid= ( ( QString ) str.front().c_str() ).toInt(); } str=LDAPSession::getStringAttrValues ( entry,LASTUID ); if ( str.size() ) { lastUid= ( ( QString ) str.front().c_str() ).toInt(); } } attr.clear(); res.clear(); attr.push_back ( NETSOUNDSYSTEM ); attr.push_back ( SNDSUPPORT ); attr.push_back ( SNDPORT ); attr.push_back ( STARTSNDSERVER ); srch="cn=sound settings"; try { ld->stringSearch ( searchBase.toStdString(),attr, srch.toStdString(),res ); } catch ( LDAPExeption e ) { QString message="Exception in: "; message=message+e.err_type.c_str(); message=message+" : "+e.err_str.c_str(); QMessageBox::critical ( 0l,tr ( "Error" ),message, QMessageBox::Ok, QMessageBox::NoButton ); return false; } if ( res.size() !=0 ) { LDAPStringEntry entry=res.front(); list str=LDAPSession::getStringAttrValues ( entry,NETSOUNDSYSTEM ); if ( str.size() ) { LDAPSndSys=str.front().c_str(); } if ( LDAPSndSys=="PULSE" ) { LDAPSndSys="pulse"; LDAPSndStartServer=false; LDAPSndPort="4713"; } if ( LDAPSndSys=="ARTS_SERVER" ) { LDAPSndPort="20221"; LDAPSndSys="arts"; } if ( LDAPSndSys=="ESPEAKER" ) { LDAPSndPort="16001"; LDAPSndSys="esd"; } str=LDAPSession::getStringAttrValues ( entry,SNDSUPPORT ); if ( str.size() ) { startSound= ( str.front() =="yes" ) ?true:false; } str=LDAPSession::getStringAttrValues ( entry,SNDPORT ); if ( str.size() ) { LDAPSndPort=str.front().c_str(); } str=LDAPSession::getStringAttrValues ( entry,STARTSNDSERVER ); if ( str.size() ) { LDAPSndStartServer= ( str.front() =="yes" ) ?true:false; } } #endif x2goDebug<<"Initialized LDAP sessions."; return true; } void ONMainWindow::slotSnameChanged ( const QString& text ) { if ( prevText==text ) return; if ( text=="" ) return; QList::iterator it; QList::iterator endit=sessionExplorer->getSessionsList()->end(); for ( it=sessionExplorer->getSessionsList()->begin(); it!=endit; it++ ) { if((*it)->getPath()!=sessionExplorer->getCurrentPath()) continue; QString name= ( *it )->name(); if ( name.indexOf ( text,0,Qt::CaseInsensitive ) ==0 ) { QPoint pos= ( *it )->pos(); uname->setText ( name ); QScrollBar* bar=users->verticalScrollBar(); int docLang=bar->maximum()-bar->minimum() + bar->pageStep(); double position= ( double ) ( pos.y() ) / ( double ) ( uframe->height() ); bar->setValue ( ( int ) ( docLang*position-height() / 2+ ( *it )->height() /2 ) ); uname->setSelection ( name.length(), text.length()-name.length() ); break; } } prevText=text; } void ONMainWindow::slotSelectedFromList ( SessionButton* session ) { pass->setText ( "" ); sessionExplorer->setLastSession(session); QString command; QString server; QString userName; bool autologin=false; bool krblogin=false; bool usebrokerpass=false; QString sessIcon; QPalette pal; QString sessionName; if ( !embedMode ) { session->hide(); pal=users->palette(); setUsersEnabled ( false ); sessionName=session->name(); QString sid=session->id(); X2goSettings* st; if (brokerMode) { st=new X2goSettings( config.iniFile, QSettings::IniFormat ); } else { st = new X2goSettings( "sessions" ); } sessIcon = wrap_legacy_resource_URIs (st->setting()->value (sid+"/icon", (QVariant) iconsPath("/128x128/x2gosession.png") ).toString ()); sessIcon = expandHome(sessIcon); command=st->setting()->value ( sid+"/command", ( QVariant ) tr ( "KDE" ) ).toString(); server=st->setting()->value ( sid+"/host", ( QVariant ) QString::null ).toString(); userName=st->setting()->value ( sid+"/user", ( QVariant ) QString::null ).toString(); if (defaultUser && userName.length()<1) userName=defaultUserName; if(brokerMode) usebrokerpass=st->setting()->value ( sid+"/usebrokerpass", false ).toBool(); sshPort=st->setting()->value ( sid+"/sshport", ( QVariant ) defaultSshPort ).toString(); currentKey=st->setting()->value ( sid+"/key", ( QVariant ) QString::null ).toString(); currentKey=expandHome(currentKey); autologin=st->setting()->value ( sid+"/autologin", ( QVariant ) false ).toBool(); #ifdef Q_OS_LINUX if(command =="XDMCP" && st->setting()->value ( sid+"/directxdmcp", ( QVariant ) false ).toBool()) autologin=true; #endif krblogin=st->setting()->value ( sid+"/krblogin", ( QVariant ) false ).toBool(); delete st; #ifdef Q_OS_WIN if ( portable && u3Device.length() >0 ) { currentKey.replace ( "(U3)",u3Device ); } #endif } else { command=config.command; server=config.server; userName=config.user; sshPort=config.sshport; sessIcon=iconsPath("/128x128/x2gosession.png"); sessionName=config.session; currentKey=config.key; } selectedCommand=command.split("/").last(); command=transAppName ( command ); login->setText ( userName ); x2goDebug << "Creating QPixmap with session icon: '" << sessIcon << "'."; QPixmap* pix; if (!brokerMode || sessIcon == iconsPath("/128x128/x2gosession.png")) pix=new QPixmap( sessIcon ); else { pix=new QPixmap; if(sessIcon.indexOf("file://")!=-1) { //load icon from file URL pix->load(sessIcon.replace("file://","")); } else pix->loadFromData(QByteArray::fromBase64(sessIcon.toLatin1())); if(pix->isNull()) { //loading icon has failed, load default icon pix->load(iconsPath("/128x128/x2gosession.png")); } } if ( !miniMode ) { fotoLabel->setPixmap ( pix->scaled ( 64,64, Qt::IgnoreAspectRatio, Qt::SmoothTransformation ) ); fotoLabel->setFixedSize ( 64,64 ); } else { fotoLabel->setPixmap ( pix->scaled ( 48,48, Qt::IgnoreAspectRatio, Qt::SmoothTransformation ) ); fotoLabel->setFixedSize ( 48,48 ); } delete pix; if(currentKey.length()<=0) { currentKey=findSshKeyForServer(userName, server, sshPort); } if ( command=="RDP" ) { command=tr ( "RDP connection" ); } if ( command=="XDMCP" ) { command=tr ( "XDMCP" ); } if ( command=="SHADOW" ) { command=tr ( "Connection to local desktop" ); } QString text=""+sessionName +"
"+ command+tr ( " on " ) +server; nameLabel->setText ( text ); if ( userName.length() <=0 ) login->setFocus(); bool nopass=false; if ( !embedMode ) slotShowPassForm(); /////////////////////////////////////////////////// if ( currentKey.length() >0 ) { nopass=true; } if(brokerMode &&usebrokerpass) { pass->setText(config.brokerPass); slotSessEnter(); } else if ( currentKey != QString::null && currentKey != "" && nopass ) { x2goDebug<<"Starting session with key."; slotSessEnter(); } else if ( cardReady || autologin || krblogin ) { x2goDebug<<"Starting session via Smart Card, SSH Agent or Kerberos token."; nopass=true; if ( cardReady ) login->setText ( cardLogin ); slotSessEnter(); return; } if ( startHidden && nopass==false && (!brokerMode) ) { startHidden=false; destroySplash(); slotResize(); show(); activateWindow(); raise(); } if ( embedMode ) { QTimer::singleShot ( 50, this, SLOT ( slotShowPassForm() ) ); } } SshMasterConnection* ONMainWindow::startSshConnection ( QString host, QString port, bool acceptUnknownHosts, QString login, QString password, bool autologin, bool krbLogin, bool getSrv, bool useproxy, SshMasterConnection::ProxyType type, QString proxyserver, quint16 proxyport, QString proxylogin, QString proxypassword, QString proxyKey, bool proxyAutologin, bool proxyKrbLogin) { x2goInfof(8)<setEnabled ( false ); if(cmdAutologin) { autologin=true; } con=new SshMasterConnection (this, host, port.toInt(),acceptUnknownHosts, login, password,currentKey, autologin, krbLogin,useproxy, type, proxyserver, proxyport, proxylogin, proxypassword, proxyKey,proxyAutologin, proxyKrbLogin); if (!getSrv) connect ( con, SIGNAL ( connectionOk(QString) ), this, SLOT ( slotSshConnectionOk() ) ); else connect ( con, SIGNAL ( connectionOk(QString)), this, SLOT ( slotServSshConnectionOk(QString) ) ); qRegisterMetaType ("SshMasterConnection::passphrase_types"); connect ( con, SIGNAL ( serverAuthError ( int,QString, SshMasterConnection* ) ),this, SLOT ( slotSshServerAuthError ( int,QString, SshMasterConnection* ) ) ); connect ( con, SIGNAL ( needPassPhrase(SshMasterConnection*, SshMasterConnection::passphrase_types)),this, SLOT ( slotSshServerAuthPassphrase(SshMasterConnection*, SshMasterConnection::passphrase_types)) ); connect ( con, SIGNAL ( needChallengeResponse(SshMasterConnection*, QString)),this, SLOT ( slotSshServerAuthChallengeResponse(SshMasterConnection*, QString)) ); connect ( con, SIGNAL ( userAuthError ( QString ) ),this,SLOT ( slotSshUserAuthError ( QString ) ) ); connect ( con, SIGNAL ( connectionError ( QString,QString ) ), this, SLOT ( slotSshConnectionError ( QString,QString ) ) ); connect ( con, SIGNAL(startInteraction(SshMasterConnection*,QString)),this, SLOT(slotSshInteractionStart(SshMasterConnection*,QString)) ); connect ( con, SIGNAL(updateInteraction(SshMasterConnection*,QString)),this, SLOT(slotSshInteractionUpdate(SshMasterConnection*,QString)) ); connect (con, SIGNAL(finishInteraction(SshMasterConnection*)),this, SLOT(slotSshInteractionFinish(SshMasterConnection*))); connect ( interDlg, SIGNAL(textEntered(QString)), con, SLOT(interactionTextEnter(QString))); connect ( interDlg, SIGNAL(interrupt()), con, SLOT(interactionInterruptSlot())); con->start(); return con; } void ONMainWindow::slotSshConnectionError ( QString message, QString lastSessionError ) { x2goErrorf(2)<< tr("Connection error: ") + message + ": " + lastSessionError; if ( sshConnection ) { sshConnection->wait(); delete sshConnection; sshConnection=0l; } if (!startHidden) { QMessageBox::critical ( 0l,message,lastSessionError, QMessageBox::Ok, QMessageBox::NoButton ); setEnabled ( true ); passForm->setEnabled ( true ); slotShowPassForm(); pass->setFocus(); pass->selectAll(); passForm->setEnabled ( true ); } else { // In order to get this interaction free, we need to free this from windows and stuff // if ( startHidden ) // { // startHidden=false; // slotResize(); // show(); // activateWindow(); // raise(); // } // completely quit the application trayQuit(); } } void ONMainWindow::slotSshConnectionOk() { x2goDebug<<"SSH connection established."; passForm->setEnabled ( true ); if ( useLdap ) { continueLDAPSession(); } else { if(brokerMode && (connectionType != DEFAULT)) { if(connectionType==SUSPEND) { suspendSession(suspendTerminateSessionFromBroker); } else { termSession(suspendTerminateSessionFromBroker, false); } } else continueNormalSession(); } } void ONMainWindow::cleanServerSshConnections() { for(int i=serverSshConnections.size()-1;i>=0;--i) { if(serverSshConnections[i]!=sshConnection) { delete serverSshConnections[i]; } } serverSshConnections.clear(); } SshMasterConnection* ONMainWindow::findServerSshConnection(QString host) { x2goDebug<<"Searching for SSH connections ..."; for (int i=0; igetHost()==host) { x2goDebug<<"Found SSH connection."; return serverSshConnections[i]; } } } x2goWarningf(3)<< tr("Couldn't find an SSH connection."); return 0l; } void ONMainWindow::slotServSshConnectionOk(QString server) { SshMasterConnection* con=findServerSshConnection(server); if (!con) return; x2goDebug<<"Getting sessions on host: " + server; con->executeCommand( "x2golistsessions", this, SLOT (slotListAllSessions ( bool,QString,int ) )); } void ONMainWindow::slotSshInteractionFinish(SshMasterConnection* connection) { if(interDlg->isInterrupted()) { slotCloseInteractionDialog(); } else { interDlg->setDisplayMode(); } } void ONMainWindow::slotCloseInteractionDialog() { if(interDlg->getInteractionMode()==InteractionDialog::SESSION) { x2goDebug<<"Closed SSH Session interaction"; slotSshUserAuthError("NO_ERROR"); } else { x2goDebug<<"Closed SSH Broker interaction"; if(broker) { interDlg->hide(); broker->closeSSHInteractionDialog(); } } } void ONMainWindow::slotSshInteractionStart(SshMasterConnection* connection, QString prompt) { sessionStatusDlg->hide(); interDlg->show(); interDlg->reset(); interDlg->appendText(prompt); setEnabled(true); interDlg->setEnabled(true); x2goDebug<<"SSH Session prompt:"<setInteractionMode(InteractionDialog::SESSION); } else { interDlg->setInteractionMode(InteractionDialog::BROKER); x2goDebug<<"SSH Broker interaction"; } } void ONMainWindow::slotSshInteractionUpdate(SshMasterConnection* connection, QString output) { if(connection==sshConnection) { x2goDebug<<"SSH Session interaction"; interDlg->setInteractionMode(InteractionDialog::SESSION); } else { interDlg->setInteractionMode(InteractionDialog::BROKER); x2goDebug<<"SSH Broker interaction"; } interDlg->appendText(output); x2goDebug<<"SSH Interaction update:"<getUser () + "@" + connection->getHost () + ":" + QString::number (connection->getPort ()), message, QLineEdit::Password, QString (""), &ok); if (!ok) { phrase = QString (""); } connection->setKeyPhrase (phrase); if(isHidden ()) { show (); QTimer::singleShot (1, this, SLOT (hide ())); } } } void ONMainWindow::slotSshServerAuthChallengeResponse(SshMasterConnection* connection, QString challenge) { bool ok = false; QString message; message = challenge; QString phrase = QInputDialog::getText (0, connection->getUser () + "@" + connection->getHost () + ":" + QString::number (connection->getPort ()), message, QLineEdit::Password, QString::null, &ok); if (!ok) { phrase = QString::null; } else { if (phrase == QString::null) { phrase = ""; } } connection->setKeyPhrase (phrase); if (isHidden ()) { show (); QTimer::singleShot (1, this, SLOT (hide ())); } } void ONMainWindow::slotSshServerAuthError ( int error, QString sshMessage, SshMasterConnection* connection ) { interDlg->hide(); if ( startHidden ) { startHidden=false; destroySplash(); slotResize(); show(); activateWindow(); raise(); } if(brokerMode && config.brokerSyncTimeout && !(brokerSyncTimer->isActive())) { brokerSyncTimer->start(); } QString errMsg; switch ( error ) { case SSH_SERVER_KNOWN_CHANGED: errMsg=tr ( "Host key for server changed.\nIt is now: " ) +sshMessage+"\n"+ tr ( "This can be an indication of a man-in-the-middle attack.\n" "Somebody might be eavesdropping on you.\n" "For security reasons, it is recommended to stop the connection attempt.\n" "Do you want to terminate the connection?\n" ); if (QMessageBox::warning (0, tr ("Host key verification failed."), errMsg, QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::Yes) { connection->writeKnownHosts(false); connection->wait(); if(sshConnection && sshConnection !=connection) { sshConnection->wait(); delete sshConnection; } slotSshUserAuthError ( tr ( "Host key verification failed." ) ); sshConnection=0; return; } else { errMsg = tr( "If you accept the new host key the security of your " "connection may be compromised.\n" "Do you want to update the host key?" ); } break; case SSH_SERVER_FOUND_OTHER: errMsg=tr ( "The host key for this server was not found but another " "type of key exists. An attacker might have changed the default server key to " "trick your client into thinking the key does not exist yet.\n" "For security reasons, it is recommended to stop the connection attempt.\n" "Do you want to terminate the connection?\n"); if (QMessageBox::warning (0, tr ("Host key verification failed."), errMsg, QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::Yes) { connection->writeKnownHosts(false); connection->wait(); if(sshConnection && sshConnection !=connection) { sshConnection->wait(); delete sshConnection; } slotSshUserAuthError ( tr ( "Host key verification failed." ) ); sshConnection=0; return; } else { errMsg = tr( "If you accept the new host key the security of your " "connection may be compromised.\n" "Do you want to update the host key?" ); } break; case SSH_SERVER_ERROR: connection->writeKnownHosts(false); connection->wait(); if(sshConnection && sshConnection !=connection) { sshConnection->wait(); delete sshConnection; } sshConnection=0; slotSshUserAuthError ( sshMessage ); return ; case SSH_SERVER_FILE_NOT_FOUND: errMsg=tr ( "Could not find known hosts file. " "If you accept the host key here, the file will be automatically created." ); break; case SSH_SERVER_NOT_KNOWN: errMsg=tr ( "The server is unknown. Do you trust the host key?\nPublic key hash: " ) +sshMessage; break; } if (QMessageBox::warning (this, tr ("Host key verification failed."), errMsg, QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::No) { connection->writeKnownHosts(false); connection->wait(); if(sshConnection && sshConnection !=connection) { sshConnection->wait(); delete sshConnection; } sshConnection=0; slotSshUserAuthError ( tr ( "Host key verification failed." ) ); return; } connection->writeKnownHosts(true); connection->wait(); connection->start(); } void ONMainWindow::slotSshUserAuthError ( QString error ) { interDlg->hide(); if ( sshConnection ) { sshConnection->wait(); delete sshConnection; sshConnection=0l; } // if ( startHidden ) // { // startHidden=false; // slotResize(); // show(); // activateWindow(); // raise(); // } // hidden means hidden, we'll close the client afterwards. if ( startHidden ) { x2goErrorf(3)<< tr("Authentication failed: ") + error; trayQuit(); } if(error != "NO_ERROR") QMessageBox::critical (0l, tr ("Authentication failed."), error, QMessageBox::Ok, QMessageBox::NoButton); setEnabled ( true ); passForm->setEnabled ( true ); slotShowPassForm(); pass->setFocus(); pass->selectAll(); passForm->setEnabled ( true ); if(brokerMode && config.brokerSyncTimeout && !(brokerSyncTimer->isActive())) { brokerSyncTimer->start(); } } void ONMainWindow::slotSessEnter() { if ( useLdap ) { slotPassEnter(); return; } if (brokerMode) { if (!config.brokerAuthenticated) { x2goDebug<<"Starting broker request."; slotStartBroker(); return; } } if ((brokerMode || !embedMode) && !(sessionExplorer->getLastSession())) { x2goDebug << "No session selected, returning without starting a session."; return; } resumingSession.sessionId=QString::null; resumingSession.server=QString::null; resumingSession.display=QString::null; setStatStatus ( tr ( "connecting" ) ); if(brokerMode) { if (config.brokerNoAuth && brokerNoauthWithSessionUsername) { config.brokerUser = login->text(); } #ifdef Q_OS_LINUX X2goSettings* st=new X2goSettings(config.iniFile, QSettings::IniFormat); QString sid=sessionExplorer->getLastSession()->id(); QString cmd=st->setting()->value ( sid+"/command", ( QVariant ) QString::null ).toString(); directRDP=(st->setting()->value ( sid+"/directrdp", ( QVariant ) false ).toBool() && cmd == "RDP"); if (cmd =="RDP" && directRDP) { x2goDebug<<"Starting direct RDP Session from broker"; startSession ( sid ); return; } directRDP=(st->setting()->value ( sid+"/directxdmcp", ( QVariant ) false ).toBool() && cmd == "RDP"); if (cmd =="XDMCP" && directRDP) { x2goDebug<<"Starting direct RDP Session from broker"; startSession ( sid ); return; } #endif broker->selectUserSession(sessionExplorer->getLastSession()->id(),login->text()); config.session=sessionExplorer->getLastSession()->id(); setStatStatus ( tr ( "Connecting to broker" ) ); stInfo->insertPlainText ( "broker url: "+config.brokerurl ); setEnabled ( false ); uname->hide(); u->hide(); return; } QString sid=""; if ( !embedMode ) sid=sessionExplorer->getLastSession()->id(); startSession ( sid ); } void ONMainWindow::continueNormalSession() { x2goDebug<<"Continue normal X2Go session"; if (brokerMode && !shadowSession) { slotListSessions(true,QString::null,0); return; } if ( !shadowSession ) sshConnection->executeCommand ( "x2golistsessions", this,SLOT ( slotListSessions ( bool, QString,int ))); else sshConnection->executeCommand ( "x2golistdesktops", this,SLOT ( slotListSessions ( bool, QString,int ))); } void ONMainWindow::continueLDAPSession() { sshConnection->executeCommand ( "x2gogetservers", this, SLOT ( slotGetServers ( bool, QString,int ) )); } #ifdef Q_OS_LINUX void ONMainWindow::startDirectRDP() { if (!(sessionExplorer->getLastSession())) { x2goDebug << "No session selected, returning without starting a session."; return; } X2goSettings* st; if(brokerMode) { st=new X2goSettings(config.iniFile, QSettings::IniFormat); } else { st=new X2goSettings ( "sessions" ); } QString sid; bool freeRDPNew=false; if ( !embedMode ) sid=sessionExplorer->getLastSession()->id(); else sid="embedded"; bool fullscreen=st->setting()->value ( sid+"/fullscreen", ( QVariant ) defaultFullscreen ).toBool(); bool maxRes=st->setting()->value ( sid+"/maxdim", ( QVariant ) false ).toBool(); int height=st->setting()->value ( sid+"/height", ( QVariant ) defaultHeight ).toInt(); int width=st->setting()->value ( sid+"/width", ( QVariant ) defaultWidth ).toInt(); QString sessionType=st->setting()->value ( sid+"/command", ( QVariant ) "").toString(); QString client=st->setting()->value ( sid+"/rdpclient", ( QVariant ) "rdesktop").toString(); if(client=="xfreerdpnew") { client="xfreerdp"; freeRDPNew=true; } QString host=st->setting()->value ( sid+"/host", ( QVariant ) "").toString(); QString port=st->setting()->value ( sid+"/rdpport", ( QVariant ) "3389").toString(); QString params=st->setting()->value ( sid+"/directrdpsettings", ( QVariant ) "").toString(); QString user,password; if ((!brokerMode) || (brokerCredsForSession)) { user=getCurrentUname(); password=getCurrentPass(); } else { user=st->setting()->value ( sid+"/user", ( QVariant ) "").toString(); } nxproxy=new QProcess; proxyErrString=""; connect ( nxproxy,SIGNAL ( error ( QProcess::ProcessError ) ),this, SLOT ( slotProxyError ( QProcess::ProcessError ) ) ); connect ( nxproxy,SIGNAL ( finished ( int,QProcess::ExitStatus ) ),this, SLOT ( slotProxyFinished ( int,QProcess::ExitStatus ) ) ); connect ( nxproxy,SIGNAL ( readyReadStandardError() ),this, SLOT ( slotProxyStderr() ) ); connect ( nxproxy,SIGNAL ( readyReadStandardOutput() ),this, SLOT ( slotProxyStdout() ) ); QString userOpt; QString passOpt; QString grOpt; QString proxyCmd; if(!freeRDPNew) { if (user.length()>0) { userOpt=" -u "; userOpt+=user+" "; } if (password.length()>0) { passOpt=" -p \""; passOpt+=password+"\" "; } if (fullscreen) { grOpt=" -f "; } else if (maxRes) { QDesktopWidget wd; grOpt=" -D -g "+QString::number( wd.screenGeometry().width())+"x"+QString::number(wd.screenGeometry().height())+" "; } else { grOpt=" -g "+QString::number(width)+"x"+QString::number(height); } proxyCmd=client +" "+params+ grOpt +userOpt+passOpt + host +":"+port ; } else { if (user.length()>0) { userOpt=" /u:"; userOpt+=user+" "; } if (password.length()>0) { passOpt=" /p:\""; passOpt+=password+"\" "; } if (fullscreen) { grOpt=" /f "; } else if (maxRes) { QDesktopWidget wd; grOpt=" /w:"+QString::number( wd.screenGeometry().width())+" /h:"+QString::number(wd.screenGeometry().height())+" "; } else { grOpt=" /w:"+QString::number(width)+" /h:"+QString::number(height); } proxyCmd= client +" "+params+ grOpt +userOpt+passOpt + "/v:"+host +":"+port ; } if(sessionType=="XDMCP") { x2goDebug<<"starting direct XDMCP session"; client=st->setting()->value ( sid+"/xdmcpclient", ( QVariant ) "Xnest").toString(); params=st->setting()->value ( sid+"/directxdmcpsettings", ( QVariant ) "").toString(); if(client == "Xephyr") { if (fullscreen) { grOpt=" -fullscreen "; } else if (maxRes) { QDesktopWidget wd; grOpt=" -screen "+QString::number( wd.screenGeometry().width())+"x"+QString::number(wd.screenGeometry().height())+" "; } else { grOpt=" -screen "+QString::number(width)+"x"+QString::number(height); } } else { if (maxRes) { QDesktopWidget wd; grOpt=" -geometry "+QString::number( wd.screenGeometry().width())+"x"+QString::number(wd.screenGeometry().height())+" "; } else { grOpt=" -geometry "+QString::number(width)+"x"+QString::number(height); } } int p=0; while(true) { QString fname="/tmp/.X"+QString::number(p)+"-lock"; if(QFile::exists(fname)) { ++p; } else break; } proxyCmd= client +" "+params+ grOpt + " -query "+host +" :"+QString::number(p) ; login->setText(tr("XDM")); resumingSession.display=tr("XDMCP"); } else { x2goDebug<<"starting direct RDP session"; resumingSession.display=tr("RDP"); } // x2goDebug<<"starting direct session with cmd:"<start ( proxyCmd ); resumingSession.server=host; resumingSession.sessionId=user+"-RDP-"; #if QT_VERSION < 0x040700 resumingSession.sessionId += QString::number(QDateTime::currentDateTime().toTime_t()); #else resumingSession.sessionId += QString::number(QDateTime::currentDateTime().toMSecsSinceEpoch()/1000); #endif resumingSession.sessionId += "_stRRDP_dp24"; resumingSession.display="RDP"; resumingSession.command="RDP"; resumingSession.crTime=QDateTime::currentDateTime().toString(Qt::ISODate); showSessionStatus(); if(brokerMode) { sendEventToBroker(CONNECTED); } // QTimer::singleShot ( 30000,this,SLOT ( slotRestartProxy() ) ); proxyRunning=true; delete st; } #endif QString ONMainWindow::findSshKeyForServer(QString user, QString server, QString port) { foreach (sshKey key, cmdSshKeys) { if(key.server == server && key.user == user && key.port == port) return key.key; } foreach (sshKey key, cmdSshKeys) { if(key.server == server && key.user == user && key.port.length()<=0) return key.key; } foreach (sshKey key, cmdSshKeys) { if(key.server == server && key.user.length()<=0 && key.port==port) return key.key; } foreach (sshKey key, cmdSshKeys) { if(key.server == server && key.user.length()<=0 && key.port.length()<=0) return key.key; } foreach (sshKey key, cmdSshKeys) { if(key.server.length()<=0 && key.user.length()<=0 && key.port.length()<=0) return key.key; } return QString::null; } bool ONMainWindow::startSession ( const QString& sid, CONTYPE conType ) { connectionType=conType; setEnabled ( false ); #ifdef Q_OS_LINUX directRDP=false; #endif QString passwd; QString user; QString host; bool autologin=false; bool krblogin=false; bool krbDelegation=false; bool useproxy=false; SshMasterConnection::ProxyType proxyType= SshMasterConnection::PROXYHTTP; QString proxyserver; int proxyport=22; QString proxylogin; QString proxypassword; QString proxyKey; bool proxyAutologin=false; bool proxyKrbLogin=false; if(brokerMode) brokerSyncTimer->stop(); user=getCurrentUname(); runRemoteCommand=true; if(!embedMode) shadowSession=false; applications.clear(); removeAppsFromTray(); if ( managedMode ) { slotListSessions ( true, QString::null,0 ); return true; } X2goSettings* st; if(!brokerMode) st=new X2goSettings( "sessions" ); else st=new X2goSettings(config.iniFile, QSettings::IniFormat); passForm->setEnabled ( false ); if(brokerMode) { if(connectionType==DEFAULT) host=config.serverIp; else host=suspendTerminateHostFromBroker; sshPort=config.sshport; x2goDebug<<"Server: "<setEnabled(true); if(config.brokerSyncTimeout && !(brokerSyncTimer->isActive())) { brokerSyncTimer->start(); } return false; } } else if (embedMode) { host=config.server; } else { host=st->setting()->value ( sid+"/host", ( QVariant ) QString::null ).toString(); } QString cmd=st->setting()->value ( sid+"/command", ( QVariant ) QString::null ).toString(); autologin=st->setting()->value ( sid+"/autologin", ( QVariant ) false ).toBool(); krblogin=st->setting()->value ( sid+"/krblogin", ( QVariant ) false ).toBool(); krbDelegation=st->setting()->value ( sid+"/krbdelegation", ( QVariant ) false ).toBool(); #ifdef Q_OS_LINUX directRDP=(st->setting()->value ( sid+"/directrdp", ( QVariant ) false ).toBool() && cmd == "RDP"); if (cmd =="RDP" && directRDP) { startDirectRDP(); return true; } directRDP=(st->setting()->value ( sid+"/directxdmcp", ( QVariant ) false ).toBool() && cmd == "XDMCP"); if (cmd =="XDMCP" && directRDP) { startDirectRDP(); return true; } #endif if ( cmd=="SHADOW" ) shadowSession=true; passwd=getCurrentPass(); if(brokerMode) { currentKey=config.key; sshPort=config.sshport; } if (sshConnection) delete sshConnection; if(currentKey.length()<=0) { currentKey=findSshKeyForServer(user, host, sshPort); } if (!embedMode) { useproxy = (st->setting ()->value (sid + "/usesshproxy", false).toBool ()); QString prtype = (st->setting ()->value (sid + "/sshproxytype", "SSH").toString ()); if (prtype.toLower () == "http") { proxyType = SshMasterConnection::PROXYHTTP; } else { proxyType = SshMasterConnection::PROXYSSH; } proxylogin = (st->setting ()->value (sid + "/sshproxyuser", QString ()).toString ()); proxyKey = (st->setting ()->value (sid + "/sshproxykeyfile", QString ()).toString ()); proxyKey = expandHome (proxyKey); proxyserver = (st->setting ()->value (sid + "/sshproxyhost", QString ()).toString ()); proxyport = (st->setting ()->value (sid + "/sshproxyport", 22).toInt ()); proxyAutologin = (st->setting ()->value (sid + "/sshproxyautologin", false).toBool ()); proxyKrbLogin = (st->setting ()->value (sid + "/sshproxykrblogin", false).toBool ()); } else { useproxy = config.useproxy; proxyType = config.proxyType; proxylogin = config.proxylogin; proxyKey = config.proxyKey; proxyserver = config.proxyserver; proxyport = config.proxyport; proxyAutologin = config.proxyAutologin; proxyKrbLogin = config.proxyKrbLogin; } bool proxySamePass=(st->setting()->value ( sid+"/sshproxysamepass", false ).toBool() ); bool proxySameUser (st->setting()->value ( sid+"/sshproxysameuser", false ).toBool() ); bool proxySameKey=(st->setting()->value ( sid+"/sshproxysamekey", false ).toBool() ); if(proxyKey.length()<=0 && proxyType==SshMasterConnection::PROXYSSH) { proxyKey=findSshKeyForServer(proxylogin, proxyserver, QString::number(proxyport)); } if(proxySameKey) { proxyKey=currentKey; } if(proxySameUser) proxylogin=user; if(proxySamePass) proxypassword=passwd; else { if(useproxy && !proxyAutologin && !proxyKrbLogin && proxyKey.length()<=0) { bool ok; bool useBrokerPassForProxy=false; bool useBrokerUserForProxy=false; if(brokerMode) { useBrokerPassForProxy=(st->setting()->value ( sid+"/usebrokerpassforproxy", false ).toBool() ); useBrokerUserForProxy=(st->setting()->value ( sid+"/usebrokeruserforproxy", false ).toBool() ); if(useBrokerUserForProxy) { proxylogin=config.brokerUser; } } if(useBrokerPassForProxy) proxypassword=config.brokerPass; else proxypassword=QInputDialog::getText(0,proxylogin+"@"+proxyserver+":"+QString::number(proxyport), tr("Enter password for SSH proxy"),QLineEdit::Password,QString::null, &ok); } } delete st; sshConnection=startSshConnection ( host,sshPort,acceptRsa,user,passwd,autologin, krblogin, false, useproxy,proxyType,proxyserver, proxyport, proxylogin, proxypassword, proxyKey,proxyAutologin, proxyKrbLogin); sshConnection->set_kerberosDelegation(krbDelegation); return true; } void ONMainWindow::slotListSessions ( bool result,QString output, int ) { interDlg->hide(); x2goDebug<Connection failed.
\n" ) +output; if ( message.indexOf ( "publickey,password" ) !=-1 ) { message=tr ( "Wrong password!

" ) + message; } if ( !startHidden ) { QMessageBox::critical ( 0l,tr ( "Error" ),message, QMessageBox::Ok, QMessageBox::NoButton ); } else { QString printout = tr( "Connection failed: ") + output.toLatin1(); if ( output.indexOf ( "publickey,password" ) !=-1 ) x2goErrorf(4)<< tr( "Connection failed: ") + output + tr(" - Wrong password."); else x2goErrorf(5)<< tr( "Connection failed: ") + output; trayQuit(); } // currentKey=QString::null; setEnabled ( true ); passForm->setEnabled ( true ); slotShowPassForm(); pass->setFocus(); pass->selectAll(); return; } passForm->hide(); if ( !embedMode ) { setUsersEnabled ( false ); uname->setEnabled ( false ); u->setEnabled ( false ); } if ( managedMode ) { x2goDebug<<"Session data: " + config.sessiondata; if ( config.sessiondata.indexOf ( "|S|" ) ==-1 ) { x2goDebug<<"Starting new managed session."; startNewSession(); } else { x2goSession s=getSessionFromString (config.sessiondata); /* Check getSessionFromString for what this "invalid" string means. */ if (s.agentPid == "invalid") { startNewSession (); } else { x2goDebug << "Resuming managed session with ID: " + s.sessionId; resumeSession (s); } } return; } QStringList sessions; if(!brokerMode || shadowSession) { sessions=output.trimmed().split ( '\n', QString::SkipEmptyParts ); } else { sessions=config.sessiondata.trimmed().split ( '\n', QString::SkipEmptyParts ); } if ( shadowSession ) { selectSession ( sessions ); } else { if ( ( sessions.size() ==0 ) || ( sessions.size() ==1&&sessions[0].length() <5 ) ) startNewSession(); else if ( sessions.size() ==1 ) { x2goSession s=getSessionFromString ( sessions[0] ); QDesktopWidget wd; //we already selected the session if(brokerMode) { resumeSession(s); return; } /* Check getSessionFromString for what this "invalid" string means. */ if ((s.agentPid != "invalid") && (s.status == "S") && (isColorDepthOk (wd.depth (), s.colorDepth)) && (s.command == selectedCommand)&&autoresume) resumeSession ( s ); else { if ((startHidden) || (s.agentPid == "invalid")) startNewSession(); else selectSession ( sessions ); } } else { if ( !startHidden ) selectSession ( sessions ); else { for ( int i=0; i13 ) s.fsPort=lst[13]; if (brokerMode && lst.count()>14) s.brokerUser=lst[14]; s.colorDepth=0; if ( s.sessionId.indexOf ( "_dp" ) !=-1 ) { s.colorDepth=s.sessionId.split ( "_dp" ) [1].toInt(); } s.sessionType=x2goSession::DESKTOP; s.command=tr ( "unknown" ); if ( s.sessionId.indexOf ( "_st" ) !=-1 ) { QString cmdinfo=s.sessionId.split ( "_st" ) [1]; cmdinfo=cmdinfo.split ( "_" ) [0]; QChar st=cmdinfo[0]; if ( st=='R' ) s.sessionType=x2goSession::ROOTLESS; if ( st=='S' ) s.sessionType=x2goSession::SHADOW; if ( st=='K' ) { s.sessionType=x2goSession::KDRIVE; } if ( st=='A') { s.sessionType=x2goSession::ROOTLESSKDRIVE; } QString command=cmdinfo.mid ( 1 ); if ( command.length() >0 ) s.command=command; } return s; } void ONMainWindow::sendEventToBroker(ONMainWindow::client_events ev) { if(!config.brokerEvents) { return; } if(ev!=ALIVE) lastBrokerEvent=ev; lastBrokerEventSession=resumingSession.sessionId; QString event; switch(ev) { case CONNECTING: { event="CONNECTING"; resumingSession.connectedSince=QDateTime::currentDateTime().toTime_t(); break; } case CONNECTED: { event="CONNECTED"; resumingSession.connectedSince=QDateTime::currentDateTime().toTime_t(); if(config.brokerLiveEventsTimeout) { brokerAliveTimer->start(config.brokerLiveEventsTimeout*1000); } break; } case SUSPENDING: { event="SUSPENDING"; break; } case TERMINATING: { event="TERMINATING"; break; } case FINISHED: { event="FINISHED"; brokerAliveTimer->stop(); break; } case ALIVE: { event="ALIVE"; break; } } QString sid=sessionExplorer->getLastSession()->id(); X2goSettings st(config.iniFile, QSettings::IniFormat); if(st.setting()->value ( sid+"/command", ( QVariant ) defaultCmd ).toString()=="XDMCP") { resumingSession.command="XDMCP-"+st.setting()->value ( sid+"/xdmcpserver").toString(); } broker->sendEvent(event, resumingSession.sessionId,resumingSession.server, resumingSession.clientIp, getCurrentUname(), resumingSession.command, resumingSession.display, resumingSession.crTime, QDateTime::currentDateTime().toTime_t()-resumingSession.connectedSince); } void ONMainWindow::startNewSession() { newSession=true; QString passwd=getCurrentPass(); QString user=getCurrentUname(); QString pack; bool kdrive=false; bool fullscreen; int height; int width; int quality; int speed; bool usekbd; bool rootless=false; resumingSession.published=false; bool setDPI=defaultSetDPI; bool xinerama = false; uint dpi=defaultDPI; QString layout; QString type; QString command; QString clipMode=defaultClipboardMode; QString xdmcpServer; runRemoteCommand=true; QString host=QString::null; runStartApp=true; removeAppsFromTray(); if ( useLdap ) { pack=defaultPack; fullscreen=defaultFullscreen; height=defaultHeight; width=defaultWidth; quality=defaultQuality; speed=defaultLink; xinerama = defaultXinerama; usekbd=defaultSetKbd; layout=defaultLayout[0]; type=defaultKbdType; command=defaultCmd; shadowSession=false; for ( int j=0; jgetLastSession())) { x2goDebug << "No session selected, returning without starting a session."; delete st; return; } sid=sessionExplorer->getLastSession()->id(); } else sid="embedded"; pack=st->setting()->value ( sid+"/pack", ( QVariant ) defaultPack ).toString(); fullscreen=st->setting()->value ( sid+"/fullscreen", ( QVariant ) defaultFullscreen ).toBool(); //if maxdim = true we set maximun display area available for the selected monitor if ( st->setting()->value(sid + "/maxdim", (QVariant) false).toBool()) { int selectedScreen = st->setting()->value(sid + "/display", (QVariant) -1).toInt(); height=QApplication::desktop()->availableGeometry(selectedScreen).height(); width=QApplication::desktop()->availableGeometry(selectedScreen).width(); } else if(st->setting()->value(sid + "/multidisp", (QVariant) false).toBool()) { //workaround to avoid wm set windows maximized, which will break moving and resizing of window width=800; height=600; } else { height=st->setting()->value ( sid+"/height", ( QVariant ) defaultHeight ).toInt(); width=st->setting()->value ( sid+"/width", ( QVariant ) defaultWidth ).toInt(); } setDPI=st->setting()->value ( sid+"/setdpi", ( QVariant ) defaultSetDPI ).toBool(); dpi=st->setting()->value ( sid+"/dpi", ( QVariant ) defaultDPI ).toUInt(); quality=st->setting()->value ( sid+"/quality", ( QVariant ) defaultQuality ).toInt(); speed=st->setting()->value ( sid+"/speed", ( QVariant ) defaultLink ).toInt(); xinerama = st->setting ()->value (sid + "/xinerama", static_cast(defaultXinerama)).toBool (); clipMode=st->setting()->value ( sid+"/clipboard", ( QVariant ) defaultClipboardMode ).toString(); usekbd=st->setting()->value ( sid+"/usekbd", ( QVariant ) defaultSetKbd ).toBool(); layout=st->setting()->value ( sid+"/layout", ( QVariant ) defaultLayout[0] ).toString(); type=st->setting()->value ( sid+"/type", ( QVariant ) defaultKbdType ).toString(); type.replace("\\",""); type.replace("(","\\("); type.replace(")","\\)"); if ( !embedMode ) { command=st->setting()->value ( sid+"/command", ( QVariant ) defaultCmd ).toString(); kdrive=st->setting()->value ( sid+"/kdrive", ( QVariant ) false ).toBool(); host=st->setting()->value ( sid+"/host", ( QVariant ) ( QString ) "localhost" ).toString(); rootless=st->setting()->value ( sid+"/rootless", ( QVariant ) false ).toBool(); resumingSession.published=st->setting()->value ( sid+"/published", ( QVariant ) false ).toBool(); xdmcpServer=st->setting()->value ( sid+"/xdmcpserver", ( QVariant ) "localhost" ).toString(); } else { command=config.command; if ( command=="SHADOW" ) { shadowSession=true; runRemoteCommand=false; } rootless= config.rootless; host=config.server; startEmbedded=false; resumingSession.published=config.published; if ( st->setting()->value ( sid+"/startembed", ( QVariant ) true ).toBool() ) { startEmbedded=true; fullscreen=false; height=bgFrame->size().height()-stb->height(); width=bgFrame->size().width(); if ( height<0 ||width<0 ) { height=defaultHeight; width=defaultWidth; } } if ( config.confConSpd ) speed=config.conSpeed; if ( config.confCompMet ) pack=config.compMet; if ( config.confImageQ ) quality=config.imageQ; if ( config.confDPI ) { dpi=config.dpi; setDPI=true; } if ( config.confKbd ) { layout=config.kbdLay; type=config.kbdType; usekbd=true; } } resumingSession.command=command; if ( command=="RDP" ) { if (fullscreen) { rootless=false; } else { rootless=true; } } if ( command=="XDMCP" ) { runRemoteCommand=false; } proxyWinWidth=width; proxyWinHeight=height; #ifdef Q_OS_WIN x2goDebug<<"Fullscreen: "<numScreens(); if ((!rootless) && (st->setting()->value ( sid+"/multidisp", ( QVariant ) false ).toBool())) { xorgMode=MULTIDISPLAY; uint disp=st->setting()->value ( sid+"/display",( QVariant ) 1 ).toUInt(); if (disp>displays) { disp=1; } localDisplayNumber=disp; } if(kdrive) { x2goDebug<<"KDRIVE session don't start X Server"; slotSetWinServersReady(); } if (! startXorgOnStart && ! kdrive) startXOrg(); #endif delete st; } if ( shadowSession ) { runRemoteCommand=false; } resumingSession.server=host; if (defaultLayout.size()>0) layout=cbLayout->currentText(); QString geometry; if ( fullscreen ) { geometry="fullscreen"; #ifdef Q_OS_WIN // fullscreen=false; maximizeProxyWin=true; x2goDebug<<"Maximize proxy win: "<pos() ); geometry+="+"+QString::number ( position.x() ) +"+"+ QString::number ( position.y() + stb->height() ); } } QString link; switch ( speed ) { case MODEM: link="modem"; break; case ISDN: link="isdn"; break; case ADSL: link="adsl"; break; case WAN: link="wan"; break; case LAN: link="lan"; break; } QFile file ( ":/txt/packs" ); if ( !file.open ( QIODevice::ReadOnly | QIODevice::Text ) ) return; QTextStream in ( &file ); while ( !in.atEnd() ) { QString pc=in.readLine(); if ( pc.indexOf ( "-%" ) !=-1 ) { pc=pc.left ( pc.indexOf ( "-%" ) ); if ( pc==pack ) { pack+="-"+QString::number ( quality ); break; } } } file.close(); if ( selectSessionDlg->isVisible() ) { if ( !embedMode ) slotCloseSelectDlg(); else selectSessionDlg->hide(); } QDesktopWidget wd; QString depth=QString::number ( wd.depth() ); #ifdef Q_OS_DARWIN usekbd=0; type="query"; #endif QString sessTypeStr="D "; if ( rootless ) sessTypeStr="R "; if ( shadowSession ) sessTypeStr="S "; if ( resumingSession.published) { sessTypeStr="P "; command="PUBLISHED"; } if(kdrive) sessTypeStr="K "; if((rootless||resumingSession.published) && kdrive) { sessTypeStr="A "; } QString dpiEnv; QString xdmcpEnv; QString xinerama_env = "X2GO_XINERAMA="; if ( runRemoteCommand==false && command=="XDMCP" ) xdmcpEnv="X2GOXDMCP="+xdmcpServer+" "; if ( setDPI ) { dpiEnv="X2GODPI="+QString::number ( dpi ) +" "; } if (xinerama) { xinerama_env += "yes"; } else { xinerama_env += "no"; } if(usekbd && kdrive && type=="auto") { QString kbdl, kbdm, kbdv; getClientKeyboardConfig(kbdl,kbdm,kbdv); type=kbdm+"/"+kbdl; if(kbdv.length()>0) { type+="\\("+kbdv+"\\)"; } } QString cmd=dpiEnv+xdmcpEnv+ xinerama_env + " x2gostartagent "+ geometry+" "+link+" "+pack+ " unix-kde-depth_"+depth+" "+layout+" "+type+" "; if ( usekbd ) cmd += "1 "; else cmd += "0 "; QFileInfo f ( command ); if ( !shadowSession ) { cmd+=sessTypeStr+f.fileName(); cmd+=" "+clipMode; } else { cmd+=sessTypeStr+QString::number ( shadowMode ) +"XSHAD"+ shadowUser+"XSHAD"+shadowDisplay; } resumingSession.fullscreen=fullscreen; x2goDebug<<"Executing remote command: "<hide(); return; } sshConnection->executeCommand ( cmd, this, SLOT ( slotRetResumeSess ( bool, QString,int ) ) ); passForm->hide(); } void ONMainWindow::resumeSession ( const x2goSession& s ) { newSession=false; runStartApp=false; applications.clear(); removeAppsFromTray(); QString passwd=getCurrentPass(); QString user=getCurrentUname(); QString host=s.server; bool rootless=false; QString clipMode=defaultClipboardMode; QString pack; bool fullscreen; int height; int width; int quality; int speed; bool xinerama = false; bool usekbd; QString layout; QString type; removeAppsFromTray(); if ( useLdap ) { pack=defaultPack; fullscreen=defaultFullscreen; height=defaultHeight; width=defaultWidth; quality=defaultQuality; speed=defaultLink; xinerama = defaultXinerama; usekbd=defaultSetKbd; layout=defaultLayout[0]; type=defaultKbdType; sshConnection=findServerSshConnection(host); if (!sshConnection) { QMessageBox::critical ( 0l,tr ( "Error" ), tr ( "Server not available." ), QMessageBox::Ok, QMessageBox::NoButton ); return; } cleanServerSshConnections(); } else { QString sid; if ( !embedMode ) { if (!(sessionExplorer->getLastSession())) { x2goDebug << "No session selected, returning without resuming a session."; return; } sid=sessionExplorer->getLastSession()->id(); } else sid="embedded"; X2goSettings* st; if (!brokerMode) st=new X2goSettings( "sessions" ); else st=new X2goSettings(config.iniFile,QSettings::IniFormat); pack=st->setting()->value ( sid+"/pack", ( QVariant ) defaultPack ).toString(); fullscreen=st->setting()->value ( sid+"/fullscreen", ( QVariant ) defaultFullscreen ).toBool(); height=st->setting()->value ( sid+"/height", ( QVariant ) defaultHeight ).toInt(); width=st->setting()->value ( sid+"/width", ( QVariant ) defaultWidth ).toInt(); quality=st->setting()->value ( sid+"/quality", ( QVariant ) defaultQuality ).toInt(); speed=st->setting()->value ( sid+"/speed", ( QVariant ) defaultLink ).toInt(); xinerama = st->setting ()->value (sid + "/xinerama", static_cast(defaultXinerama)).toBool (); clipMode=st->setting()->value ( sid+"/clipboard", ( QVariant ) defaultClipboardMode ).toString(); usekbd=st->setting()->value ( sid+"/usekbd", ( QVariant ) defaultSetKbd ).toBool(); layout=st->setting()->value ( sid+"/layout", ( QVariant ) defaultLayout[0] ).toString(); type=st->setting()->value ( sid+"/type", ( QVariant ) defaultKbdType ).toString(); rootless=st->setting()->value ( sid+"/rootless", ( QVariant ) false ).toBool(); if ( brokerMode ) { host = config.serverIp; } else if ( embedMode ) { startEmbedded=false; if ( st->setting()->value ( sid+"/startembed", ( QVariant ) true ).toBool() ) { fullscreen=false; startEmbedded=true; height=bgFrame->size().height()-stb->height(); width=bgFrame->size().width(); if ( height<0 ||width<0 ) { height=defaultHeight; width=defaultWidth; } } rootless=config.rootless; host=config.server; if ( config.confConSpd ) speed=config.conSpeed; if ( config.confCompMet ) pack=config.compMet; if ( config.confImageQ ) quality=config.imageQ; if ( config.confKbd ) { layout=config.kbdLay; type=config.kbdType; usekbd=true; } } else { host=st->setting()->value ( sid+"/host", ( QVariant ) s.server ).toString(); } delete st; } if (defaultLayout.size()>0) layout=cbLayout->currentText(); QString geometry; proxyWinWidth=width; proxyWinHeight=height; #ifdef Q_OS_WIN maximizeProxyWin=false; // #ifdef CFGCLIENT xorgMode=WIN; if (fullscreen) xorgMode=FS; if (rootless) xorgMode=SAPP; xorgWidth=QString::number(width); xorgHeight=QString::number(height); if(s.sessionType == x2goSession::KDRIVE || s.sessionType == x2goSession::ROOTLESSKDRIVE) { x2goDebug<<"KDRIVE session, don't start X-Server"; slotSetWinServersReady(); } if (! startXorgOnStart && (s.sessionType != x2goSession::KDRIVE) && (s.sessionType != x2goSession::ROOTLESSKDRIVE)) startXOrg(); // #endif #else /* defined (Q_OS_WIN) */ UNUSED (rootless); #endif /* defined (Q_OS_WIN) */ if ( fullscreen ) { geometry="fullscreen"; #ifdef Q_OS_WIN // fullscreen=false; maximizeProxyWin=true; x2goDebug<<"Maximize proxy win: "<setDisabled(true); } else resumingSession.published=false; if ( selectSessionDlg->isVisible() ) { if ( !embedMode ) slotCloseSelectDlg(); else selectSessionDlg->hide(); } if(usekbd && (s.sessionType == x2goSession::KDRIVE || s.sessionType == x2goSession::ROOTLESSKDRIVE) && type=="auto") { QString kbdl, kbdm, kbdv; getClientKeyboardConfig(kbdl,kbdm,kbdv); type=kbdm+"/"+kbdl; if(kbdv.length()>0) { type+="\\("+kbdv+"\\)"; } } QString cmd="x2goresume-session "+s.sessionId+" "+geometry+ " "+link+" "+pack+" "+layout+ " "+type+" "; if ( usekbd ) cmd += "1"; else cmd += "0"; cmd +=" "+clipMode; QString xinerama_opt; if (xinerama) { xinerama_opt = "yes"; } else { xinerama_opt = "no"; } cmd += " " + xinerama_opt; sshConnection->executeCommand ( cmd, this, SLOT ( slotRetResumeSess ( bool, QString, int ) )); resumingSession=s; passForm->hide(); } /** * @brief ONMainWindow::setTrayIconToSessionIcon * @param info: message to be displayed in tray icon message * * Sets the tray session icon picture as the tray icon picture and * shows a tray icon information message about what X2Go Client * is currently doing. * * This message gives the user some feedback while the X2Go session * window is displayed. * */ void ONMainWindow::setTrayIconToSessionIcon(QString info) { //set session icon to tray icon if (trayIcon && sessionExplorer->getLastSession()) { X2goSettings* st; if (!brokerMode) st=new X2goSettings( "sessions" ); else st= new X2goSettings(config.iniFile,QSettings::IniFormat); QString sid; if ( !embedMode ) sid=sessionExplorer->getLastSession()->id(); else sid="embedded"; if (!keepTrayIcon) { QString sessIcon = wrap_legacy_resource_URIs (expandHome(st->setting()->value(sid + "/icon", (QVariant) QString(iconsPath("/128x128/x2go.png"))).toString())); if (!brokerMode || sessIcon == iconsPath("/128x128/x2gosession.png")) { trayIcon->setIcon(QIcon (sessIcon)); } else { QPixmap pix; if(sessIcon.indexOf("file://")!=-1) { //load icon from file URL pix.load(sessIcon.replace("file://","")); } else pix.loadFromData(QByteArray::fromBase64(sessIcon.toLatin1())); if(pix.isNull()) { //loading icon has failed, load default icon pix.load(iconsPath("/128x128/x2gosession.png")); } trayIcon->setIcon(QIcon (pix)); } } QString name=st->setting()->value ( sid +"/name").toString() ; //send a information notification about the connection is done trayIcon->showMessage("X2Go - " + name, info, QSystemTrayIcon::Information, 15000); delete (st); } } void ONMainWindow::selectSession ( QStringList& sessions ) { setEnabled ( true ); sessionStatusDlg->hide(); passForm->hide(); if ( !shadowSession ) { x2goDebug<<"No shadow session."; if ( !miniMode ) selectSesDlgLayout->setContentsMargins ( 25,25,10,10 ); bNew->show(); bSusp->show(); bTerm->show(); sOk->show(); sCancel->show(); desktopFilter->hide(); desktopFilterCb->hide(); bShadow->hide(); bShadowView->hide(); bCancel->hide(); // model->clear(); model->removeRows ( 0,model->rowCount() ); selectSessionLabel->setText ( tr ( "Select session:" ) ); selectedSessions.clear(); QFontMetrics fm ( sessTv->font() ); for ( int row = 0; row < sessions.size(); ++row ) { x2goDebug<<"Decoding session string:" + sessions[row]; x2goSession s=getSessionFromString ( sessions[row] ); /* Check getSessionFromString for what this "invalid" string means. */ if (s.agentPid == "invalid") { continue; } selectedSessions.append ( s ); QStandardItem *item; if(!brokerMode) item= new QStandardItem ( s.display ); else item= new QStandardItem ( s.brokerUser ); model->setItem ( row,S_DISPLAY,item ); if ( s.status=="R" ) item= new QStandardItem ( tr ( "running" ) ); else item= new QStandardItem ( tr ( "suspended" ) ); model->setItem ( row,S_STATUS,item ); item= new QStandardItem ( transAppName ( s.command ) ); model->setItem ( row,S_COMMAND,item ); QString type=tr ( "Desktop" ); if ( s.sessionType==x2goSession::ROOTLESS ) type=tr ( "single application" ); if ( s.sessionType==x2goSession::SHADOW ) type=tr ( "shadow session" ); if ( s.sessionType==x2goSession::KDRIVE ) type=tr ( "X2GoKDrive session" ); if ( s.sessionType==x2goSession::ROOTLESSKDRIVE ) type=tr ( "X2GoKDrive single application" ); item= new QStandardItem ( type ); model->setItem ( row,S_TYPE,item ); QString formatted_time = QDateTime::fromString (s.crTime, Qt::ISODate).toString (); item = new QStandardItem (formatted_time); model->setItem ( row,S_CRTIME,item ); item= new QStandardItem ( s.server ); model->setItem ( row,S_SERVER,item ); item= new QStandardItem ( s.clientIp ); model->setItem ( row,S_IP,item ); item= new QStandardItem ( s.sessionId ); model->setItem ( row,S_ID,item ); for ( int j=0; j<8; ++j ) { QString txt= model->index ( row,j ).data().toString(); if ( sessTv->header()->sectionSize ( j ) < fm.width ( txt ) +6 ) { sessTv->header()->resizeSection ( j,fm.width ( txt ) +6 ); } } } } else { shadowMode=SHADOW_VIEWONLY; selectedDesktops.clear(); selectedDesktops=sessions; if ( sessions.size() ==0 ) { QMessageBox::information ( this,tr ( "Information" ), tr ( "No accessible desktop " "found." ) ); slotCloseSelectDlg(); return; } sessTv->setModel ( ( QAbstractItemModel* ) modelDesktop ); desktopFilter->show(); desktopFilterCb->show(); sOk->hide(); sCancel->hide(); bShadow->show(); bCancel->show(); bShadowView->show(); desktopFilter->setText ( tr ( "Filter" ) ); sessions.sort(); if ( !miniMode ) selectSesDlgLayout->setContentsMargins ( 25,25,25,25 ); bNew->hide(); bSusp->hide(); bTerm->hide(); selectSessionLabel->setText ( tr ( "Select desktop:" ) ); filterDesktops ( "" ); desktopFilter->setFocus(); desktopFilter->selectAll(); if ( !embedMode ) { X2goSettings* st; if (!brokerMode) { if (!(sessionExplorer->getLastSession())) { x2goDebug << "No session selected, returning without starting a shadow session."; return; } st=new X2goSettings( "sessions" ); QString sid=sessionExplorer->getLastSession()->id(); QString suser = st->setting()->value(sid + "/shadowuser", (QVariant) QString::null).toString(); QString sdisplay = st->setting()->value(sid + "/shadowdisplay", (QVariant) QString::null).toString(); bool fullAccess= st->setting()->value(sid + "/shadowfullaccess", (QVariant) false).toBool(); delete (st); if(suser != QString::null && sdisplay != QString::null) { shadowUser=suser; shadowDisplay=sdisplay; if(fullAccess) shadowMode=SHADOW_FULL; else shadowMode=SHADOW_VIEWONLY; startNewSession(); return; } } } } sessTv->setCurrentIndex ( sessTv->model()->index ( 0, 0 ) ); sessTv->setFocus(); selectSessionDlg->show(); if( startHidden && shadowSession && sessTv->model()->rowCount() == 1 ) slotShadowSess(); } void ONMainWindow::slotCloseSelectDlg() { selectSessionDlg->hide(); if ( !embedMode ) { u->setEnabled ( true ); uname->setEnabled ( true ); } slotShowPassForm(); } void ONMainWindow::slotActivated ( const QModelIndex& index ) { if ( !shadowSession ) { QString status=sessTv->model()->index ( index.row(), S_STATUS ).data().toString(); if ( status==tr ( "running" ) ) { bSusp->setEnabled ( true ); sOk->setEnabled ( false ); running_label->show (); } else { bSusp->setEnabled ( false ); sOk->setEnabled ( true ); running_label->hide (); } bTerm->setEnabled ( true ); if ( status==QString::null ) { sOk->setEnabled ( false ); bTerm->setEnabled ( false ); running_label->hide (); } } else { QString user=sessTv->model()->index ( index.row(), D_USER ).data().toString(); bShadowView->setEnabled ( true ); bShadow->setEnabled ( true ); } } void ONMainWindow::slotResumeSess() { x2goSession s=getSelectedSession(); if(brokerMode) { broker->resumeSession(s.sessionId, s.server); return; } QDesktopWidget wd; if ( isColorDepthOk ( wd.depth(),s.colorDepth ) ) { if ( s.status=="R" && ! resumeAfterSuspending) { resumeAfterSuspending=true; slotSuspendSess(); return; } resumeAfterSuspending=false; resumeSession ( s ); } else { int res; res=QMessageBox::warning ( 0l,tr ( "Warning" ), tr ("Your current color depth is different from " "the session's color depth. This may cause " "problems reconnecting to this session and " "in most cases you will lose the " "session and have to start a new one! ") + tr ("It's highly recommended to change the color " "depth of your display to %n bit(s) and " "restart your X.Org Server before you " "reconnect to this X2Go session.", "%n will be replaced with a number", s.colorDepth) + tr ("
" "Do you want to resume this session anyway?"), tr ( "Yes" ), tr ( "No" ) ); if ( res==0 ) resumeSession ( s ); } } void ONMainWindow::suspendFromBroker(const QString& sid) { if(proxyRunning && sid ==resumingSession.sessionId) { x2goDebug<<"Suspending session from broker"; sendEventToBroker(SUSPENDING); suspendSession(sid); } } void ONMainWindow::terminateFromBroker(const QString& sid) { if(proxyRunning && sid ==resumingSession.sessionId) { x2goDebug<<"Suspending session from broker"; sendEventToBroker(TERMINATING); termSession(sid,false); } } void ONMainWindow::slotSuspendSess() { #ifdef Q_OS_LINUX if (directRDP) { nxproxy->terminate(); proxyRunning=false; return; } #endif QString passwd; QString user=getCurrentUname(); passwd=getCurrentPass(); selectSessionDlg->setEnabled ( false ); QString sessId=sessTv->model()->index ( sessTv->currentIndex().row(), S_ID ).data().toString(); QString host=sessTv->model()->index ( sessTv->currentIndex().row(), S_SERVER ).data().toString(); if ( !useLdap ) { if ( !brokerMode ) { if ( embedMode ) { host=config.server; } else { X2goSettings st ( "sessions" ); if (!(sessionExplorer->getLastSession())) { x2goDebug << "No session selected, returning without suspending a session."; return; } QString sid=sessionExplorer->getLastSession()->id(); host=st.setting()->value ( sid+"/host", ( QVariant ) host ).toString(); } } } else { sshConnection=findServerSshConnection(host); if (!sshConnection) { QMessageBox::critical ( 0l,tr ( "Error" ), tr ( "Server not available." ), QMessageBox::Ok, QMessageBox::NoButton ); return; } } if(brokerMode) { suspendBrokerSession(sessId, host); } else { suspendSession ( sessId ); } } void ONMainWindow::slotSuspendSessFromSt() { if(brokerMode) { sendEventToBroker(SUSPENDING); } #ifdef Q_OS_LINUX if (directRDP) { nxproxy->terminate(); proxyRunning=false; return; } #endif QString passwd; QString user=getCurrentUname(); passwd=getCurrentPass(); setStatStatus ( tr ( "suspending" ) ); sbExp->setEnabled ( false ); if ( !shadowSession ) suspendSession ( resumingSession.sessionId ); else termSession ( resumingSession.sessionId,false ); } void ONMainWindow::slotTermSessFromSt() { #ifdef Q_OS_LINUX if (directRDP) { if(brokerMode) { sendEventToBroker(TERMINATING); } x2goDebug<<"Terminating direct RDP session."; nxproxy->terminate(); proxyRunning=false; return; } #endif if ( !shadowSession ) { if ( termSession ( resumingSession.sessionId ) ) { sbExp->setEnabled ( false ); if(brokerMode) { sendEventToBroker(TERMINATING); } setStatStatus ( tr ( "terminating" ) ); } } else { sbExp->setEnabled ( false ); if(brokerMode) { sendEventToBroker(TERMINATING); } termSession ( resumingSession.sessionId,false ); } } void ONMainWindow::slotRetSuspSess ( bool result, QString output, int ) { setEnabled ( true ); if ( result==false ) { QString message=tr ( "Connection failed.\n" ) +output; if ( message.indexOf ( "publickey,password" ) !=-1 ) { message=tr ( "Wrong password!

" ) +message; } QMessageBox::critical ( 0l,tr ( "Error" ),message, QMessageBox::Ok, QMessageBox::NoButton ); } else { if ( selectSessionDlg->isVisible() ) { ( ( QStandardItemModel* ) ( sessTv->model() ) )->item ( sessTv->currentIndex().row(), S_STATUS )->setData ( QVariant ( ( QString ) tr ( "suspended" ) ), Qt::DisplayRole ); bSusp->setEnabled ( false ); sOk->setEnabled ( true ); running_label->hide (); } } if ( selectSessionDlg->isVisible() ) selectSessionDlg->setEnabled ( true ); if (resumeAfterSuspending) { slotResumeSess(); } else { if(brokerMode && config.brokerSyncTimeout && !(brokerSyncTimer->isActive())) { brokerSyncTimer->start(); } } } void ONMainWindow::slotTermSess() { #ifdef Q_OS_LINUX if (directRDP) { nxproxy->terminate(); proxyRunning=false; return; } #endif selectSessionDlg->setEnabled ( false ); QString sessId=sessTv->model()->index ( sessTv->currentIndex().row(), S_ID ).data().toString(); QString host=sessTv->model()->index ( sessTv->currentIndex().row(), S_SERVER ).data().toString(); if ( !useLdap ) { if ( !embedMode ) { X2goSettings st ( "sessions" ); if (!(sessionExplorer->getLastSession())) { x2goDebug << "No session selected, returning without terminating a session."; return; } QString sid=sessionExplorer->getLastSession()->id(); } } else { sshConnection=findServerSshConnection(host); if (!sshConnection) { QMessageBox::critical ( 0l,tr ( "Error" ), tr ( "Server not available." ), QMessageBox::Ok, QMessageBox::NoButton ); return; } } if(brokerMode) { termBrokerSession(sessId, host); } else { termSession ( sessId ); } } void ONMainWindow::slotNewSess() { startNewSession(); } void ONMainWindow::slotRetTermSess ( bool result, QString output, int ) { setEnabled ( true ); if ( result==false ) { QString message=tr ( "Connection failed.\n" ) +output; if ( message.indexOf ( "publickey,password" ) !=-1 ) { message=tr ( "Wrong password!

" ) +message; } QMessageBox::critical ( 0l,tr ( "Error" ), message,QMessageBox::Ok, QMessageBox::NoButton ); } else { if ( selectSessionDlg->isVisible() ) { sessTv->model()->removeRow ( sessTv->currentIndex().row() ); slotActivated ( sessTv->currentIndex() ); } } if ( selectSessionDlg->isVisible() ) selectSessionDlg->setEnabled ( true ); if(brokerMode && config.brokerSyncTimeout && !(brokerSyncTimer->isActive())) { brokerSyncTimer->start(); } } void ONMainWindow::slotRetResumeSess ( bool result, QString output, int ) { x2goDebug<<"Agent output: "<Connection failed.
\n" ) +output; if ( message.indexOf ( "publickey,password" ) !=-1 ) { message=tr ( "Wrong Password!

" ) +message; } if ( output.indexOf ( "LIMIT" ) !=-1 ) { QString sessions=output.mid ( output.indexOf ( "LIMIT" ) +6 ); message="Sessions limit reached:"+sessions; } if ( output.indexOf ( "ACCESS DENIED" ) !=-1 ) { message="Access denied for user"; } QMessageBox::critical ( 0l,tr ( "Error" ), message,QMessageBox::Ok, QMessageBox::NoButton ); slotShowPassForm(); return; } output.replace ( " ","" ); QString passwd=getCurrentPass(); QString user=getCurrentUname(); QString host; bool sound=true; bool kdrive=false; bool rootless=false; int sndSystem=PULSE; QString sndPort; #if !defined (Q_OS_WIN) && !defined (Q_OS_DARWIN) sndPort="4713"; #endif /* !defined (Q_OS_WIN) && !defined (Q_OS_DARWIN) */ bool startSoundServer=true; bool sshSndTunnel=true; if ( useLdap ) { sound=startSound; startSoundServer=LDAPSndStartServer; if ( LDAPSndSys=="arts" ) sndSystem=ARTS; if ( LDAPSndSys=="esd" ) sndSystem=ESD; sndPort=LDAPSndPort; } else { QString sid; if ( !embedMode ) { if (!(sessionExplorer->getLastSession())) { x2goDebug << "No session selected, this should not happen since we already started resuming a session."; return; } sid=sessionExplorer->getLastSession()->id(); } else sid="embedded"; X2goSettings* st; if (!brokerMode) st= new X2goSettings( "sessions" ); else st= new X2goSettings(config.iniFile,QSettings::IniFormat); kdrive=st->setting()->value ( sid+"/kdrive", ( QVariant ) false ).toBool(); rootless=st->setting()->value ( sid+"/rootless", ( QVariant ) false ).toBool(); sound=st->setting()->value ( sid+"/sound", ( QVariant ) true ).toBool(); QString sndsys=st->setting()->value ( sid+"/soundsystem", ( QVariant ) "pulse" ).toString(); if ( sndsys=="arts" ) sndSystem=ARTS; if ( sndsys=="esd" ) sndSystem=ESD; #if !defined (Q_OS_WIN) && !defined (Q_OS_DARWIN) sndPort=st->setting()->value ( sid+"/sndport" ).toString(); #endif /* !defined (Q_OS_WIN) && !defined (Q_OS_DARWIN) */ startSoundServer=st->setting()->value ( sid+"/startsoundsystem", true ).toBool(); if ( embedMode&&config.confSnd ) { sound=config.useSnd; } #if !defined (Q_OS_WIN) && !defined (Q_OS_DARWIN) bool defPort=st->setting()->value ( sid+ "/defsndport",true ).toBool(); if ( defPort ) { switch ( sndSystem ) { case PULSE: sndPort="4713"; break; case ESD: sndPort="16001"; break; } } #endif /* !defined (Q_OS_WIN) && !defined (Q_OS_DARWIN) */ sshSndTunnel=st->setting()->value ( sid+"/soundtunnel", true ).toBool(); #if defined (Q_OS_WIN) || defined (Q_OS_DARWIN) if (sound) { if(!pulseManager || !(pulseManager->is_server_running())) { X2goSettings st ("settings"); bool disablePA = st.setting ()->value ("pulse/disable", (QVariant) false).toBool (); if(!systemDisablePA && ! disablePA) { show_RichText_WarningMsgBox (tr("PulseAudio is not running"), tr("Sound output will be disabled for this session. Please enable PulseAudio in the configuration dialog or disable sound in the session settings"),true); } sound=false; } else { switch (sndSystem) { case PULSE: sndPort = QString::number (pulseManager->get_pulse_port ()); break; case ESD: sndPort = QString::number (pulseManager->get_esd_port ()); break; } } } #endif /* defined (Q_OS_WIN) || defined (Q_OS_DARWIN) */ delete st; } //Will be used in runCommand startSessSound=sound; startSessSndSystem=sndSystem; if ( newSession ) { QString sString=output.trimmed(); sString.replace ( '\n','|' ); host=resumingSession.server; resumingSession=getNewSessionFromString ( sString ); if(kdrive) { resumingSession.sessionType=x2goSession::KDRIVE; } if(kdrive&&(rootless||resumingSession.published)) { resumingSession.sessionType=x2goSession::ROOTLESSKDRIVE; } resumingSession.server=host; resumingSession.crTime=QDateTime::currentDateTime().toString ( Qt::ISODate ); if ( managedMode ) { //replace session data for future resuming config.sessiondata=resumingSession.agentPid+"|"+ resumingSession.sessionId+"|"+ resumingSession.display+"|"+ resumingSession.server+"|"+ "S|"+ resumingSession.crTime+"|"+ resumingSession.cookie+"|"+ resumingSession.clientIp+"|"+ resumingSession.grPort+"|"+ resumingSession.sndPort+"|"+ resumingSession.crTime+"|"+ user+"|"+ "0|"+ resumingSession.fsPort; } //change the trayicon picture if (debugging) { setTrayIconToSessionIcon(tr("New session started") + ": " + resumingSession.sessionId); } else { setTrayIconToSessionIcon(tr("New session started") + "."); } } else { if(resumingSession.sessionType==x2goSession::KDRIVE||resumingSession.sessionType==x2goSession::ROOTLESSKDRIVE) { qDebug()<<"resuming kdrive session"; } else { qDebug()<<"resuming normal session"; } host=resumingSession.server; QStringList outputLines=output.split("\n",QString::SkipEmptyParts); foreach(QString line,outputLines) { if (line.indexOf("gr_port=")!=-1) { resumingSession.grPort=line.replace("gr_port=",""); x2goDebug<<"New gr_port: "<getLastSession()->id(); host=st.setting()->value ( sid+"/host", ( QVariant ) host ).toString(); } resumingSession.server=host; } localGraphicPort=resumingSession.grPort; int iport=localGraphicPort.toInt() +1000; while ( iport == resumingSession.sndPort.toInt() || iport == resumingSession.fsPort.toInt() || isServerRunning ( iport ) ) ++iport; localGraphicPort=QString::number ( iport ); sshConnection->startTunnel ( "localhost",resumingSession.grPort.toInt(),"localhost", localGraphicPort.toInt(), false, this, SLOT ( slotTunnelOk(int) ), SLOT ( slotTunnelFailed ( bool, QString,int ) ) ); if ( shadowSession ) return; sndTunnel=0l; if ( sound ) { if ( sndSystem==PULSE ) { startSoundServer=false; QString scmd; if ( !sshSndTunnel ) scmd="echo \"default-server=$(echo " "\"$SSH_CLIENT\" | awk '{print $1}'):"+ sndPort+ "\" > \"${HOME}/.x2go/C-"+ resumingSession.sessionId+ "/.pulse-client.conf\"" ";echo \"cookie-file=${HOME}/.x2go/C-"+ resumingSession.sessionId+ "/.pulse-cookie"+ "\" >> \"${HOME}/.x2go/C-"+ resumingSession.sessionId+ "/.pulse-client.conf\"" ";echo \"autospawn=no\" >>" "\"${HOME}/.x2go/C-" + resumingSession.sessionId + "/.pulse-client.conf\""; else scmd="echo \"default-server=localhost:"+ resumingSession.sndPort+ "\" > \"${HOME}/.x2go/C-"+ resumingSession.sessionId+ "/.pulse-client.conf\"" ";echo \"cookie-file=${HOME}/.x2go/C-"+ resumingSession.sessionId+ "/.pulse-cookie"+ "\" >> \"${HOME}/.x2go/C-"+ resumingSession.sessionId+ "/.pulse-client.conf\"" ";echo \"autospawn=no\" >>" "\"${HOME}/.x2go/C-" + resumingSession.sessionId + "/.pulse-client.conf\""; sshConnection->executeCommand (scmd); bool sysPulse=false; #ifdef Q_OS_LINUX loadPulseModuleNativeProtocol(); QFile file ( "/etc/default/pulseaudio" ); if ( file.open ( QIODevice::ReadOnly | QIODevice::Text ) ) { while ( !file.atEnd() ) { QByteArray line = file.readLine(); int pos=line.indexOf ( "PULSEAUDIO_SYSTEM_START=1" ); if ( pos!=-1 ) { int commentPos=line.indexOf ( "#" ); if ( commentPos==-1 || commentPos>pos ) { sysPulse=true; break; } } } file.close(); } #endif QString pulsecookie_filename = ""; if ( sysPulse ) { if ( QFile::exists("/run/pulse/.config/pulse/cookie") ) { pulsecookie_filename = "/run/pulse/.config/pulse/cookie"; } else if ( QFile::exists("/run/pulse/.pulse-cookie") ) { pulsecookie_filename = "/run/pulse/.pulse-cookie"; } else if ( QFile::exists("/var/run/pulse/.config/pulse/cookie") ) { pulsecookie_filename = "/var/run/pulse/.config/pulse/cookie"; } else if ( QFile::exists("/var/run/pulse/.pulse-cookie") ) { pulsecookie_filename = "/var/run/pulse/.pulse-cookie"; } if ( pulsecookie_filename.length() > 0 ) { sshConnection->copyFile( pulsecookie_filename, "$HOME/.x2go/C-"+ resumingSession.sessionId+ "/.pulse-cookie", this, SLOT ( slotPCookieReady ( bool, QString,int ))); } } else { #if !defined (Q_OS_WIN) && !defined (Q_OS_DARWIN) if ( QFile::exists(homeDir+"/.config/pulse/cookie") ) { pulsecookie_filename = homeDir+"/.config/pulse/cookie"; } else if ( QFile::exists(homeDir+"/.pulse-cookie") ) { pulsecookie_filename = homeDir+"/.pulse-cookie"; } if ( pulsecookie_filename.length() > 0 ) { sshConnection->copyFile(pulsecookie_filename, "$HOME/.x2go/C-"+ resumingSession.sessionId+ "/.pulse-cookie", this, SLOT ( slotPCookieReady ( bool, QString,int ))); } #else /* !defined (Q_OS_WIN) && !defined (Q_OS_DARWIN) */ QString cooFile = QDir::toNativeSeparators (QDir (pulseManager->get_pulse_dir ().absolutePath () + "/.pulse-cookie").absolutePath ()); QString destFile="$HOME/.x2go/C-"+ resumingSession.sessionId+ "/.pulse-cookie"; sshConnection->copyFile(cooFile, destFile, this, SLOT ( slotPCookieReady ( bool, QString,int ))); #endif /* !defined (Q_OS_WIN) && !defined (Q_OS_DARWIN) */ } } if ( sndSystem==ESD ) { #if !defined (Q_OS_WIN) && !defined (Q_OS_DARWIN) sshConnection->copyFile(homeDir+"/.esd_auth", "$HOME/.esd_auth" ); #else /* !defined (Q_OS_WIN) && !defined (Q_OS_DARWIN) */ QString cooFile = QDir::toNativeSeparators (QDir (pulseManager->get_pulse_dir ().absolutePath () + "/.esd_auth").absolutePath ()); QString destFile="$HOME/.esd_auth"; sshConnection->copyFile(cooFile, destFile ); #endif /* defined (Q_OS_LINUX) */ } /* Windows and Darwin are covered by PulseManager. */ #if !defined (Q_OS_WIN) && !defined (Q_OS_DARWIN) if ( startSoundServer ) { soundServer=new QProcess ( this ); QString acmd="artsd",ecmd="esd"; if ( sndSystem==ESD ) soundServer->start ( ecmd+ " -tcp -nobeeps -bind localhost -port "+ resumingSession.sndPort ); if ( sndSystem==ARTS ) soundServer->start ( acmd+" -u -N -p "+ resumingSession.sndPort ); sndPort=resumingSession.sndPort; } #endif /* !defined (Q_OS_WIN) && !defined (Q_OS_DARWIN) */ if ( sshSndTunnel ) { sndTunnel=sshConnection->startTunnel ( "localhost", resumingSession.sndPort.toInt(),"127.0.0.1", sndPort.toInt(),true,this,NULL, SLOT ( slotSndTunnelFailed ( bool, QString, int ) )); } } } x2goSession ONMainWindow::getSelectedSession() { QString sessId=sessTv->model()->index ( sessTv->currentIndex().row(), S_ID ).data().toString(); for ( int i=0; igetLastSession())) { x2goDebug << "No session selected, not searching for proxy window."; return; } sid=sessionExplorer->getLastSession()->id(); } else sid="embedded"; if (brokerMode) st=new X2goSettings(config.iniFile,QSettings::IniFormat); else st= new X2goSettings( "sessions" ); randr=st->setting()->value ( sid+"/xinerama", ( QVariant ) defaultXinerama ).toBool(); fs=st->setting()->value ( sid+"/fullscreen", ( QVariant ) defaultFullscreen).toBool(); width=st->setting()->value ( sid+"/width", ( QVariant ) "800").toString(); height=st->setting()->value ( sid+"/height", ( QVariant ) "600").toString(); clipboard=st->setting()->value ( sid+"/clipboard", ( QVariant ) "both").toString(); noresize=st->setting()->value ( sid+"/noresize", ( QVariant ) false).toBool(); if (st->setting()->value ( sid+"/multidisp", ( QVariant ) false ).toBool()) { dispNumber=st->setting()->value ( sid+"/display", (QVariant ) "1").toString(); multidisp=st->setting()->value ( sid+"/multidisp", ( QVariant ) false ).toBool(); } delete st; } } QStringList options; #ifdef Q_OS_WIN //restore real path, as we not using cygwin for x2gokdriveclient nxroot=homeDir +"/.x2go"; dirpath=nxroot+"/S-"+resumingSession.sessionId; #endif proxyCmd="x2gokdriveclient"; if(ONMainWindow::debugging) { options <<"--debug"; } options<<"--connect"<<"localhost"<<"--port"<start ( proxyCmd, options ); } else { x2goDebug<<"Starting NX proxy, command: " + proxyCmd; nxproxy->start ( proxyCmd); } proxyRunning=true; if(brokerMode) { sendEventToBroker(CONNECTING); } // always search for proxy window on linux. On Windows only in window mode #ifdef Q_OS_WIN if (xorgMode==WIN) { #endif //don't search proxy for kdrive sessions if(!(resumingSession.sessionType==x2goSession::KDRIVE || resumingSession.sessionType==x2goSession::ROOTLESSKDRIVE)) proxyWinTimer->start ( 300 ); #ifdef Q_OS_WIN } #endif if ( embedMode ) { // proxyWinTimer->start ( 300 ); if ( !startEmbedded ) { act_embedContol->setText ( tr ( "Attach X2Go window" ) ); } } #ifdef Q_OS_WIN else { // #ifdef CFGCLIENT // // if using XMing, we must find proxy win for case, that we should make it fullscreen // if(useInternalX&& (internalX==XMING)) // #endif // proxyWinTimer->start ( 300 ); } #endif showSessionStatus(); QTimer::singleShot ( 30000,this,SLOT ( slotRestartProxy() ) ); } void ONMainWindow::slotTunnelFailed ( bool result, QString output, int ) { if ( result==false ) { if ( !managedMode ) { QString message=tr ( "Unable to create SSH tunnel for X2Go session (NX) startup:\n" ) +output; QMessageBox::critical ( 0l,tr ( "Error" ),message, QMessageBox::Ok, QMessageBox::NoButton ); } // if ( tunnel ) // delete tunnel; // if ( sndTunnel ) // delete sndTunnel; // if ( fsTunnel ) // delete fsTunnel; // if ( soundServer ) // delete soundServer; tunnel=sndTunnel=fsTunnel=0l; soundServer=0l; nxproxy=0l; proxyRunning=false; if ( !managedMode ) slotShowPassForm(); } } void ONMainWindow::slotSndTunnelFailed ( bool result, QString output, int ) { if ( result==false ) { if ( !managedMode ) { QString message=tr ( "Unable to create SSH tunnel for audio data:\n" ) +output; QMessageBox::warning ( 0l,tr ( "Warning" ),message, QMessageBox::Ok, QMessageBox::NoButton ); } sndTunnel=0l; } } #ifdef Q_OS_DARWIN void ONMainWindow::slotSetModMap() { if (!nxproxy) { return; } if (kbMap.isEmpty ()) { QProcess pr (this); QProcessEnvironment tmp_env = QProcessEnvironment::systemEnvironment (); QString path_val = tmp_env.value ("PATH"); /* Let's set a reasonable default value if none is provided. */ if (path_val.isEmpty ()) { /* Prefer the default MacPorts prefix. */ path_val = MACPORTS_PREFIX "/bin:" MACPORTS_PREFIX "/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/sbin:/usr/X11R6/bin:/opt/X11/bin"; tmp_env.insert ("PATH", path_val); } else { /* Search for and add specific directories to the PATH value, if necessary. */ QStringList to_back, to_front; to_back << "/opt/X11/bin"; to_front << MACPORTS_PREFIX "/bin" << "/usr/local/bin"; path_val = add_to_path (path_val, to_back); path_val = add_to_path (path_val, to_front, false); /* Insert will overwrite the value automatically. */ tmp_env.insert ("PATH", path_val); /* * Also alter our own environment so we can actually * execute xmodmap and friends later on. */ qputenv ("PATH", path_val.toUtf8 ()); } pr.setProcessEnvironment (tmp_env); QStringList key_map_fetch_args; key_map_fetch_args << "-pke"; pr.start ("xmodmap", key_map_fetch_args); bool key_map_fetch_ret = pr.waitForStarted (); if (!key_map_fetch_ret) { handle_xmodmap_error (pr); } else { key_map_fetch_ret = pr.waitForFinished (); if (!key_map_fetch_ret) { handle_xmodmap_error (pr); } kbMap = pr.readAllStandardOutput (); QStringList mod_fetch_args; mod_fetch_args << "-pm"; pr.start ("xmodmap", mod_fetch_args); bool mod_fetch_ret = pr.waitForStarted (); if (!mod_fetch_ret) { handle_xmodmap_error (pr); } else { mod_fetch_ret = pr.waitForFinished (); if (!mod_fetch_ret) { handle_xmodmap_error (pr); } QString modifiers = pr.readAllStandardOutput (); x2goDebug << "modifiers: " << modifiers; /* Reset all modifiers first. */ kbMap += "clear shift\nclear lock\nclear control\nclear mod1\nclear mod2\nclear mod3\nclear mod4\nclear mod5\n"; /* And set them back again. */ QStringList lines = modifiers.split ("\n", QString::SkipEmptyParts); for (int i = 0; i < lines.count (); ++i) { QStringList parts = lines[i].split (" ", QString::SkipEmptyParts); if (parts.count () < 2) { continue; } QString mod = parts[0]; if ((mod == "shift") || (mod == "lock") || (mod == "control") || (mod == "mod1") || (mod == "mod2") || (mod == "mod3") || (mod == "mod4") || (mod == "mod5")) { for (int j = 1; j < parts.count (); ++j) { if (parts[j].indexOf ("(") == -1) { kbMap += "add " + mod + " = " + parts[j] + "\n"; } } } } } } } if (kbMap.isEmpty ()) { x2goWarningf (9) << "Could not fetch keyboard map via xmodmap. Internal error. Not synchronizing with remote side."; } else { /* Send modified map to server. */ QString cmd = "export DISPLAY=\":" + resumingSession.display + "\"; echo \"" + kbMap + "\" | xmodmap -"; sshConnection->executeCommand (cmd); } } void ONMainWindow::handle_xmodmap_error (QProcess &proc) { QString main_text ("xmodmap "); QString informative_text; QProcessEnvironment proc_env = QProcessEnvironment::systemEnvironment (); /* If the process has a special env, fetch it. */ if (!(proc.processEnvironment ().isEmpty ())) { proc_env = proc.processEnvironment (); } switch (proc.error ()) { case QProcess::FailedToStart: { main_text += tr ("failed to start."); informative_text += tr ("This likely means the binary is not available.\n" "The current search path is: "); QString path_val = proc_env.value ("PATH", "unknown"); /* Add a newline every 100 characters. */ for (std::size_t i = 100; i < static_cast (path_val.size ()); i += 100) { path_val.insert (i, "\n"); } informative_text += path_val; break; } case QProcess::Crashed: { main_text += tr ("returned a non-zero exit code or crashed otherwise."); informative_text += tr ("Execution failed, exit code was: "); informative_text += QString::number (proc.exitCode ()); break; } case QProcess::Timedout: { main_text += tr ("didn't start up in time."); informative_text = tr ("This error shouldn't come up."); break; } case QProcess::WriteError: { main_text += tr ("didn't accept a write operation."); informative_text = tr ("It is probably not running correctly or crashed in-between."); break; } case QProcess::ReadError: { main_text = tr ("Unable to read from xmodmap."); informative_text = tr ("It is probably not running correctly or crashed in-between."); break; } case QProcess::UnknownError: { main_text += tr ("encountered an unknown error during start up or execution."); break; } default: { main_text += tr ("experienced an undefined error."); break; } } if (!informative_text.isEmpty ()) { informative_text += "\n\n"; } informative_text += tr ("X2Go Client will now terminate.\n\n" "File a bug report as outlined on the bugs wiki page."); show_RichText_ErrorMsgBox (main_text, informative_text); trayQuit (); } #endif void ONMainWindow::slotProxyError ( QProcess::ProcessError err ) { #ifdef Q_OS_LINUX if(err==QProcess::FailedToStart && directRDP) { QString main_text = tr("Failed to start RDP or XDMCP client"); QString informative_text = tr ("Check session settings and ensure that selected client is installed on your system."); show_RichText_ErrorMsgBox (main_text, informative_text); } #endif slotProxyFinished ( -1,QProcess::CrashExit ); } void ONMainWindow::slotProxyFinished ( int,QProcess::ExitStatus ) { if(brokerMode) { sendEventToBroker(FINISHED); } #ifdef Q_OS_DARWIN if (modMapTimer) { disconnect (modMapTimer, SIGNAL (timeout ()), this, SLOT (slotSetModMap ())); modMapTimer->stop (); delete (modMapTimer); modMapTimer = 0; } kbMap = QString (); //fixes bug, when mainwindow inputs not accepting focus under mac setFocus (); #endif //set tray icon to default if (trayIcon && !keepTrayIcon) trayIcon->setIcon(QIcon ( iconsPath("/128x128/x2go.png") )); if ( embedMode ) { proxyWinTimer->stop(); setEmbedSessionActionsEnabled ( false ); } #ifdef Q_OS_WIN else proxyWinTimer->stop(); if (! startXorgOnStart) { if (xorg) { if (xorg->state() ==QProcess::Running) { xorg->terminate(); delete xorg; xorg=0; } } } #endif if ( closeEventSent ) return; if ( soundServer ) delete soundServer; if ( spoolTimer ) delete spoolTimer; x2goDebug<<"Deleting Proxy." ; disconnect ( nxproxy,SIGNAL ( error ( QProcess::ProcessError ) ),this, SLOT ( slotProxyError ( QProcess::ProcessError ) ) ); disconnect ( nxproxy,SIGNAL ( finished ( int,QProcess::ExitStatus ) ),this, SLOT ( slotProxyFinished ( int,QProcess::ExitStatus ) ) ); disconnect ( nxproxy,SIGNAL ( readyReadStandardError() ),this, SLOT ( slotProxyStderr() ) ); disconnect ( nxproxy,SIGNAL ( readyReadStandardOutput() ),this, SLOT ( slotProxyStdout() ) ); proxyRunning=false; if (trayEnabled) { trayIconActiveConnectionMenu->setTitle(tr("Not connected")); trayIconActiveConnectionMenu->setEnabled(false); if (trayMaxDiscon) showNormal(); } trayAutoHidden=false; bool emergencyExit=false; if(proxyErrString.indexOf("No data received from remote proxy")!=-1) { emergencyExit=true; x2goWarningf(4)<< tr( "Emergency exit." ); } if ( nxproxy ) { if ( nxproxy->state() ==QProcess::Running ) { emergencyExit=true; x2goWarningf(5)<< tr( "Waiting for proxy to exit." ); if ( !nxproxy->waitForFinished ( 3000 ) ) { x2goWarningf(6)<< tr( "Proxy didn't terminate after 3 seconds. Killing the proxy." ); nxproxy->kill(); } } #ifdef Q_OS_LINUX if (directRDP) nxproxy=0; #endif } x2goDebug<<"Waiting for proxy to exit."; spoolTimer=0l; tunnel=sndTunnel=fsTunnel=0l; soundServer=0l; nxproxy=0l; proxyWinId=0; #ifdef Q_OS_LINUX if (directRDP) { if (closeDisconnect) { close(); } pass->setText ( "" ); QTimer::singleShot ( 2000,this, SLOT ( slotShowPassForm() ) ); return; } #endif if ( !emergencyExit && !shadowSession && !usePGPCard && ! ( embedMode && ( config.checkexitstatus==false ) ) ) { x2goDebug<<"Checking exit status."; check_cmd_status(); } else { x2goDebug<<"Deleting SSH connection instance."; delete sshConnection; x2goDebug<<"Deleted SSH connection instance." ; sshConnection=0; if (startHidden) { x2goInfof(9) << tr("Closing X2Go Client because it was started in hidden mode."); close(); } else if (closeDisconnect) { x2goInfof(10) << tr("Closing X2Go Client because the --close-disconnect parameter was passed."); close(); } } if ( readExportsFrom!=QString::null ) { exportTimer->stop(); if ( extLogin ) { currentKey=QString::null; } } if ( printSupport ) cleanPrintSpool(); if ( !restartResume ) { if ( brokerMode && (!config.brokerAutologoff) ) { x2goDebug<<"Re-reading user's session profiles from broker."; QTimer::singleShot ( 2000,broker, SLOT ( getUserSessions() ) ); } else if ( brokerMode && config.brokerAutologoff ) { x2goDebug<<"Logging off from broker as requested via command line."; QTimer::singleShot(1, this,SLOT(slotGetBrokerAuth())); } else if ( !embedMode ) { pass->setText ( "" ); QTimer::singleShot ( 2000,this, SLOT ( slotShowPassForm() ) ); } } else { restartResume=false; sessionStatusDlg->hide(); resumeSession ( resumingSession ); } x2goDebug<<"Finished proxy."; setStatStatus ( tr ( "Finished" ) ); #ifdef Q_OS_DARWIN //fixes bug, when mainwindow inputs not accepting focus under mac setFocus(); #endif } void ONMainWindow::slotProxyStderr() { QString reserr; if ( nxproxy ) reserr= nxproxy->readAllStandardError(); proxyErrString+=reserr; x2goDebug<<"Proxy wrote on stderr: "<insertPlainText ( reserr ); stInfo->ensureCursorVisible(); if ( reserr.indexOf ( "Connecting to remote host 'localhost:"+ /*resumingSession.grPort*/ localGraphicPort ) !=-1 ) { setStatStatus ( tr ( "connecting" ) ); } if ( reserr.indexOf ( "Connection to remote proxy 'localhost:"+ /*resumingSession.grPort*/ localGraphicPort+"' established" ) !=-1 ) { if ( newSession ) { setStatStatus ( tr ( "starting" ) ); } else { setStatStatus ( tr ( "resuming" ) ); } } if ( reserr.indexOf ( "Established X server connection" ) !=-1 ) { if(brokerMode) { sendEventToBroker(CONNECTED); } setStatStatus ( tr ( "running" ) ); destroySplash(); if (trayEnabled) { if (!useLdap) trayIconActiveConnectionMenu->setTitle(sessionExplorer->getLastSession()->name()); else trayIconActiveConnectionMenu->setTitle(lastUser->username()); trayIconActiveConnectionMenu->setEnabled(true); if (trayMinCon && !trayAutoHidden) { trayAutoHidden=true; hide(); } } if ( embedMode ) setEmbedSessionActionsEnabled ( true ); disconnect ( sbSusp,SIGNAL ( clicked() ),this, SLOT ( slotTestSessionStatus() ) ); disconnect ( sbSusp,SIGNAL ( clicked() ),this, SLOT ( slotSuspendSessFromSt() ) ); connect ( sbSusp,SIGNAL ( clicked() ),this, SLOT ( slotSuspendSessFromSt() ) ); if ( !showExport ) { showExport=true; /*connect ( sbExp,SIGNAL ( clicked() ),this, SLOT ( slot_exportDirectory() ) );*/ sbExp->setEnabled ( true ); exportDefaultDirs(); if ( readExportsFrom!=QString::null ) { exportTimer->start ( 2000 ); } } sbSusp->setToolTip ( tr ( "Suspend" ) ); #ifdef Q_OS_DARWIN // Only start this once... if (!modMapTimer) { modMapTimer = new QTimer (this); connect (modMapTimer, SIGNAL (timeout ()), this, SLOT (slotSetModMap ())); modMapTimer->start (10000); slotSetModMap (); } #endif if ( newSession ) { runCommand(); newSession=false; } } if ( reserr.indexOf ( tr ( "Connection timeout, aborting" ) ) !=-1 ) setStatStatus ( tr ( "aborting" ) ); } void ONMainWindow::slotProxyStdout() { QString resout ( nxproxy->readAllStandardOutput() ); x2goDebug<<"Proxy wrote on stdout: "<isVisible()) { if(pass && pass->isVisible()&& pass->hasFocus()) { passFocus=true; } if(login && login->isVisible()&& login->hasFocus()) { userFocus=true; } } #endif QWidget::setFocus(); #ifdef Q_OS_DARWIN if(userFocus) { login->setFocus(); } if(passFocus) { pass->setFocus(); } #endif } void ONMainWindow::slotShowPassForm() { #ifdef Q_OS_DARWIN //fixes bug, when mainwindow inputs not accepting focus under mac x2goDebug<<"Setting focus."<show(); login->show(); } else { loginPrompt->hide(); login->hide(); } setEnabled ( true ); if ( !embedMode ) { u->hide(); uname->hide(); } sessionStatusDlg->hide(); selectSessionDlg->hide(); setEnabled ( true ); if ( isPassShown ) { passForm->show(); passForm->setEnabled ( true ); } isPassShown=true; login->setEnabled ( true ); if ( login->text().length() >0 ) { pass->setFocus(); pass->selectAll(); } else { login->setFocus(); login->selectAll(); } if ( !embedMode ) { u->setEnabled ( true ); } else { if ( config.user.length() >0 ) login->setEnabled ( false ); } } void ONMainWindow::showSessionStatus() { setStatStatus(); } void ONMainWindow::slotShowAdvancedStat() { if ( !miniMode ) { if ( sbAdv->isChecked() ) { sessionStatusDlg->setFixedSize ( sessionStatusDlg->width(), sessionStatusDlg->height() *2 ); } else { sessionStatusDlg->setFixedSize ( sessionStatusDlg->sizeHint() ); stInfo->hide(); } } else { if ( sbAdv->isChecked() ) { sessionStatusDlg->setFixedSize ( 310,300 ); } else { stInfo->hide(); sessionStatusDlg->setFixedSize ( 310,200 ); } } // username->invalidate(); if ( sbAdv->isChecked() ) { stInfo->show(); } X2goSettings st ( "settings" ); st.setting()->setValue ( "showStatus", ( QVariant ) sbAdv->isChecked() ); st.setting()->sync(); } void ONMainWindow::slotResumeDoubleClick ( const QModelIndex& ) { if ( !shadowSession ) slotResumeSess(); } void ONMainWindow::suspendBrokerSession(const QString& sessId, const QString& host) { suspendTerminateHostFromBroker=host; suspendTerminateSessionFromBroker=sessId; startSession(config.session, SUSPEND); } void ONMainWindow::termBrokerSession(const QString& sessId, const QString& host) { if(QMessageBox::warning ( this,tr ( "Warning" ), tr ( "Are you sure you want to terminate " "this session?\n" "Unsaved documents will be lost." ), QMessageBox::Yes,QMessageBox::No )!= QMessageBox::Yes) { setEnabled(true); selectSessionDlg->setEnabled ( true ); return; } suspendTerminateHostFromBroker=host; suspendTerminateSessionFromBroker=sessId; startSession(config.session, TERMINATE); } void ONMainWindow::suspendSession ( QString sessId ) { sshConnection->executeCommand ( "x2gosuspend-session "+sessId, this, SLOT ( slotRetSuspSess ( bool, QString, int ) ) ); } bool ONMainWindow::termSession ( QString sessId, bool warn ) { if ( warn ) { bool hide_after=false; if (isHidden()) { showNormal(); hide_after=true; } int answer=QMessageBox::warning ( this,tr ( "Warning" ), tr ( "Are you sure you want to terminate " "this session?\n" "Unsaved documents will be lost." ), QMessageBox::Yes,QMessageBox::No ); if (hide_after) hide(); if ( answer != QMessageBox::Yes ) { if ( selectSessionDlg->isVisible() ) selectSessionDlg->setEnabled ( true ); return false; } } if ( shadowSession ) { nxproxy->terminate(); return true; } x2goDebug<<"Terminating session."; sshConnection->executeCommand ( "x2goterminate-session "+sessId, this, SLOT ( slotRetTermSess ( bool, QString,int) ) ); proxyRunning=false; return true; } void ONMainWindow::setStatStatus ( QString status ) { setEnabled ( true ); passForm->hide(); selectSessionDlg->hide(); if ( status == QString::null ) status=statusString; else statusString=status; QString tstr; if ( statusLabel ) statusLabel->setText ( QString::null ); if ( resumingSession.sessionId!=QString::null ) { QDateTime dt=QDateTime::fromString ( resumingSession.crTime, Qt::ISODate ); tstr=dt.toString(); } if ( !embedMode || !proxyWinEmbedded ) { if(!brokerMode) { statusBar()->showMessage ( ""); statusBar()->hide(); } QString srv; if ( brokerMode ) { srv=config.serverIp; } else if ( embedMode ) { srv=config.server; } else { srv=resumingSession.server; } slVal->setText ( resumingSession.sessionId+"\n"+ srv+"\n"+ getCurrentUname() +"\n"+ resumingSession.display+ "\n"+tstr+"\n"+status ); slVal->setFixedSize ( slVal->sizeHint() ); sessionStatusDlg->show(); if (resumingSession.published) sbApps->show(); else sbApps->hide(); } else { QString srv; if ( brokerMode ) { srv=config.serverIp; } else { srv=config.server; } QString message=getCurrentUname() +"@"+ srv+ ", "+tr ( "Session" ) +": "+ resumingSession.sessionId+", "+ tr ( "Display" ) +": "+ resumingSession.display+", "+ tr ( "Creation time" ) +": "+tstr; if ( statusLabel ) { statusLabel->setText ( " "+message ); } else { if ( config.showstatusbar ) { statusBar()->show(); statusBar()->showMessage ( message ); } } sessionStatusDlg->hide(); } if(splash) { splash->showMessage(status, Qt::AlignLeft|Qt::AlignBottom, Qt::white); } } void ONMainWindow::slotRestartProxy() { if ( !sessionStatusDlg->isVisible() ) return; if ( proxyErrString.indexOf ( "Established X server connection" ) ==-1 ) { stInfo->insertPlainText ( tr ( "Connection timeout, aborting" ) ); if ( nxproxy ) nxproxy->terminate(); proxyRunning=false; restartResume=true; } } void ONMainWindow::slotTestSessionStatus() { if ( !sessionStatusDlg->isVisible() ) return; if ( proxyErrString.indexOf ( "Established X server connection" ) ==-1 ) { stInfo->insertPlainText ( tr ( "Connection timeout, aborting" ) ); if ( nxproxy ) nxproxy->terminate(); proxyRunning=false; } } x2goSession ONMainWindow::getNewSessionFromString ( const QString& string ) { QStringList lst=string.split ( '|' ); x2goSession s; s.display=lst[0]; s.cookie=lst[1]; s.agentPid=lst[2]; s.sessionId=lst[3]; s.grPort=lst[4]; s.sndPort=lst[5]; if ( lst.count() >6 ) s.fsPort=lst[6]; return s; } #if defined (Q_OS_DARWIN) || defined (Q_OS_WIN) void ONMainWindow::pulseManagerWrapper () { #ifdef Q_OS_WIN if (!embedMode || !config.confSnd || (config.confSnd && config.useSnd)) #endif /* defined (Q_OS_WIN) */ { X2goSettings st ("settings"); bool disablePulse = st.setting ()->value ("pulse/disable", (QVariant) false).toBool (); if(disablePulse||systemDisablePA) { x2goDebug<<"Not starting PulseAudio"; return; } pulseManagerThread = new QThread (0); pulseManager = new PulseManager (); connect(pulseManager, SIGNAL(sig_pulse_user_warning(bool, const QString&, const QString&, bool)), this, SLOT(slotShowPAMSGDialog(bool, const QString&, const QString&, bool))); bool disableInput = st.setting ()->value ("pulse/norecord", (QVariant) false).toBool (); pulseManager->set_record (!disableInput); pulseManager->set_debug (debugging); pulseManager->moveToThread (pulseManagerThread); /* * Spawn PulseManager::start() once the thread started up successfully. * Another means of doing that would be via * QMetaObject::invokeMethod (pulseManager, "start", Qt::QueuedConnection); */ connect (pulseManagerThread, SIGNAL (started ()), pulseManager, SLOT (start ())); pulseManagerThread->start (); } } #endif /* defined (Q_OS_DARWIN) || defined (Q_OS_WIN) */ void ONMainWindow::slotAppDialog() { AppDialog dlg(this); dlg.exec(); } void ONMainWindow::runCommand() { if ( runRemoteCommand ) { /* 1st override PATH and determine the base path to x2goruncommand. * Then in SlotRunCommand, call x2goruncommand without overriding PATH. * This ensures that the PATH is never overridden for the actual user * session. * Fixes: #1100 */ sshConnection->executeCommand ( "x2gobasepath", this, SLOT ( SlotRunCommand ( bool, QString, int )), true); } } void ONMainWindow::runApplication(QString exec) { QString cmd = "PULSE_CLIENTCONFIG=\"${HOME}/.x2go/C-" + resumingSession.sessionId+"/.pulse-client.conf\" DISPLAY=:" + resumingSession.display + " setsid " + exec + " 1> /dev/null 2>/dev/null & exit"; sshConnection->executeCommand (cmd, 0, 0, false); } void ONMainWindow::SlotRunCommand(bool, QString output, int) { QString passwd=getCurrentPass(); QString user=getCurrentUname(); QString host=resumingSession.server; QString command; QString sessionType="D"; QString rdpOpts,rdpServer; bool rdpFS=false; QString rdpWidth; QString rdpHeight; bool rootless=false; resumingSession.published=false; if ( !embedMode ) { X2goSettings* st; if (!brokerMode) st=new X2goSettings( "sessions" ); else st=new X2goSettings(config.iniFile, QSettings::IniFormat); if ( useLdap ) command=sessionCmd; else { if (!(sessionExplorer->getLastSession())) { x2goDebug << "No session selected, not running command."; return; } QString sid=sessionExplorer->getLastSession()->id(); command=st->setting()->value ( sid+"/command", ( QVariant ) tr ( "KDE" ) ).toString(); rdpOpts=st->setting()->value ( sid+"/rdpoptions", ( QVariant ) "" ).toString(); if ( user != "" ) { rdpOpts.replace("X2GO_USER", user); } if ( passwd != "" ) { rdpOpts.replace("X2GO_PASSWORD", passwd); } rdpServer=st->setting()->value ( sid+"/rdpserver", ( QVariant ) "" ).toString(); rootless=st->setting()->value ( sid+"/rootless", ( QVariant ) false ).toBool(); resumingSession.published=st->setting()->value ( sid+"/published", ( QVariant ) false ).toBool(); rdpFS=st->setting()->value ( sid+"/fullscreen", ( QVariant ) defaultFullscreen ).toBool(); rdpHeight=st->setting()->value ( sid+"/height", ( QVariant ) defaultHeight ).toString(); rdpWidth=st->setting()->value ( sid+"/width", ( QVariant ) defaultWidth ).toString(); } delete st; } else { command=config.command; rootless=config.rootless; resumingSession.published=config.published; } resumingSession.command=command; if ( rootless ) sessionType="R"; if ( resumingSession.published ) { sessionType="P"; command="PUBLISHED"; } if ( command=="KDE" ) { command="startkde"; } else if ( command=="GNOME" ) { command="gnome-session"; } else if ( command=="UNITY" ) { command="unity"; } else if ( command=="XFCE" ) { command="xfce4-session"; } else if ( command=="MATE" ) { command="mate-session"; } else if ( command=="LXDE" ) { command="startlxde"; } else if (command == "LXQt") { command = "startlxqt"; } // Note that there are multiple possible Cinnamon commands that the server // may call. else if ( command=="CINNAMON" ) { command="cinnamon-session"; } else if ( command=="TRINITY" ) { command="starttrinity"; } else if ( command=="OPENBOX" ) { command="openbox-session"; } else if ( command=="ICEWM" ) { command="icewm-session"; } else if ( command=="RDP" ) { command="rdesktop "; if ( rdpFS ) { command+=" -f "; sessionType="D"; rootless=false; } else { command+=" -g "+rdpWidth+"x"+rdpHeight; rootless=true; } command+=" "+rdpOpts+ " "+rdpServer; } if ( managedMode ) return; QString cmd; command.replace ( " ","X2GO_SPACE_CHAR" ); QString krbFwString; if(sshConnection->useKerberos() && sshConnection->get_kerberosDelegation()) { krbFwString="KRB5CCNAME=`echo $KRB5CCNAME |sed 's/FILE://g'` \ KRBFL=$HOME/.x2go/C-"+resumingSession.sessionId+"/krb5cc ;\ cp -a $KRB5CCNAME $KRBFL;KRB5CCNAME=$KRBFL "; } if ( !startSessSound || startSessSndSystem==PULSE ) { cmd=krbFwString+"setsid " + output + "/bin/x2goruncommand "+ resumingSession.display+" "+ resumingSession.agentPid + " " + resumingSession.sessionId+" "+ resumingSession.sndPort+ " "+ command+" nosnd "+ sessionType +" 1> /dev/null 2>/dev/null & exit"; if ( startSessSndSystem ==PULSE ) { cmd="export PULSE_CLIENTCONFIG=\"${HOME}/.x2go/C-"+ resumingSession.sessionId+ "/.pulse-client.conf\";"+cmd; } } else { switch ( startSessSndSystem ) { case ESD: cmd=krbFwString+"setsid " + output + "/bin/x2goruncommand "+ resumingSession.display+" "+ resumingSession.agentPid + " " + resumingSession.sessionId+" "+ resumingSession.sndPort+ " "+ command+" esd "+ sessionType +" 1> /dev/null 2>/dev/null & exit"; break; case ARTS: cmd=krbFwString+"setsid " + output + "/bin/x2goruncommand "+ resumingSession.display+" "+ resumingSession.agentPid + " " + resumingSession.sessionId+" "+ resumingSession.sndPort+ " "+ command+" arts "+ sessionType +" 1> /dev/null 2>/dev/null & exit"; break; } } sshConnection->executeCommand ( cmd, this, SLOT ( slotRetRunCommand ( bool, QString, int )), false); } void ONMainWindow::slotRetRunCommand ( bool result, QString output, int ) { if ( result==false ) { QString message=tr ( "Connection failed.\n:\n" ) +output; if ( message.indexOf ( "publickey,password" ) !=-1 ) { message=tr ( "Wrong password!

" ) + message; } QMessageBox::critical ( 0l,tr ( "Error" ),message, QMessageBox::Ok, QMessageBox::NoButton ); } else { if (resumingSession.published) readApplications(); } } void ONMainWindow::readApplications() { sshConnection->executeCommand ( "x2gogetapps", this, SLOT ( slotReadApplications ( bool, QString, int) )); sbApps->setEnabled(false); } void ONMainWindow::slotReadApplications(bool result, QString output, int) { if ( result==false ) { QString message=tr ( "Connection failed.\n:\n" ) +output; if ( message.indexOf ( "publickey,password" ) !=-1 ) { message=tr ( "Wrong password!

" ) + message; } QMessageBox::critical ( 0l,tr ( "Error" ),message, QMessageBox::Ok, QMessageBox::NoButton ); return; } sbApps->setEnabled(true); applications.clear(); QString locallong=QLocale::system().name(); QString localshort=QLocale::system().name().split("_")[0]; QStringList startAppsFound; foreach(QString appstr, output.split("",QString::SkipEmptyParts)) { bool localcomment=false; bool localname=false; Application app; app.category=Application::OTHER; QStringList lines=appstr.split("\n", QString::SkipEmptyParts); for (int i=0; i")!=-1) { bool isSvg=false; line=lines[++i]; QByteArray pic; while (line.indexOf("")==-1) { pic+=QByteArray::fromBase64(line.toLatin1()); line=lines[++i]; if (QString(QByteArray::fromBase64(line.toLatin1())).indexOf("",Qt::CaseInsensitive)!=-1) { isSvg=true; } } if (!isSvg) app.icon.loadFromData(pic); else { QPixmap pix(32,32); QSvgRenderer svgRenderer( pic ); QPainter pixPainter(&pix); svgRenderer.render(&pixPainter); app.icon=pix; } } } if (app.name.length()>0) { if (app.comment.length()<=0) app.comment=app.name; applications.append(app); } } qSort(applications.begin(), applications.end(),Application::lessThen); plugAppsInTray(); if (runStartApp && autostartApps.length()>0) { for (int i=0; isetVisible(true); slotAppDialog(); } } } bool ONMainWindow::parseParameter ( QString param ) { #if defined (Q_OS_UNIX) if ("--bypass-cleanup-helper" == param) { return (true); } #endif /* defined (Q_OS_UNIX) */ //open session file with .x2go extension if ( param.endsWith(".x2go", Qt::CaseInsensitive) ) { ONMainWindow::sessionCfg=expandHome(param); defaultSession=true; return true; } if ( param=="--help" ) { showHelp(); return false; } if ( param=="--help-pack" ) { showHelpPack(); return false; } if ( param=="--version" || param=="-v") { showVersion(); return false; } if ( param=="--changelog" ) { showChangelog(); return false; } if ( param=="--git-info" ) { showGit(); return false; } if (param == "--debug") { ONMainWindow::debugging = true; #if QT_VERSION >= QT_VERSION_CHECK(5, 2, 0) QLoggingCategory::setFilterRules("default.debug=true"); #endif return true; } if ("--libssh-debug" == param) { ONMainWindow::libssh_debugging = true; return true; } if ("--libssh-packetlog" == param) { ONMainWindow::libssh_packetlog = true; return true; } #if defined (Q_OS_DARWIN) || defined (Q_OS_WIN) if (param == "--disable-pulse") { systemDisablePA=true; return true; } if (param == "--disable-pulse-record") { systemDisablePARecord=true; return true; } #endif /* defined (Q_OS_DARWIN) || defined (Q_OS_WIN) */ if (param == "--no-autoresume") { autoresume=false; return true; } if ( param == "--portable" ) { ONMainWindow::portable=true; return true; } if ( param == "--clean-all-files" ) { cleanAllFiles=true; return true; } if (param == "--connectivity-test") { connTest=true; return true; } if ( param=="--no-menu" ) { drawMenu=false; return true; } if ( param=="--maximize" ) { startMaximized=true; return true; } if ( param=="--xinerama" ) { defaultXinerama=true; return true; } if (param == "--thinclient") { thinMode=true; startMaximized=true; return true; } if (param == "--haltbt") { showHaltBtn=true; return true; } if (param == "--broker-logoutbt") { showBrokerLogoutBtn=true; return true; } if ( param=="--hide" ) { startHidden=true; return true; } if ( param=="--keep-trayicon" ) { keepTrayIcon=true; return true; } if ( param=="--hide-foldersharing" ) { hideFolderSharing=true; return true; } if ( param=="--pgp-card" ) { usePGPCard=true; return true; } if ( param=="--ldap-printing" ) { LDAPPrintSupport=true; return true; } if ( param=="--add-to-known-hosts" ) { acceptRsa=true; return true; } if ( param=="--no-session-edit" ) { noSessionEdit=true; return true; } if ( param=="--change-broker-pass") { changeBrokerPass=true; return true; } if ( param == "--autologin") { cmdAutologin=true; return true; } if ( param == "--broker-autologin") { config.brokerAutologin=true; return true; } if ( param == "--broker-krblogin") { config.brokerKrbLogin=true; return true; } if ( param == "--broker-autologoff") { config.brokerAutologoff=true; return true; } if ( param == "--broker-noauth") { config.brokerNoAuth=true; return true; } if ( param=="--broker-noauth-with-session-username" ) { brokerNoauthWithSessionUsername=true; return true; } if ( param=="--broker-use-creds-for-session" ) { brokerCredsForSession=true; return true; } //force to show trayicon if (param == "--tray-icon") { forceToShowTrayicon = true; return true; } if ( param=="--close-disconnect" ) { closeDisconnect=true; return true; } QString setting,value; QStringList vals=param.split ( "=" ); if ( vals.size() <2 ) { printError ( param ); return false; } setting=vals[0]; vals.removeFirst(); value=vals.join ( "=" ); if ( setting=="--link" ) { return linkParameter ( value ); } if ( setting=="--clipboard" ) { return clipboardParameter ( value ); } if ( setting=="--sound" ) { return soundParameter ( value ); } if ( setting=="--geometry" ) { return geometry_par ( value ); } if ( setting=="--pack" ) { return packParameter ( value ); } if ( setting=="--kbd-layout" ) { defaultLayout=value.split(",",QString::SkipEmptyParts); if (defaultLayout.size()==0) defaultLayout<0) { if(authPart.indexOf("@")!=-1) { key.user=authPart.split("@")[0]; key.server=authPart.split("@")[1]; } else key.server=authPart; } cmdSshKeys<trimmed (); } return true; } if ( setting == "--auth-id") { QFile file(expandHome(value)); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { printError ( param + tr(" (can't open file)")); return false; } QTextStream in(&file); config.brokerUserId = in.readLine(); return true; } if (setting == "--support-menu") { value = expandHome(value); if (! QFile::exists(value)) { printError( param + tr(" (file does not exist)")); return false; } supportMenuFile=value; return true; } if (setting == "--background") { value = expandHome(value); if (! QFile::exists(value)) { printError( param + tr(" (file does not exist)")); return false; } BGFile=value; return true; } if (setting == "--session-icon") { value=expandHome(value); if (! QFile::exists(value)) { printError( param + tr(" (file does not exist)")); return false; } SPixFile=value; return true; } if (setting == "--home") { QDir dr; value = expandHome(value); #ifdef Q_OS_WIN int find=value.indexOf("("); int lind=value.indexOf(")"); if (find!=-1 && lind !=-1) { QString label=value.mid(find+1,lind-find-1); x2goDebug<<"Searching for drive with label: "<= conv) { x2goDebug << "Not limiting X.Org Server starts."; x_start_limit_ = 0; } else { if (SIZE_MAX < conv) { conv = SIZE_MAX; x2goDebug << "Clamped X.Org Server start limit to SIZE_MAX."; } x_start_limit_ = conv; x2goDebug << "Limiting X.Org Server starts to " << x_start_limit_ << " tries."; } } else { x2goDebug << "Conversion for --xserver-start-limit value " << value << " failed; assuming default of 3."; x_start_limit_ = 3; } return (true); } #endif /* defined(Q_OS_WIN) */ printError ( param ); return false; } bool ONMainWindow::linkParameter ( QString value ) { if ( value=="modem" ) defaultLink=MODEM; else if ( value=="isdn" ) defaultLink=ISDN; else if ( value=="adsl" ) defaultLink=ADSL; else if ( value=="wan" ) defaultLink=WAN; else if ( value=="lan" ) defaultLink=LAN; else { printError( tr ( "Invalid value for parameter \"--link\"." ).toLocal8Bit().data() ); return false; } return true; } bool ONMainWindow::clipboardParameter ( QString value ) { if ( value=="both" || value=="client" || value=="server"||value == "none") { defaultClipboardMode=value; return true; } else { printError( tr ( "Invalid value for parameter \"--clipboard\"." ).toLocal8Bit().data() ); return false; } } bool ONMainWindow::soundParameter ( QString val ) { if ( val=="1" ) defaultUseSound=true; else if ( val=="0" ) defaultUseSound=false; else { printError( tr ( "Invalid value for " "parameter \"--sound\"." ).toLocal8Bit().data() ); return false; } return true; } bool ONMainWindow::geometry_par ( QString val ) { if ( val=="fullscreen" ) defaultFullscreen=true; else { QStringList res=val.split ( "x" ); if ( res.size() !=2 ) { printError( tr ( "Invalid value for parameter \"--geometry\"." ). toLocal8Bit().data() ); return false; } bool o1,o2; defaultWidth=res[0].toInt ( &o1 ); defaultHeight=res[1].toInt ( &o2 ); if ( ! ( defaultWidth >0 && defaultHeight >0 && o1 && o2 ) ) { printError( tr ( "Invalid value for parameter \"--geometry\"." ). toLocal8Bit().data() ); return false; } } return true; } bool ONMainWindow::setKbd_par ( QString val ) { if ( val=="1" ) defaultSetKbd=true; else if ( val=="0" ) defaultSetKbd=false; else { printError( tr ( "Invalid value for parameter \"--set-kbd\"." ). toLocal8Bit().data() ); return false; } return true; } bool ONMainWindow::ldapParameter ( QString val ) { QString ldapstring=val; useLdap=true; ldapstring.replace ( "\"","" ); QStringList lst=ldapstring.split ( ':',QString::SkipEmptyParts ); if ( lst.size() !=3 ) { printError( tr ( "Invalid value for parameter \"--ldap\"." ). toLocal8Bit().data() ); return false; } ldapOnly=true; ldapServer=lst[0]; ldapPort=lst[1].toInt(); ldapDn=lst[2]; return true; } bool ONMainWindow::ldap1Parameter ( QString val ) { QString ldapstring=val; ldapstring.replace ( "\"","" ); QStringList lst=ldapstring.split ( ':',QString::SkipEmptyParts ); if ( lst.size() !=2 ) { printError( tr ( "Invalid value for parameter \"--ldap1\"." ). toLocal8Bit().data() ); return false; } ldapServer1=lst[0]; ldapPort1=lst[1].toInt(); return true; } bool ONMainWindow::ldap2Parameter ( QString val ) { QString ldapstring=val; ldapstring.replace ( "\"","" ); QStringList lst=ldapstring.split ( ':',QString::SkipEmptyParts ); if ( lst.size() !=2 ) { printError( tr ( "Invalid value for parameter \"--ldap2\"." ). toLocal8Bit().data() ); return false; } ldapServer2=lst[0]; ldapPort2=lst[1].toInt(); return true; } bool ONMainWindow::packParameter ( QString val ) { QFile file ( ":/txt/packs" ); if ( !file.open ( QIODevice::ReadOnly | QIODevice::Text ) ) return true; QTextStream in ( &file ); while ( !in.atEnd() ) { QString pc=in.readLine(); if ( pc.indexOf ( "-%" ) !=-1 ) { pc=pc.left ( pc.indexOf ( "-%" ) ); QStringList pctails=val.split ( "-" ); QString pcq=pctails[pctails.size()-1]; pctails.removeLast(); if ( pctails.join ( "-" ) ==pc ) { bool ok; int v=pcq.toInt ( &ok ); if ( ok && v>=0 && v<=9 ) { defaultPack=pc; defaultQuality=v; return true; } else break; } } else { if ( pc==val ) { defaultPack=val; return true; } } } file.close(); printError ( tr("Invalid value for parameter \"--pack\"." )); return false; } void ONMainWindow::printError ( QString param ) { if( !startHidden ) { qCritical ( "%s", ( tr ( "Wrong parameter: " ) +param ). toLocal8Bit().data() ); if (!startHidden && !haveTerminal) { QMessageBox::critical(0,tr("Error"), tr ( "Wrong parameter: " ) +param); } } else { x2goErrorf(8)<Connection failed.
\n" ) +output; if ( message.indexOf ( "publickey,password" ) !=-1 ) { message=tr ( "Wrong password!

" ) + message; } QMessageBox::critical ( 0l,tr ( "Error" ),message, QMessageBox::Ok, QMessageBox::NoButton ); setEnabled ( true ); passForm->setEnabled ( true ); pass->setFocus(); pass->selectAll(); return; } passForm->hide(); setUsersEnabled ( false ); uname->setEnabled ( false ); u->setEnabled ( false ); QStringList servers=output.trimmed().split ( '\n' ); for ( int i=0; i1 ) { for ( int j=0; jConnection failed.
\n" ) +output; if ( message.indexOf ( "publickey,password" ) !=-1 ) { message=tr ( "Wrong password!

" ) + message; } QMessageBox::critical ( 0l,tr ( "Error" ),message, QMessageBox::Ok, QMessageBox::NoButton ); QString sv=output.split ( ":" ) [0]; for ( int j=0; jgetLastSession()->id(),this ); if ( dlg.exec() ==QDialog::Accepted ) path=dlg.getExport(); } else path= QFileDialog::getExistingDirectory ( this,QString::null, homeDir ); if (hide_after) hide(); #ifdef Q_OS_WIN if ( ONMainWindow::getPortable() && ONMainWindow::U3DevicePath().length() >0 ) { path.replace ( "(U3)",u3Device ); } path=cygwinPath ( wapiShortFileName ( path ) ); #endif if ( path!=QString::null ) exportDirs ( path ); } void ONMainWindow::exportDirs ( QString exports,bool removable ) { if ( shadowSession ) return; if ( embedMode ) { if ( config.confFS && ! ( config.useFs ) ) { return; } } fsExportKeyReady=false; directory dr; dr.dirList=exports; dr.key=createKeyBundle(); // Key creation failure or the like. if (dr.key.isEmpty ()) { return; } QString passwd; x2goDebug<<"Key created on: "<getLastSession())) { x2goDebug << "No session selected, not exporting directories."; return; } QString sid=sessionExplorer->getLastSession()->id(); fsInTun=st.setting()->value ( sid+"/fstunnel", ( QVariant ) true ).toBool(); } else fsInTun=true; } if ( fsInTun ) { if ( fsTunnel==0l ) if ( startSshFsTunnel() ) return; } QString uname=getCurrentUname(); /* For the destination, fetch the base name only. */ QFileInfo tmp_file_info (dr.key); QString dst = tmp_file_info.fileName (); dst="~"+uname +"/.x2go/ssh/"+dst; dr.dstKey=dst; dr.isRemovable=removable; exportDir.append ( dr ); QString keyFile=dr.key; sshConnection->copyFile ( keyFile,dst, this, SLOT ( slotCopyKey ( bool, QString,int ) )); } void ONMainWindow::exportDefaultDirs() { QStringList dirs; bool clientPrinting= ( useLdap && LDAPPrintSupport ); if ( !useLdap ) { if ( !embedMode ) { if (!(sessionExplorer->getLastSession())) { x2goDebug << "No session selected, not exporting default directories."; return; } X2goSettings* st; if (!brokerMode) st= new X2goSettings( "sessions" ); else st= new X2goSettings(config.iniFile,QSettings::IniFormat); clientPrinting= st->setting()->value ( sessionExplorer->getLastSession()->id() + "/print", true ).toBool(); QString exd=st->setting()->value ( sessionExplorer->getLastSession()->id() +"/export", ( QVariant ) QString::null ).toString(); QStringList lst=exd.split ( ";", QString::SkipEmptyParts ); for ( int i=0; i0 ) { tails[0].replace ( "(U3)",u3Device ); } #endif tails[0].replace("",QDir::homePath()); if(!QFile::exists(tails[0])) { x2goDebug<<"Path "<start ( 2000 ); } if ( dirs.size() <=0 ) return; exportDirs ( dirs.join ( ":" ) ); } void ONMainWindow::slotCopyKey ( bool result, QString output, int pid) { fsExportKey=sshConnection->getSourceFile(pid); x2goDebug<<"Exported key: "<Connection failed.
\n" ) +output; if ( message.indexOf ( "publickey,password" ) !=-1 ) { message=tr ( "Wrong password!

" ) + message; } if (!startHidden) { QMessageBox::critical ( 0l,tr ( "Error" ),message, QMessageBox::Ok, QMessageBox::NoButton ); } else { QString printout = tr( "Connection failed: ") + output.toLatin1(); if ( output.indexOf ( "publickey,password" ) !=-1 ) x2goErrorf(11)<< tr( "Connection failed: ") + output + tr(" - Wrong password."); else x2goErrorf(12)<< tr( "Connection failed: ") + output; trayQuit(); } QFile::remove ( fsExportKey+".pub" ); return; } fsExportKeyReady=true; //start reverse mounting if RSA Key and FS tunnel are ready //start only once from slotFsTunnelOk() or slotCopyKey(). if ( !fsInTun || fsTunReady ) startX2goMount(); } directory* ONMainWindow::getExpDir ( QString key ) { for ( int i=0; iConnection failed.\n" ) +output; x2goDebug<<"startX2goMount failed to mount client-side folder, reason: "<Wrong password!

" ) + message; } QMessageBox::critical ( 0l,tr ( "Error" ),message, QMessageBox::Ok, QMessageBox::NoButton ); } QFile file ( key+".pub" ); x2goDebug << "Deactivating public key from " << QString (key + ".pub") << " again."; if ( !file.open ( QIODevice::ReadOnly | QIODevice::Text ) ) { printSshDError_noExportPubKey(); QFile::remove ( key+".pub" ); return; } QByteArray line = file.readLine(); file.close(); QDir authorized_keys_dir (homeDir); authorized_keys_dir = QDir (authorized_keys_dir.absolutePath () + "/.x2go/.ssh/"); QFile authorized_keys_file (authorized_keys_dir.absolutePath () + "/authorized_keys"); /* * We do not try to create the file first. * This has been already done in startX2goMount(). * We wouldn't be here if that failed. */ if (!authorized_keys_file.open (QIODevice::ReadOnly | QIODevice::Text)) { printSshDError_noAuthorizedKeysFile (); QFile::remove (key + ".pub"); return; } QTemporaryFile tfile (authorized_keys_file.fileName ()); tfile.open (); tfile.setPermissions (QFile::ReadOwner | QFile::WriteOwner); tfile.setAutoRemove (true); QTextStream out (&tfile); /* * Copy the content of the authorized_keys file to our new temporary file * and remove the public authorized key for the current "session" again. */ while (!authorized_keys_file.atEnd ()) { QByteArray newline = authorized_keys_file.readLine (); if (newline != line) out << newline; } authorized_keys_file.close (); tfile.close (); authorized_keys_file.remove (); tfile.copy (authorized_keys_file.fileName ()); QFile::remove (key + ".pub"); } void ONMainWindow::slotExtTimer() { if ( QFile::permissions ( readLoginsFrom ) != ( QFile::ReadUser|QFile::WriteUser|QFile::ExeUser| QFile::ReadOwner|QFile::WriteOwner|QFile::ExeOwner ) ) { x2goDebug<<"Wrong permissions on "<stop(); return; } QString loginDir; QString logoutDir; QDir dir ( readLoginsFrom ); QStringList list = dir.entryList ( QDir::Files ); for ( int i=0; iisActive() ) //running session { if ( logoutDir != QString::null ) { x2goDebug<<"External logout received"; externalLogout ( logoutDir ); } } else { if ( loginDir != QString::null ) { x2goDebug<<"External login."; externalLogin ( loginDir ); } } } void ONMainWindow::slotExportTimer() { if ( QFile::permissions ( readExportsFrom ) != ( QFile::ReadUser| QFile::WriteUser| QFile::ExeUser| QFile::ReadOwner|QFile::WriteOwner|QFile::ExeOwner ) ) { x2goDebug<<"Wrong permissions on "<< readExportsFrom <<":"<stop(); return; } QDir dir ( readExportsFrom ); QStringList list = dir.entryList ( QDir::Files ); QString expList; QString unexpList; QString loginDir; QString logoutDir; for ( int i=0; i0 ) { exportDirs ( expList,true ); } args.clear(); args=unexpList.split ( ":",QString::SkipEmptyParts ); QString passwd=getCurrentPass(); QString user=getCurrentUname(); QString host=resumingSession.server; QString sessionId=resumingSession.sessionId; for ( int i=0; iexecuteCommand ( "x2goumount_session "+ sessionId+" "+args[i] ); } } void ONMainWindow::slotAboutQt() { QMessageBox::aboutQt ( this ); } void ONMainWindow::slotSupport() { QFile file(supportMenuFile); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; QTextStream in(&file); QString sup; while (!in.atEnd()) { sup+=in.readLine(); } QMessageBox::information (this,tr ( "Support" ),sup); } void ONMainWindow::slotAbout() { /* * This (extra) comment (for translators) looks fucked up, and it is, but * this can't be changed. * * Adding asterisks in front of a line will cause them to literally appear * in the comment, so I'd rather just drop them. * * Adding any whitespace in front of a line will lead to one whitespace * character surviving the lupdate scan, so we have to drop them as well. * * NOT adding an escape character to the end of a line will make lupdate * stupidly replace the newline character with a whitespace character. */ /*: Translators, feel free to add a localized version of your translation including a copyright notice and your name(s). Remember to keep a
at the end, though.\n\n\ \ English example for a potential translation:\n\n\ \
(C) 2005-2023 by obviously nice: \ Oleksandr Shneyder, Heinz-Markus Graesing
\ English version: (C) 20AB-20CD Trans Lator
*/ QString aboutStr=tr ("
(C) 2005-2023 by obviously nice: " "Oleksandr Shneyder, Heinz-Markus Graesing
" ); aboutStr+= tr ( "
This is a client to access the X2Go network-based " "computing environment. This client will be able " "to connect to X2Go Server(s) and start, stop, " "resume and terminate (running) desktop sessions. " "X2Go Client stores different server connections " "and may automatically request authentication " "data from LDAP directories. Furthermore, it can be " "used as a fullscreen login screen (replacement for " "login managers like XDM). Please visit the project home page at " "x2go.org for further information." ); QMessageBox::about ( this,tr ( "About X2Go Client" ), tr ( "X2Go Client v. " ) +VERSION+ " (Qt - "+qVersion() +")"+ aboutStr ); } void ONMainWindow::slotRereadUsers() { if ( !useLdap ) return; #ifdef USELDAP if ( ld ) { delete ld; ld=0; } if ( ! initLdapSession ( false ) ) { return; } list attr; attr.push_back ( "uidNumber" ); attr.push_back ( "uid" ); list result; try { ld->binSearch ( ldapDn.toStdString(),attr, "objectClass=posixAccount",result ); } catch ( LDAPExeption e ) { QString message="Exception in: "; message=message+e.err_type.c_str(); message=message+" : "+e.err_str.c_str(); QMessageBox::critical ( 0l,tr ( "Error" ),message, QMessageBox::Ok,QMessageBox::NoButton ); QMessageBox::critical ( 0l,tr ( "Error" ), tr ( "Please check LDAP Settings." ), QMessageBox::Ok,QMessageBox::NoButton ); slotConfig(); return; } list::iterator it=result.begin(); list::iterator end=result.end(); for ( ; it!=end; ++it ) { user u; QString uin=LDAPSession::getBinAttrValues ( *it,"uidNumber" ).front().getData(); u.uin=uin.toUInt(); if ( u.uinlastUid ) { continue; } u.uid=LDAPSession::getBinAttrValues ( *it,"uid" ).front().getData(); if ( !findInList ( u.uid ) ) { reloadUsers(); return; } } #endif } void ONMainWindow::reloadUsers() { int i; for ( i=0; iclose(); userList.clear(); sessionExplorer->cleanSessions(); loadSettings(); if ( useLdap ) { act_new->setEnabled ( false ); act_edit->setEnabled ( false ); u->setText ( tr ( "Login:" ) ); QTimer::singleShot ( 1, this, SLOT ( readUsers() ) ); } else { act_new->setEnabled ( true ); act_edit->setEnabled ( true ); u->setText ( tr ( "Session:" ) ); QTimer::singleShot ( 1, this, SLOT ( slotReadSessions() ) ); } slotResize ( fr->size() ); } bool ONMainWindow::findInList ( const QString& uid ) { for ( int i=0; iverticalScrollBar(); bar->setEnabled ( enable ); int upos=bar->value(); QDesktopWidget dw; int height=dw.screenGeometry ( fr ).height(); QList::iterator it; QList::iterator endit=names.end(); if ( !enable ) { for ( it=names.begin(); it!=endit; it++ ) { QPoint pos= ( *it )->pos(); if ( ( pos.y() >upos-height ) && ( pos.y() setEnabled ( false ); if ( pos.y() >upos+height ) break; } } else { for ( it=names.begin(); it!=endit; it++ ) { if ( ! ( *it )->isEnabled() ) ( *it )->setEnabled ( true ); } } } else { users->setEnabled ( enable ); sessionExplorer->setEnable(enable); } } void ONMainWindow::externalLogin ( const QString& loginDir ) { QFile file ( loginDir+"/username" ); QString user; if ( !file.open ( QIODevice::ReadOnly | QIODevice::Text ) ) return; QTextStream in ( &file ); while ( !in.atEnd() ) { user=in.readLine(); break; } file.close(); if ( passForm->isVisible() ) slotClosePass(); uname->setText ( user ); slotUnameEntered(); currentKey=loginDir+"/dsa.key"; extStarted=true; slotPassEnter(); } void ONMainWindow::externalLogout ( const QString& ) { if ( extStarted ) { extStarted=false; currentKey=QString::null; if ( nxproxy ) if ( nxproxy->state() ==QProcess::Running ) nxproxy->terminate(); proxyRunning=false; } } void ONMainWindow::slotStartPGPAuth() { scDaemon=new QProcess ( this ); connect ( scDaemon,SIGNAL ( readyReadStandardError() ),this, SLOT ( slotScDaemonStdErr() ) ); connect ( scDaemon,SIGNAL ( readyReadStandardOutput() ),this, SLOT ( slotScDaemonStdOut() ) ); connect ( scDaemon,SIGNAL ( finished ( int,QProcess::ExitStatus ) ), this, SLOT ( slotScDaemonFinished ( int, QProcess::ExitStatus ) ) ); connect (scDaemon, SIGNAL (error (QProcess::ProcessError)), this, SLOT (slotScDaemonError (QProcess::ProcessError))); scDaemon->start ( "pcsc_scan -n"); } void ONMainWindow::slotScDaemonStdErr() { QString stdOut ( scDaemon->readAllStandardError() ); stdOut=stdOut.simplified(); x2goDebug<<"PCSC error: "<readAllStandardOutput() ); stdOut=stdOut.simplified(); x2goDebug<<"PCSC out: |"<state() ==QProcess::Running ) { x2goDebug<<"Suspending session ..."; slotSuspendSessFromSt(); x2goDebug<<"Suspended session."; } } } } void ONMainWindow::slotScDaemonFinished ( int , QProcess::ExitStatus ) { //this should not happen, restart... scDaemon=0l; x2goDebug<<"SCDAEMON finished."<bugs wiki page."); show_RichText_ErrorMsgBox (main_text, informative_text); trayQuit (); } void ONMainWindow::slotShowPAMSGDialog(bool error, const QString& main_text, const QString& info_text, bool modal) { if(error) { show_RichText_ErrorMsgBox(main_text, info_text,modal); } else { show_RichText_WarningMsgBox(main_text, info_text, modal); } } void ONMainWindow::slotGpgError() { QString stdOut ( gpg->readAllStandardError() ); stdOut=stdOut.simplified(); x2goDebug<<"GPG error: "<kill(); } } void ONMainWindow::slotGpgFinished ( int exitCode, QProcess::ExitStatus exitStatus ) { x2goDebug<<"GPG finished, exit code: "<readAllStandardOutput() ); stdOut.chop ( 1 ); x2goDebug<<"GPG out: "<start ( "gpg",arguments ); x2goDebug<<"gpg started"; } void ONMainWindow::GPGCardLogin ( const QString& cardLogin) { if ( !useLdap ) { if ( passForm->isVisible() && !brokerMode) { if ( passForm->isEnabled() ) { if ( login->isEnabled() ) { login->setText ( cardLogin ); slotSessEnter(); } } } if(brokerMode && (!config.brokerAutologoff)) { broker->getUserSessions(); } } else { if ( passForm->isVisible() ) slotClosePass(); uname->setText ( cardLogin ); slotUnameEntered(); slotPassEnter(); } } #if defined ( Q_OS_DARWIN ) QString ONMainWindow::getXDisplay() { QLocalSocket unixSocket (this); QString xsocket (getenv ("DISPLAY")); if (xsocket.isEmpty ()) { // Mac OS X 10.4 compatibility mode. // There, it is possible no $DISPLAY variable is set. // Start X11 manually. First, find a free display number. x2goDebug<< "Entering 10.4 compat mode, checking for free X11 display."; int xFreeDisp = 0; QDir xtmpdir ("/tmp/.X11-unix"); if (xtmpdir.exists ()) { xtmpdir.setFilter (QDir::Files | QDir::System | QDir::NoSymLinks | QDir::NoDotAndDotDot); xtmpdir.setSorting (QDir::Name); QFileInfoList xtmpdirList = xtmpdir.entryInfoList (); bool foundFreeDisp = FALSE; xFreeDisp = -1; for (int i = 0; (i < 2000) && (!foundFreeDisp); ++i) { QFileInfo xtmpdirFile (xtmpdir.absolutePath () + "/X" + QString::number (i)); if ((!xtmpdirFile.exists ()) && (!xtmpdirFile.isSymLink ())) { xFreeDisp = i; foundFreeDisp = TRUE; } } } // Control flow will go to error condition if no free display port has been found. if (xFreeDisp != -1) { xsocket = "/tmp/.X11-unix/X" + QString::number (xFreeDisp); x2goDebug<< "Successfully detected free socket " << xsocket << "."; } if (!(xsocket.isEmpty ())) { QString xname = ConfigDialog::getXDarwinDirectory () + "/Contents/MacOS/X11"; QString xopt = ":" + QString::number (xFreeDisp); QProcessEnvironment env = QProcessEnvironment::systemEnvironment (); QProcess* startx = new QProcess (this); x2goDebug<< "Starting the X server on free display port."; /* FIXME: why not passing our current environment, maybe extended via add_to_path ()? */ env.insert (0, "PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11R6/bin"); startx->setProcessEnvironment (env); startx->start (xname + QString (" ") + xopt, QIODevice::NotOpen); if (startx->waitForStarted (3000)) { x2goDebug<< "Sleeping for three seconds"; int sleeptime = 3; while ((sleeptime = sleep (sleeptime))) {}; x2goDebug<< "Leaving OS X 10.4 compat mode."; } } } // OS X >= 10.5 starts the X11 server automatically, as soon as the // launchd UNIX socket is accessed. // On user login, the DISPLAY environment variable is set to this said existing // socket. // By now, we should have a socket, even on 10.4. Test, if connecting works. // Note: common sense may tell you to change this if into an else. Don't. // We do not want to skip this part, if coming from the compat section above. if (!(xsocket.isEmpty ())) { if (xsocket[0] == ':') { // Be backwards compatible with 10.4. // Delete the ":" character. xsocket.remove (0, 1); // xsocket may now contain the display value (one integer), // or something like "0.0" - we're only interested in the // display value, so keep the first char only. if (xsocket.indexOf (".") != -1) { xsocket = xsocket.left (xsocket.indexOf (".")); } // Prepend the well-known socket path. xsocket.prepend ("/tmp/.X11-unix/X"); x2goDebug<< "xsocket in compat mode: " << xsocket; } unixSocket.connectToServer (xsocket); if (unixSocket.waitForConnected (10000)) { unixSocket.disconnectFromServer (); // Mac OS X 10.4 compat: nxproxy expects // a DISPLAY variable like ":0", passing // an UNIX socket will just make it error out. // Instead of altering the nxproxy code, which does // already try to connect to "/tmp/.X11-unix/Xi" with // i = display number, pass ":i" as DISPLAY. if (xsocket.left (16).compare ("/tmp/.x11-unix/x", Qt::CaseInsensitive) == 0) { bool ok = FALSE; int tmp = -1; xsocket = xsocket.mid (16); tmp = xsocket.toInt (&ok); if (ok) { x2goDebug<<"Returning " << QString (":") + xsocket; return (QString (":") + xsocket); } } else { return (xsocket); } } } // And if not, error out. show_XQuartz_start_error (); slotConfig(); return QString::null; } #endif #ifdef Q_OS_WIN QString ONMainWindow::getXDisplay() { if ( !isServerRunning ( 6000+xDisplay ) ) { QMessageBox::critical ( this,QString::null, tr ( "Can't start X.Org Server.\nPlease check your installation." ) ); close(); } return QString::number ( xDisplay ); } QString ONMainWindow::cygwinPath ( const QString& winPath ) { QString cPath="/cygdrive/"+winPath; cPath.replace ( "\\","/" ); cPath.replace ( ":","" ); return cPath; } #endif bool ONMainWindow::isColorDepthOk ( int disp, int sess ) { if ( sess==0 ) return true; if ( disp==sess ) return true; if ( ( disp == 24 || disp == 32 ) && ( sess == 24 || sess == 32 ) ) return true; return false; } #ifndef Q_OS_LINUX void ONMainWindow::setWidgetStyle ( QWidget* widget ) { widget->setStyle ( widgetExtraStyle ); } #else void ONMainWindow::setWidgetStyle ( QWidget* ) { } #endif QString ONMainWindow::internAppName ( const QString& transAppName, bool* found ) { if ( found ) *found=false; int ind=_transApplicationsNames.indexOf ( transAppName ); if ( ind!=-1 ) { if ( found ) *found=true; return _internApplicationsNames[ind]; } return transAppName; } QString ONMainWindow::transAppName ( const QString& internAppName, bool* found ) { if ( found ) *found=false; int ind=_internApplicationsNames.indexOf ( internAppName ); if ( ind!=-1 ) { if ( found ) *found=true; return _transApplicationsNames[ind]; } return internAppName; } void ONMainWindow::addToAppNames ( QString intName, QString transName ) { _internApplicationsNames.append ( intName ); _transApplicationsNames.append ( transName ); } void ONMainWindow::slotExecXmodmap() { } void ONMainWindow::check_cmd_status() { QString passwd; QString user=getCurrentUname(); QString host=resumingSession.server; passwd=getCurrentPass(); sshConnection->executeCommand ( "x2gocmdexitmessage "+ resumingSession.sessionId , this, SLOT(slotCmdMessage(bool, QString, int))); } void ONMainWindow::slotCmdMessage ( bool result,QString output, int) { x2goDebug<<"Command message: " + output; if ( result==false ) { cardReady=false; cardStarted=false; QString message=tr ( "Connection failed.\n" ) +output; if ( message.indexOf ( "publickey,password" ) !=-1 ) { message=tr ( "Wrong password!

" ) + message; } QMessageBox::critical ( 0l,tr ( "Error" ),message, QMessageBox::Ok, QMessageBox::NoButton ); setEnabled ( true ); passForm->setEnabled ( true ); pass->setFocus(); pass->selectAll(); } if ( output.indexOf ( "X2GORUNCOMMAND ERR NOEXEC:" ) !=-1 ) { QString cmd=output; cmd.replace ( "X2GORUNCOMMAND ERR NOEXEC:","" ); if(startHidden) { x2goErrorf(14)<< tr( "Unable to execute: ") + cmd; } else { QMessageBox::critical ( 0l,tr ( "Error" ), tr ( "Unable to execute: " ) + cmd,QMessageBox::Ok, QMessageBox::NoButton ); } } if(sshConnection) delete sshConnection; sshConnection=0; if (startHidden) { x2goInfof(11) << tr("Closing X2Go Client because it was started in hidden mode."); close(); } else if (closeDisconnect) { x2goInfof(12) << tr("Closing X2Go Client because the --close-disconnect parameter was passed."); close(); } } int ONMainWindow::startSshFsTunnel() { fsTunReady=false; x2goDebug<<"Starting Folder Sharing tunnel for: "<startTunnel ( "localhost",resumingSession.fsPort.toUInt(),"127.0.0.1", clientSshPort.toInt(), true, this, SLOT ( slotFsTunnelOk(int)), SLOT ( slotFsTunnelFailed ( bool, QString,int ) ) ); return 0; } void ONMainWindow::slotFsTunnelFailed ( bool result, QString output, int) { if ( result==false ) { if ( !managedMode ) { QString message=tr ( "Unable to create SSH tunnel for Folder Sharing and Printing support:\n" ) +output; QMessageBox::critical ( 0l,tr ( "Error" ),message, QMessageBox::Ok, QMessageBox::NoButton ); } fsTunnel=0l; fsTunReady=false; } } void ONMainWindow::slotFsTunnelOk(int) { x2goDebug<<"FS tunnel through SSH seems to be up and running ..."<isRemovable; if (!dir) { return; } QTextStream out (&authorized_keys_file); out << line; authorized_keys_file.close (); x2goDebug << "Temporarily activated public key from file " << QString (fsExportKey + ".pub") << "."; QString passwd=getCurrentPass(); QString user=getCurrentUname(); QString host=resumingSession.server; QString sessionId=resumingSession.sessionId; QStringList env=QProcess::systemEnvironment(); QString cuser; #if defined (Q_OS_WIN) cuser=wapiGetUserName(); #else for ( int i=0; idirList; if ( !fsInTun && clientSshPort!="22" ) { dirs=dirs+"__SSH_PORT__"+clientSshPort; } if ( fsInTun ) { dirs=dirs+"__REVERSESSH_PORT__"+resumingSession.fsPort; } if ( !rem ) cmd = "x2gomountdirs dir " + sessionId + " \"" + cuser + "\" " + dir->dstKey + " " + dirs; else cmd = "x2gomountdirs rem " + sessionId + " \"" + cuser + "\" " + dir->dstKey + " " + dirs; #ifdef Q_OS_WIN cmd="chmod 600 "+dir->dstKey+"&&"+cmd; #endif X2goSettings st ( "sessions" ); if ( !useLdap ) { QString sid; if ( !embedMode ) { if (!(sessionExplorer->getLastSession())) { x2goDebug << "No session selected, not calling startx2gomount command."; return; } sid=sessionExplorer->getLastSession()->id(); } else sid="embedded"; if ( st.setting()->value ( sid+"/useiconv", ( QVariant ) false ).toBool() ) { QString toCode=st.setting()->value ( sid+"/iconvto", ( QVariant ) "UTF-8" ).toString(); #ifdef Q_OS_WIN QString fromCode=st.setting()->value ( sid+"/iconvfrom", ( QVariant ) tr ( "WINDOWS-1252" ) ).toString(); #endif #ifdef Q_OS_DARWIN QString fromCode=st.setting()->value ( sid+"/iconvfrom", ( QVariant ) "UTF-8" ).toString(); #endif #ifdef Q_OS_LINUX QString fromCode=st.setting()->value ( sid+"/iconvfrom", ( QVariant ) tr ( "ISO8859-1" ) ).toString(); #endif cmd="export X2GO_ICONV=modules=iconv,from_code="+ fromCode+ ",to_code="+toCode+"&&"+cmd; } } x2goDebug<<"Calling startX2goMount command."<pid=sshConnection->executeCommand(cmd,this,SLOT ( slotRetExportDir ( bool, QString,int) )); } void ONMainWindow::slotCheckPrintSpool() { QDir dir ( spoolDir ); QStringList list = dir.entryList ( QDir::Files ); for ( int i=0; i #include #include #endif bool ONMainWindow::isServerRunning ( int port ) { #ifdef Q_OS_WIN SOCKET ConnectSocket = INVALID_SOCKET; struct sockaddr_in saServer; hostent* localHost; char* localIP; int iResult; WSADATA wsaData; struct in_addr addr = {{ }}; iResult = WSAStartup(MAKEWORD(2, 2), &wsaData); if (iResult != 0) { x2goDebug<<"WARNING: WSAStartup failed: "<< iResult; return false; } addr.s_addr = inet_addr("127.0.0.1"); if (addr.s_addr == INADDR_NONE) { x2goDebug<< "WARNING: The IPv4 address entered was invalid.\n"; return false; } localHost = gethostbyaddr((char*)&addr,4, AF_INET); if (!localHost) { x2goDebug<<"WARNING: gethostbyaddr failed: "<h_addr_list); saServer.sin_family = AF_INET; saServer.sin_addr.s_addr = inet_addr(localIP); saServer.sin_port = htons(port); ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (ConnectSocket == INVALID_SOCKET) { x2goDebug<<"WARNING: Socket failed with error: "<< WSAGetLastError(); return false; } iResult = ::connect( ConnectSocket, (SOCKADDR*) &saServer, sizeof(saServer)); if (iResult == SOCKET_ERROR) { closesocket(ConnectSocket); x2goDebug<<"Port is free: "<stop(); slotSetWinServersReady(); xorgLogMutex.unlock(); return; } } xorgLogMutex.unlock(); } void ONMainWindow::startXOrg (std::size_t start_offset) { xDisplay += start_offset; while ( isServerRunning ( 6000+xDisplay ) ) ++xDisplay; QString dispString; QTextStream ( &dispString ) <<":"<setEnvironment ( env ); xorg-> setWorkingDirectory ( workingDir); } x2goDebug<<"Running "<start ( exec, args ); if ( !xorg->waitForStarted ( 3000 ) ) { QMessageBox::critical ( 0,QString::null, tr ( "Can't start X.Org Server." ) + "\n" + tr ( "Please check your installation." ) ); close(); } // #ifdef CFGCLIENT if ( !useInternalX || internalX!= XMING) { //check connection in slot and launch setWinServerReady waitingForX=0; x_start_tries_ += 1; QTimer::singleShot(1000, this, SLOT(slotCheckXOrgConnection())); } // #endif } void ONMainWindow::slotCheckXOrgConnection() { ++waitingForX; /* Before we try to connect to the socket, let's check if the server actually is still running. */ if (xorg->state () != QProcess::Running) { /* * Process died (crashed, terminated, whatever). We need to restart it, unless we already tried * to do so multiple times unsuccessfully. */ if ((x_start_limit_) && (x_start_limit_ < x_start_tries_)) { x2goDebug << "Unable to start X.Org Server for " << x_start_limit_ << " times, terminating."; QMessageBox::critical (NULL, QString::null, tr ("X.Org Server did not launch correctly after %n tries.", "%n will be substituted with the current number of tries", x_start_tries_) + "\n" + tr ("Please check your installation.")); close (); return; } x2goDebug << "Trying to re-start X.Org Server. Try count: " << x_start_tries_; delete xorg; xorg = NULL; startXOrg (1); return; } if (isServerRunning(6000+xDisplay)) { x2goDebug<<"X.Org Server started on DISPLAY " << xDisplay << "."; slotSetWinServersReady(); } else { if (waitingForX > 10) { /* * Timeout reached. If we tried starting the X.Org Server less times than the limit, * continue doing so (with a higher DISPLAY value). * Otherwise error out. */ if ((!(x_start_limit_)) || (x_start_limit_ >= x_start_tries_)) { /* * Server might still be running here, but deleting the QProcess object * should kill it. */ x2goDebug << "Timeout reached waiting for the X.Org Server to open a listening TCP socket." << endl << "Restarting on higher DISPLAY port. Try count: " << x_start_tries_; xorg->terminate (); delete xorg; xorg = NULL; startXOrg (1); return; } else { QMessageBox::critical (NULL, QString::null, tr ("Can't start X.Org Server.") + "\n" + tr ("Please check your installation.")); close(); return; } } else { x2goDebug<<"Waiting for X.Org Server to start."; QTimer::singleShot(1000, this, SLOT(slotCheckXOrgConnection())); } } } WinServerStarter::WinServerStarter ( daemon server, ONMainWindow * par ) : QThread ( 0 ), mode (server), parent (par), ssh_key_type_ (ONMainWindow::RSA_KEY_TYPE) { } void WinServerStarter::run() { switch ( mode ) { case SSH: parent->startSshd(ssh_key_type_); break; case X: parent->startXOrg(); break; } } void WinServerStarter::set_ssh_key_type (ONMainWindow::key_types key_type) { ssh_key_type_ = key_type; } ONMainWindow::key_types WinServerStarter::get_ssh_key_type () { return (ssh_key_type_); } void ONMainWindow::startWinServers(ONMainWindow::key_types key_type) { key_type = check_key_type (key_type); x2goDebug<<"Starting helper servers for Windows ..."; QString etcDir=homeDir+"/.x2go/etc"; QDir dr ( homeDir ); WinServerStarter* xStarter = new WinServerStarter ( WinServerStarter::X, this ); WinServerStarter* sshStarter = new WinServerStarter ( WinServerStarter::SSH, this ); if ( !embedMode || !config.confFS || ( config.confFS && config.useFs ) ) { dr.mkpath ( etcDir ); UNUSED (generateKey (key_type, true)); sshStarter->set_ssh_key_type (key_type); sshStarter->start(); } // #ifdef CFGCLIENT //x2goDebug<<"Xorg settings: "<< startXorgOnStart <<" useXming: "<< useXming; if ( useInternalX && (internalX== XMING)) { // #endif xStarter->start(); xorgLogTimer=new QTimer ( this ); connect ( xorgLogTimer,SIGNAL ( timeout() ),this, SLOT ( slotCheckXOrgLog() ) ); xorgLogTimer->start ( 500 ); // #ifdef CFGCLIENT } else { if (startXorgOnStart) { startXOrg(); } } // #endif } bool ONMainWindow::haveCygwinEntry() { QSettings CygwSt ( "HKEY_CURRENT_USER\\Software" "\\Cygwin", QSettings::NativeFormat ); return ( CygwSt.childGroups().count() >0||CygwSt.childKeys().count() ); } void ONMainWindow::saveCygnusSettings() { if ( ONMainWindow::portable ) { if ( haveCygwinEntry() ) { x2goDebug<<"Cygnus Solutions entry exists."; cyEntry=true; } else { x2goDebug<<"Cygnus Solutions entry does not exist."; cyEntry=false; } } } void ONMainWindow::restoreCygnusSettings() { if ( ONMainWindow::portable ) { if ( !cyEntry ) { removeCygwinEntry(); } } } void ONMainWindow::removeCygwinEntry() { QSettings st ( "HKEY_CURRENT_USER\\Software" "\\Cygwin", QSettings::NativeFormat ); x2goDebug<<"Removing cygwin entry from registry."; st.remove ( "" ); st.sync(); } // #ifdef CFGCLIENT void ONMainWindow::xorgSettings() { x2goDebug<<"Getting X.Org Server settings."; X2goSettings st ( "settings" ); useInternalX=(st.setting()->value("useintx",true).toBool()); xorgExe=(st.setting()->value("xexec","C:\\program files\\vcxsrv\\vcxsrv.exe").toString()); xorgOptions=(st.setting()->value("options","-multiwindow -notrayicon -clipboard").toString()); startXorgOnStart=(st.setting()->value("onstart",true).toBool()); xorgWinOptions=(st.setting()->value("optionswin","-screen 0 %wx%h -notrayicon -clipboard").toString()); xorgFSOptions=(st.setting()->value("optionsfs","-fullscreen -notrayicon -clipboard").toString()); xorgSAppOptions=(st.setting()->value("optionssingle","-multiwindow -notrayicon -clipboard").toString()); xorgMDOptions=(st.setting()->value("optionswholedisplay","-nodecoration -notrayicon -clipboard -screen 0 @").toString()); if (QFile::exists(appDir+"\\vcxsrv")) internalX=VCXSRV; if (QFile::exists(appDir+"\\xming")) internalX=XMING; QString primClip; if(st.setting()->value("noprimaryclip",false).toBool() && internalX==VCXSRV) primClip=" -noprimary"; if (useInternalX) { startXorgOnStart=(internalX==XMING); xorgOptions="-multiwindow -notrayicon -clipboard"+primClip; if (internalX==VCXSRV) { // xorgWinOptions="-screen 0 %wx%h -notrayicon -clipboard"; xorgWinOptions="-multiwindow -notrayicon -clipboard"+primClip; xorgFSOptions="-fullscreen -notrayicon -clipboard"+primClip; xorgSAppOptions="-multiwindow -notrayicon -clipboard"+primClip; xorgMDOptions="-nodecoration -notrayicon -clipboard"+primClip+" -screen 0 @"; } } } // #endif void ONMainWindow::slotSetWinServersReady() { x2goDebug<<"All helper servers for Windows are started."; winServersReady=true; restoreCygnusSettings(); } #include #include #endif void ONMainWindow::generateEtcFiles() { QString etcDir=homeDir+"/.x2go/etc"; QString varDir = homeDir + "/.x2go/var"; QDir dr ( homeDir ); dr.mkpath ( etcDir ); dr.mkpath (varDir); QFile file ( etcDir +"/sshd_config" ); if ( !file.open ( QIODevice::WriteOnly | QIODevice::Text ) ) return; QString authKeyPath = homeDir + "/.x2go/.ssh/authorized_keys"; #ifdef Q_OS_WIN authKeyPath = cygwinPath (authKeyPath); authKeyPath.replace (wapiGetUserName (), "%u"); varDir = cygwinPath (varDir); x2goDebug << varDir << " cygwin var path"; #endif /* defined (Q_OS_WIN) */ QTextStream out ( &file ); out<<"StrictModes no\n"<< "PidFile \"" + varDir + "/sshd.pid\"\n" << "AuthorizedKeysFile \"" << authKeyPath << "\"\n"; #ifdef Q_OS_WIN QString shell="/bash"; if(QFile::exists(appDir+"/bash.exe")) { shell="/bash"; } else if(QFile::exists(appDir+"/sh.exe")) { shell="/sh"; } else if(QFile::exists(appDir+"/bin/bash.exe")) { shell="/bin/bash"; } else if(QFile::exists(appDir+"/bin/sh.exe")) { shell="/bin/sh"; } x2goDebug<<"Subsystem shell: "<openssh, " "openssh-server or openssh-sftp-server depending upon distribution.\n\n" "If the sftp-server binary is installed on your system, please report a bug " "mentioning its path on:\n" "
" "https://wiki.x2go.org/doku.php/wiki:bugs" "
\n"), true); abort (); } out << "Subsystem sftp " << sftp_binary << "\n"; #endif /* The log file in startSshd() is specific to Windows. */ #ifdef Q_OS_WIN if (debugging){ out<<"LogLevel DEBUG1\n"; } #endif file.close(); x2goDebug<exists()) sshLogsDir->mkpath("."); QTemporaryFile* sshLogTemp=new QTemporaryFile ( sshLogsDir->absolutePath()+"/XXXXXX.log" ); sshLogTemp->open(); sshLog=sshLogTemp->fileName(); sshLogTemp->close(); delete sshLogsDir; delete sshLogTemp; x2goDebug<<"Logging cygwin sshd to: "<start (binary, arguments); /* Allow sshd a grace time of 5 seconds to come up. */ QTime sleep_time = QTime::currentTime ().addSecs (5); while (QTime::currentTime () < sleep_time) { if (QProcess::Running == sshd->state ()) { /* * Additionally, spin up to 3 seconds to give sshd * the opportunity to launch its listening socket. */ QTime new_sleep_time = QTime::currentTime ().addSecs (3); while (QTime::currentTime () < new_sleep_time) { if (isServerRunning (clientSshPort.toInt ())) { break; } QCoreApplication::processEvents (QEventLoop::AllEvents, 100); } break; } QCoreApplication::processEvents (QEventLoop::AllEvents, 100); } #endif /* defined (Q_OS_WIN) */ /* Check to see if connecting to the listening socket works. */ if (!isServerRunning (clientSshPort.toInt ())) { printSshDError_startupFailure (); x2goDebug << "Failed to start user mode OpenSSH server."; return (false); } else { x2goDebug << "User mode OpenSSH server started successfully."; return (true); } } void ONMainWindow::setProxyWinTitle() { if (embedMode) return; QString title; if (!useLdap) { if (!(sessionExplorer->getLastSession())) { x2goDebug << "No session selected, not setting proxy window title."; return; } title=sessionExplorer->getLastSession()->name(); } else title=getCurrentUname()+"@"+resumingSession.server; QPixmap pixmap; if (useLdap) pixmap=lastUser->foto(); else pixmap=*(sessionExplorer->getLastSession()->sessIcon()); #ifdef Q_OS_LINUX XStoreName(QX11Info::display(), proxyWinId, title.toLocal8Bit().data()); XWMHints* win_hints; QByteArray bytes; QBuffer buffer(&bytes); buffer.open(QIODevice::WriteOnly); pixmap.save(&buffer, "XPM"); int rez; if (image) XFreePixmap(QX11Info::display(),image); if (shape) XFreePixmap(QX11Info::display(),shape); rez=XpmCreatePixmapFromBuffer(QX11Info::display(), proxyWinId, bytes.data(), (Pixmap *) &image, (Pixmap *) &shape, NULL); if (!rez) { win_hints = XAllocWMHints(); if (win_hints) { win_hints->flags = IconPixmapHint|IconMaskHint; win_hints->icon_pixmap = image; win_hints->icon_mask = shape; XSetWMHints(QX11Info::display(), proxyWinId, win_hints); XFree(win_hints); } } #endif #ifdef Q_OS_WIN wapiSetWindowText((HWND)proxyWinId, title); // wapiSetWindowIcon((HWND)proxyWinId, pixmap); #endif } void ONMainWindow::slotSetProxyWinFullscreen() { #ifdef Q_OS_LINUX QRect geom=QApplication::desktop()->screenGeometry(localDisplayNumber-1); Atom atom = XInternAtom ( QX11Info::display(), "_NET_WM_STATE_FULLSCREEN", True ); XChangeProperty ( QX11Info::display(), proxyWinId, XInternAtom ( QX11Info::display(), "_NET_WM_STATE", True ), XA_ATOM, 32, PropModeReplace, (unsigned char*) &atom, 1 ); XMapWindow(QX11Info::display(), proxyWinId); XSync(QX11Info::display(),false); XEvent event; event.xclient.type = ClientMessage; event.xclient.serial = 0; event.xclient.send_event = True; event.xclient.display = QX11Info::display(); event.xclient.window = proxyWinId; event.xclient.message_type = XInternAtom(QX11Info::display(),"_NET_WM_STATE",False); event.xclient.format = 32; event.xclient.data.l[0] = 1; event.xclient.data.l[1] = XInternAtom(QX11Info::display(),"_NET_WM_STATE_FULLSCREEN",False); event.xclient.data.l[2] = 0; event.xclient.data.l[3] = 1; event.xclient.data.l[4] = 0; Status st; st=XSendEvent(QX11Info::display(), DefaultRootWindow(QX11Info::display()), False, SubstructureNotifyMask ,&event); if(!st) { x2goDebug<<"Couldn't fetch fullscreen setting."; } XSync(QX11Info::display(),false); XMapWindow(QX11Info::display(), proxyWinId); QString geoStr = QString("%1").arg(geom.width()) + "x"+ QString("%1").arg(geom.height()); sshConnection->executeCommand("DISPLAY=:"+resumingSession.display+" xrandr --output default --mode "+geoStr); #endif } void ONMainWindow::resizeProxyWinOnDisplay(int disp) { QRect geom=QApplication::desktop()->screenGeometry(disp-1); QString geoStr = "(x: " + QString("%1").arg(geom.x()) + ", y: "+ QString("%1").arg(geom.y()) + ", w: "+ QString("%1").arg(geom.width()) + ", h: "+ QString("%1").arg(geom.height()); x2goDebug<<"Resizing proxy window to fit display: " + QString("%1").arg(disp) + " " + geoStr; #ifdef Q_OS_LINUX XSync(QX11Info::display(),false); XMoveResizeWindow(QX11Info::display(), proxyWinId, geom.x(), geom.y(), 800, 600); XMapWindow(QX11Info::display(), proxyWinId); XFlush(QX11Info::display()); #endif #ifdef Q_OS_WIN dispGeometry=geom; #endif QTimer::singleShot(500, this, SLOT(slotSetProxyWinFullscreen())); } QRect ONMainWindow::proxyWinGeometry() { #ifdef Q_OS_WIN QRect proxyRect; if (!wapiWindowRectWithoutDecoration((HWND)proxyWinId,proxyRect)) return QRect(); return proxyRect; #endif #ifdef Q_OS_LINUX QRect proxyRect; Window root; int x,y; uint w,h,border,depth; if (XGetGeometry(QX11Info::display(), proxyWinId, &root,&x,&y,&w,&h,&border,&depth)) { int realx,realy; Window child; XTranslateCoordinates(QX11Info::display(), proxyWinId, root, 0, 0, &realx, &realy, &child); proxyRect.setRect(realx, realy, w,h); } return proxyRect; #endif return QRect(); } void ONMainWindow::slotConfigXinerama() { QRect newGeometry=proxyWinGeometry(); if (newGeometry.isNull()) { x2goWarningf(7)<< tr("Error getting window geometry. (Did you close the window?)"); xineramaTimer->stop(); return; } if (newGeometry==lastDisplayGeometry) return; lastDisplayGeometry=newGeometry; QString geoStr = "(x: " + QString("%1").arg(lastDisplayGeometry.x()) + ", y: "+ QString("%1").arg(lastDisplayGeometry.y()) + ", w: "+ QString("%1").arg(lastDisplayGeometry.width()) + ", h: "+ QString("%1").arg(lastDisplayGeometry.height()); x2goDebug<<"New proxy geometry: " + geoStr; QDesktopWidget* root=QApplication::desktop(); QList newXineramaScreens; for (int i=0; i< root->numScreens(); ++i) { QRect intersection; if (resumingSession.fullscreen) { x2goDebug<<"correcting display geometry for full screen session"; lastDisplayGeometry.setX(0); lastDisplayGeometry.setY(0); intersection=root->screenGeometry(i); } else intersection=root->screenGeometry(i).intersected(lastDisplayGeometry); if (!intersection.isNull()) { // x2goDebug<<"intersected with "<stop(); QStringList screens; foreach (QRect disp, xineramaScreens) screens< $HOME/.x2go/C-"+ resumingSession.sessionId+"/xinerama.conf"; sshConnection->executeCommand(cmd, this, SLOT(slotXineramaConfigured())); } } void ONMainWindow::slotXineramaConfigured() { if (resumingSession.fullscreen) return; if (xinSizeInc == -1) xinSizeInc=1; else xinSizeInc=-1; #ifdef Q_OS_LINUX lastDisplayGeometry.setWidth(lastDisplayGeometry.width()+xinSizeInc); XSync(QX11Info::display(),false); XResizeWindow(QX11Info::display(), proxyWinId, lastDisplayGeometry.width(),lastDisplayGeometry.height()); XSync(QX11Info::display(),false); #endif #ifdef Q_OS_WIN QRect geom; wapiWindowRect ( (HWND) proxyWinId, geom ); wapiMoveWindow( (HWND) proxyWinId, geom.x(), geom.y(), geom.width()+xinSizeInc, geom.height(),true); lastDisplayGeometry=proxyWinGeometry(); #endif xineramaTimer->start(500); } void ONMainWindow::setProxyWinNotResizable() { #ifdef Q_OS_WIN switch(wapiIsWinResizeable((HWND)proxyWinId)) { case -1: x2goDebug<<"Proxy window is closed, stop checking properties"; return; case 1: wapiSetWinNotResizable((HWND)proxyWinId); default: QTimer::singleShot(1000, this, SLOT(setProxyWinNotResizable())); } #endif #ifdef Q_OS_LINUX XWindowAttributes wattr; if(! XGetWindowAttributes(QX11Info::display(), proxyWinId, &wattr)) { x2goDebug<<"Proxy window is closed, stop checking properties"; return; } if(wattr.map_state != IsViewable) { QTimer::singleShot(1000, this, SLOT(setProxyWinNotResizable())); return; } XSizeHints rhints; long rflags; if(!XGetWMNormalHints(QX11Info::display(), proxyWinId, &rhints, &rflags)) { x2goDebug<<"Failed to get hints for proxy window, stop checking properties"; return; } if(rhints.min_width==proxyWinWidth && rhints.max_width==proxyWinWidth && rhints.min_height==proxyWinHeight && rhints.max_height==proxyWinHeight) { QTimer::singleShot(1000, this, SLOT(setProxyWinNotResizable())); return; } XSizeHints* hints; XSync(QX11Info::display(),false); hints=XAllocSizeHints(); hints->flags= PMinSize|PMaxSize; hints->base_width=hints->max_width=hints->min_width=proxyWinWidth; hints->base_height=hints->max_height=hints->min_height=proxyWinHeight; // x2goDebug<<"Setting X11 hints on proxy window"; XSetWMNormalHints(QX11Info::display(), proxyWinId, hints); XSync(QX11Info::display(),false); XFlush(QX11Info::display()); XFree(hints); QTimer::singleShot(1000, this, SLOT(setProxyWinNotResizable())); #endif } void ONMainWindow::slotFindProxyWin() { #ifndef Q_OS_DARWIN x2goDebug<<"Searching proxy window: X2GO-" + resumingSession.sessionId; proxyWinId=findWindow ( "X2GO-"+resumingSession.sessionId ); bool xinerama=defaultXinerama; if ( proxyWinId ) { x2goDebug<<"Proxy window found: " + QString("%1").arg(proxyWinId); setProxyWinTitle(); proxyWinTimer->stop(); if (!embedMode && !(resumingSession.sessionType==x2goSession::KDRIVE) && !(resumingSession.sessionType==x2goSession::ROOTLESSKDRIVE)) { if (!useLdap) { X2goSettings *st; QString sid; if ( !embedMode ) { if (!(sessionExplorer->getLastSession())) { x2goDebug << "No session selected, not searching for proxy window."; return; } sid=sessionExplorer->getLastSession()->id(); } else sid="embedded"; if (brokerMode) st=new X2goSettings(config.iniFile,QSettings::IniFormat); else st= new X2goSettings( "sessions" ); xinerama=st->setting()->value ( sid+"/xinerama", ( QVariant ) defaultXinerama ).toBool(); #ifndef Q_OS_WIN uint displays=QApplication::desktop()->numScreens(); if (st->setting()->value ( sid+"/multidisp", ( QVariant ) false ).toBool()) { uint disp=st->setting()->value ( sid+"/display", ( QVariant ) 1 ).toUInt(); delete st; if (disp>displays) { disp=1; } localDisplayNumber=disp; resizeProxyWinOnDisplay(disp); return; } #endif if (st->setting()->value ( sid+"/noresize", ( QVariant ) false ).toBool()) { x2goDebug<<"making proxy window not resizable"; setProxyWinNotResizable(); } delete st; } if (xinerama) { x2goDebug<<"Starting Xinerama timer."; lastDisplayGeometry=QRect(); xineramaScreens.clear(); xineramaTimer->start(500); } } if ( embedMode ) { x2goDebug<<"Checking rootless config."; if ( config.rootless ) { x2goDebug<<"Window is rootless."; act_embedContol->setEnabled ( false ); } else slotAttachProxyWindow(); } #ifdef Q_OS_WIN x2goDebug<<"Maximize proxy window: "<text(); } QString ONMainWindow::getCurrentPass() { return pass->text(); } void ONMainWindow::slotDetachProxyWindow() { proxyWinEmbedded=false; bgFrame->show(); setStatStatus(); act_embedContol->setText ( tr ( "Attach X2Go window" ) ); act_embedContol->setIcon ( QIcon ( iconsPath("/32x32/attach.png" ) )); #ifdef Q_OS_LINUX //if QX11EmbedContainer cannot embed window, check if window exists //and reconnect if ( !embedControlChanged ) { slotFindProxyWin(); x2goDebug<<"Proxy window detached, proxywin is: "<hide(); proxyWinEmbedded=true; setStatStatus(); act_embedContol->setText ( tr ( "Detach X2Go window" ) ); act_embedContol->setIcon ( QIcon ( iconsPath("/32x32/detach.png" ) )); QTimer::singleShot ( 100, this, SLOT ( slotEmbedWindow() ) ); } else { x2goDebug<<"Start embedded was false."; startEmbedded=true; } } void ONMainWindow::slotEmbedWindow() { #ifndef Q_OS_DARWIN QTimer::singleShot ( 1000, this, SLOT ( slotActivateWindow() ) ); #endif } void ONMainWindow::setEmbedSessionActionsEnabled ( bool enable ) { act_shareFolder->setEnabled ( enable ); if(!enable) act_showApps->setVisible(enable); act_suspend->setEnabled ( enable ); act_terminate->setEnabled ( enable ); act_embedContol->setEnabled ( enable ); act_reconnect->setEnabled ( !enable ); } void ONMainWindow::slotEmbedControlAction() { #ifndef Q_OS_DARWIN embedControlChanged=true; if ( !proxyWinEmbedded ) { slotAttachProxyWindow(); } #endif } void ONMainWindow::slotEmbedIntoParentWindow() { #ifndef Q_OS_DARWIN // embedInto ( embedParent ); #endif } void ONMainWindow::processSessionConfig() { bool haveKey=false; UNUSED (haveKey); config.command="KDE"; config.brokerNoAuth=false; config.sshport="22"; config.session=tr ( "X2Go Session" ); config.checkexitstatus=true; config.showtermbutton=true; config.showexpbutton=true; config.showconfig=true; config.showextconfig=true; config.showtoolbar=true; config.showstatusbar=true; config.kbdType=getDefaultKbdType(); config.kbdLay=getDefaultLayout()[0]; config.confSnd=false; config.confFS=false; config.confConSpd=false; config.confCompMet=false; config.confImageQ=false; config.confDPI=false; config.confKbd=false; QStringList lines=m_x2goconfig.split ( "\n" ); for ( int i=0; isetVisible ( config.showtermbutton ); act_shareFolder->setVisible ( config.showexpbutton ); act_set->setVisible ( config.showconfig ); if (!config.showstatusbar) { statusBar()->hide(); } if ( managedMode ) { QTimer::singleShot ( 500, this, SLOT ( slotStartBroker() ) ); return; } slotSelectedFromList ( ( SessionButton* ) 0 ); } void ONMainWindow::processCfgLine ( QString line ) { QStringList lst=line.split ( "=" ); if ( lst[0]=="command" ) { config.command=lst[1]; if ( config.command=="SHADOW" ) { shadowSession=true; runRemoteCommand=false; } return; } if ( lst[0]=="server" ) { config.server=lst[1]; return; } if ( lst[0]=="session" ) { config.session=lst[1]; return; } if ( lst[0]=="sshport" ) { config.sshport=lst[1]; return; } if ( lst[0]=="user" ) { config.user=lst[1]; return; } if ( lst[0]=="rootless" ) { if ( lst[1]=="true" ) config.rootless=true; else config.rootless=false; return; } if ( lst[0]=="published" ) { if ( lst[1]=="true" ) config.published=true; else config.published=false; return; } if ( lst[0]=="checkexitstatus" ) { if ( lst[1]=="true" ) config.checkexitstatus=true; else config.checkexitstatus=false; return; } if ( lst[0]=="showtermbutton" ) { if ( lst[1]=="true" ) config.showtermbutton=true; else config.showtermbutton=false; return; } if ( lst[0]=="showexpbutton" ) { if ( lst[1]=="true" ) config.showexpbutton=true; else config.showexpbutton=false; return; } if ( lst[0]=="showconfig" ) { if ( lst[1]=="true" ) config.showconfig=true; else config.showconfig=false; return; } if ( lst[0]=="showextconfig" ) { if ( lst[1]=="true" ) config.showextconfig=true; else config.showextconfig=false; return; } if ( lst[0]=="showstatusbar" ) { if ( lst[1]=="true" ) config.showstatusbar=true; else config.showstatusbar=false; return; } if ( lst[0]=="showtoolbar" ) { if ( lst[1]=="true" ) config.showtoolbar=true; else config.showtoolbar=false; return; } if ( lst[0]=="sound" ) { config.confSnd=true; if ( lst[1]=="true" ) config.useSnd=true; else config.useSnd=false; return; } if ( lst[0]=="exportfs" ) { config.confFS=true; if ( lst[1]=="true" ) config.useFs=true; else config.useFs=false; return; } if ( lst[0]=="speed" ) { config.confConSpd=true; config.conSpeed=ADSL; if ( lst[1]=="modem" ) config.conSpeed=MODEM; else if ( lst[1]=="isdn" ) config.conSpeed=ISDN; else if ( lst[1]=="adsl" ) config.conSpeed=ADSL; else if ( lst[1]=="wan" ) config.conSpeed=WAN; else if ( lst[1]=="lan" ) config.conSpeed=LAN; else { qCritical ( "%s",tr ( "Invalid value for argument \"speed\"" ).toLocal8Bit().data() ); } return; } if ( lst[0]=="compression" ) { config.confCompMet=true; config.compMet=lst[1]; return; } if ( lst[0]=="quality" ) { config.confImageQ=true; config.imageQ=lst[1].toInt(); return; } if ( lst[0]=="dpi" ) { config.confDPI=true; config.dpi=lst[1].toInt(); return; } if ( lst[0]=="kbdlayout" ) { config.confKbd=true; config.kbdLay=lst[1]; return; } if ( lst[0]=="kbdtype" ) { config.confKbd=true; config.kbdType=lst[1]; return; } if ( lst[0]=="brokerurl" ) { config.brokerurl=lst[1]; managedMode=true; acceptRsa=true; } if ( lst[0]=="cookie" ) { config.cookie=lst[1]; return; } if ( lst[0]=="x2gosession" ) { config.sessiondata=lst[1]; return; } if ( lst[0]=="connectionts" ) { config.connectionts=lst[1]; return; } if (lst[0] == "usesshproxy") { config.useproxy = true; if (lst[1].toLower () == "true") { config.useproxy = true; } else { config.useproxy = false; } return; } if (lst[0] == "sshproxytype") { if (lst[1].toLower () == "http") { config.proxyType = SshMasterConnection::PROXYHTTP; } else { config.proxyType = SshMasterConnection::PROXYSSH; } return; } if (lst[0] == "sshproxyuser") { config.proxylogin = lst[1]; return; } if (lst[0] == "sshproxyhost") { config.proxyserver = lst[1]; return; } if (lst[0] == "sshproxyport") { config.proxyport = lst[1].toInt (); return; } if (lst[0] == "sshproxyautologin") { if (lst[1].toLower () == "true") { config.proxyAutologin = true; } else { config.proxyAutologin = false; } return; } if (lst[0] == "sshproxykrblogin") { if (lst[1].toLower () == "true") { config.proxyKrbLogin = true; } else { config.proxyKrbLogin = false; } return; } if (lst[0] == "sshproxykeyfile") { config.proxyKey = lst[1]; return; } } void ONMainWindow::slotChangeKbdLayout(const QString& layout) { #ifdef Q_OS_LINUX QStringList args; args<<"-layout"<setMainWidget ( ( QWidget* ) this ); #endif username->addWidget ( passForm ); passForm->hide(); setWidgetStyle ( passForm ); if ( !miniMode ) passForm->setFixedSize ( passForm->sizeHint() ); else passForm->setFixedSize ( 310,180 ); QPalette pal=passForm->palette(); pal.setBrush ( QPalette::Window, QColor ( 255,255,255,0 ) ); pal.setColor ( QPalette::Active, QPalette::WindowText, QPalette::Mid ); pal.setColor ( QPalette::Active, QPalette::ButtonText, QPalette::Mid ); pal.setColor ( QPalette::Active, QPalette::Text, QPalette::Mid ); pal.setColor ( QPalette::Inactive, QPalette::WindowText, QPalette::Mid ); pal.setColor ( QPalette::Inactive, QPalette::ButtonText, QPalette::Mid ); pal.setColor ( QPalette::Inactive, QPalette::Text, QPalette::Mid ); passForm->setPalette ( pal ); pal.setColor ( QPalette::Button, QColor ( 255,255,255,0 ) ); pal.setColor ( QPalette::Window, QColor ( 255,255,255,255 ) ); pal.setColor ( QPalette::Base, QColor ( 255,255,255,255 ) ); QFont fnt=passForm->font(); if ( miniMode ) fnt.setPointSize ( 9 ); passForm->setFont ( fnt ); fotoLabel=new QLabel ( passForm ); fotoLabel->hide(); nameLabel=new QLabel ( "",passForm ); nameLabel->hide(); loginPrompt=new QLabel ( tr ( "Login:" ),passForm ); passPrompt=new QLabel ( tr ( "Password:" ),passForm ); layoutPrompt=new QLabel ( tr ( "Keyboard layout:" ),passForm ); login=new ClickLineEdit ( passForm ); setWidgetStyle ( login ); login->setFrame ( false ); login->setEnabled ( false ); login->hide(); loginPrompt->hide(); pass=new ClickLineEdit ( passForm ); setWidgetStyle ( pass ); pass->setFrame ( false ); fnt.setBold ( true ); pass->setFont ( fnt ); pass->setEchoMode ( QLineEdit::Password ); pass->setFocus(); #ifdef Q_OS_LINUX connect ( login,SIGNAL ( clicked() ),this, SLOT ( slotActivateWindow() ) ); connect ( pass,SIGNAL ( clicked() ),this, SLOT ( slotActivateWindow() ) ); #endif pass->hide(); passPrompt->hide(); cbLayout=new QComboBox(passForm); cbLayout->addItems(defaultLayout); cbLayout->setFocusPolicy(Qt::NoFocus); cbLayout->setFrame(false); setWidgetStyle(cbLayout); cbLayout->hide(); layoutPrompt->hide(); QHBoxLayout* cbLayoutLay=new QHBoxLayout(); cbLayoutLay->addWidget(cbLayout); cbLayoutLay->addStretch(); ok=new QPushButton ( tr ( "Ok" ),passForm ); setWidgetStyle ( ok ); cancel=new QPushButton ( tr ( "Cancel" ),passForm ); setWidgetStyle ( cancel ); #if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) cancel->setShortcut (QKeySequence::Cancel); #else /* QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) */ #ifdef Q_OS_DARWIN QAction *cancel_action = new QAction (passForm); QList tmp_shortcuts; tmp_shortcuts << Qt::Key_Escape << (Qt::CTRL + Qt::Key_Period); cancel_action->setShortcuts (tmp_shortcuts); connect (cancel_action, SIGNAL (triggered ()), cancel, SLOT (animateClick ())); cancel->addAction (cancel_action); #else /* defined (Q_OS_DARWIN) */ cancel->setShortcut (QKeySequence (Qt::Key_Escape)); #endif /* defined (Q_OS_DARWIN) */ #endif /* QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) */ ok->hide(); cancel->hide(); cbLayout->setPalette ( pal ); ok->setPalette ( pal ); cancel->setPalette ( pal ); ok->setFixedSize ( ok->sizeHint() ); cancel->setFixedSize ( cancel->sizeHint() ); QVBoxLayout *layout=new QVBoxLayout ( passForm ); QHBoxLayout *labelLay=new QHBoxLayout(); QHBoxLayout *inputLay=new QHBoxLayout(); QHBoxLayout *buttonLay=new QHBoxLayout(); labelLay->setSpacing ( 20 ); inputLay->setSpacing ( 10 ); layout->setContentsMargins ( 20,20,10,10 ); layout->addLayout ( labelLay ); layout->addStretch(); layout->addLayout ( inputLay ); layout->addStretch(); layout->addLayout ( buttonLay ); labelLay->addWidget ( fotoLabel ); labelLay->addWidget ( nameLabel ); labelLay->addStretch(); QVBoxLayout* il1=new QVBoxLayout(); il1->addWidget ( loginPrompt ); il1->addWidget ( passPrompt ); il1->addWidget ( layoutPrompt ); QVBoxLayout* il2=new QVBoxLayout(); il2->addWidget ( login ); il2->addWidget ( pass ); il2->addLayout ( cbLayoutLay ); inputLay->addLayout ( il1 ); inputLay->addLayout ( il2 ); inputLay->addStretch(); buttonLay->addStretch(); buttonLay->addWidget ( ok ); buttonLay->addWidget ( cancel ); buttonLay->addStretch(); pal.setColor ( QPalette::Base, QColor ( 239,239,239,255 ) ); login->setPalette ( pal ); pass->setPalette ( pal ); connect ( ok,SIGNAL ( clicked() ),this, SLOT ( slotSessEnter() ) ); connect ( cancel,SIGNAL ( clicked() ),this, SLOT ( slotClosePass() ) ); connect ( pass,SIGNAL ( returnPressed() ),this, SLOT ( slotSessEnter() ) ); connect ( login,SIGNAL ( returnPressed() ),pass, SLOT ( selectAll() ) ); connect ( login,SIGNAL ( returnPressed() ),pass, SLOT ( setFocus() ) ); passPrompt->show(); pass->show(); ok->show(); cancel->show(); fotoLabel->show(); nameLabel->show(); if ( !useLdap ) { login->show(); loginPrompt->show(); } if ( embedMode ) { cancel->setEnabled ( false ); #ifdef Q_OS_WIN QRect r; wapiWindowRect ( (HWND)ok->winId(),r ); #endif } if (defaultLayout.size()>1) { layoutPrompt->show(); cbLayout->show(); slotChangeKbdLayout(cbLayout->currentText()); connect (cbLayout,SIGNAL(currentIndexChanged(QString)),this,SLOT(slotChangeKbdLayout(QString))); } } void ONMainWindow::initStatusDlg() { sessionStatusDlg = new SVGFrame ( images_resource_path("/svg/passform.svg"), false,bgFrame ); sessionStatusDlg->hide(); if ( !miniMode ) sessionStatusDlg->setFixedSize ( sessionStatusDlg->sizeHint() ); else sessionStatusDlg->setFixedSize ( 310,200 ); QFont fnt=sessionStatusDlg->font(); if ( miniMode ) fnt.setPointSize ( 9 ); sessionStatusDlg->setFont ( fnt ); username->addWidget ( sessionStatusDlg ); QPalette pal=sessionStatusDlg->palette(); pal.setBrush ( QPalette::Window, QColor ( 0,0,0,0 ) ); pal.setColor ( QPalette::Active, QPalette::WindowText, QPalette::Mid ); pal.setColor ( QPalette::Active, QPalette::ButtonText, QPalette::Mid ); pal.setColor ( QPalette::Active, QPalette::Text, QPalette::Mid ); pal.setColor ( QPalette::Inactive, QPalette::WindowText, QPalette::Mid ); pal.setColor ( QPalette::Inactive, QPalette::ButtonText, QPalette::Mid ); pal.setColor ( QPalette::Inactive, QPalette::Text, QPalette::Mid ); sessionStatusDlg->setPalette ( pal ); slName=new QLabel ( sessionStatusDlg ); slVal=new QLabel ( sessionStatusDlg ); slName->setText ( tr ( "Session ID:
Server:
Username:" "
Display:
Creation time:
Status:
" ) ); slName->setFixedSize ( slName->sizeHint() ); slName->hide(); slVal->hide(); slVal->setFixedHeight ( slName->sizeHint().height() ); sbApps=new QToolButton (sessionStatusDlg ); sbApps->setToolTip(tr ( "Applications ..." )); sbApps->setIcon(QPixmap(iconsPath("/32x32/apps.png"))); sbApps->setAutoRaise(true); sbApps->setFocusPolicy(Qt::NoFocus); sbExp=new QToolButton (sessionStatusDlg ); sbExp->setIcon(QPixmap(iconsPath("/32x32/open_dir.png"))); sbExp->setToolTip (tr ("Share folder ..." )); sbExp->setAutoRaise(true); sbExp->setFocusPolicy(Qt::NoFocus); sbSusp=new QToolButton (sessionStatusDlg ); sbSusp->setIcon(QPixmap(iconsPath("/32x32/suspend_session.png"))); sbSusp->setToolTip(tr ( "Abort" )); sbSusp->setAutoRaise(true); sbSusp->setFocusPolicy(Qt::NoFocus); sbTerm=new QToolButton (sessionStatusDlg ); sbTerm->setIcon(QPixmap(iconsPath("/32x32/stop_session.png"))); sbTerm->setToolTip(tr ( "Terminate" )); sbTerm->setAutoRaise(true); sbTerm->setFocusPolicy(Qt::NoFocus); sbAdv=new QCheckBox ( tr ( "Show details" ),sessionStatusDlg ); setWidgetStyle ( sbTerm ); setWidgetStyle ( sbApps ); setWidgetStyle ( sbExp ); setWidgetStyle ( sbSusp ); setWidgetStyle ( sbAdv ); sbAdv->setFixedSize ( sbAdv->sizeHint() ); sbApps->setFixedSize ( 32,32 ); sbSusp->setFixedSize ( 32,32 ); sbTerm->setFixedSize ( 32,32 ); sbExp->setFixedSize ( 32,32 ); /* sbApps->setFocusPolicy(Qt::NoFocus); sbSusp->setFocusPolicy(Qt::NoFocus); sbTerm->setFocusPolicy(Qt::NoFocus); sbExp->setFocusPolicy(Qt::NoFocus);*/ sbAdv->hide(); sbSusp->hide(); sbTerm->hide(); sbExp->hide(); sbApps->hide(); pal.setColor ( QPalette::Button, QColor ( 255,255,255,0 ) ); pal.setColor ( QPalette::Window, QColor ( 255,255,255,255 ) ); pal.setColor ( QPalette::Base, QColor ( 255,255,255,255 ) ); sbAdv->setPalette ( pal ); sbApps->setPalette ( pal ); sbSusp->setPalette ( pal ); sbTerm->setPalette ( pal ); sbExp->setPalette ( pal ); stInfo=new QTextEdit ( sessionStatusDlg ); setWidgetStyle ( stInfo ); setWidgetStyle ( stInfo->verticalScrollBar() ); stInfo->setReadOnly ( true ); stInfo->hide(); stInfo->setFrameStyle ( QFrame::StyledPanel|QFrame::Plain ); stInfo->setPalette ( pal ); sbExp->setEnabled ( false ); connect ( sbSusp,SIGNAL ( clicked() ),this, SLOT ( slotTestSessionStatus() ) ); connect ( sbTerm,SIGNAL ( clicked() ),this, SLOT ( slotTermSessFromSt() ) ); connect ( sbAdv,SIGNAL ( clicked() ),this, SLOT ( slotShowAdvancedStat() ) ); connect ( sbExp,SIGNAL ( clicked() ),this, SLOT ( slotExportDirectory() ) ); connect ( sbApps,SIGNAL ( clicked() ),this, SLOT ( slotAppDialog()) ); QVBoxLayout* layout=new QVBoxLayout ( sessionStatusDlg ); QHBoxLayout* ll=new QHBoxLayout(); ll->addWidget ( slName ); ll->addWidget ( slVal ); ll->addStretch(); ll->setSpacing ( 10 ); if ( !miniMode ) layout->setContentsMargins ( 25,25,10,10 ); else layout->setContentsMargins ( 10,10,10,10 ); QHBoxLayout* bl=new QHBoxLayout(); bl->addStretch(); bl->addWidget ( sbApps ); bl->addWidget ( sbExp ); bl->addWidget ( sbSusp ); bl->addWidget ( sbTerm ); // bl->addStretch(); layout->addLayout ( ll ); layout->addStretch(); layout->addWidget ( stInfo ); layout->addWidget ( sbAdv ); layout->addStretch(); layout->addLayout ( bl ); layout->setSizeConstraint( QLayout::SetFixedSize ); slName->show(); slVal->show(); sbAdv->show(); if ( !embedMode ) { sbSusp->show(); sbTerm->show(); if (! hideFolderSharing ) sbExp->show(); } X2goSettings st ( "settings" ); if ( st.setting()->value ( "showStatus", ( QVariant ) false ).toBool() ) { sbAdv->setChecked ( true ); slotShowAdvancedStat(); } #ifdef Q_OS_WIN if ( embedMode ) { QRect r; wapiWindowRect ( (HWND)sbAdv->winId(),r ); wapiWindowRect ( (HWND)stInfo->verticalScrollBar ()->winId(),r ); } #endif } void ONMainWindow::initSelectSessDlg() { selectSessionDlg = new SVGFrame (images_resource_path( "/svg/passform.svg"), false,bgFrame ); username->addWidget ( selectSessionDlg ); setWidgetStyle ( selectSessionDlg ); if ( !miniMode ) { QSize hint_size = selectSessionDlg->sizeHint (); selectSessionDlg->setMinimumSize (QSize (hint_size.width (), (hint_size.height () + 100))); selectSessionDlg->setFixedSize (selectSessionDlg->minimumSize ()); } else selectSessionDlg->setFixedSize ( 310,240 ); QPalette pal=selectSessionDlg->palette(); pal.setBrush ( QPalette::Window, QColor ( 255,255,255,0 ) ); pal.setColor ( QPalette::Active, QPalette::WindowText, QPalette::Mid ); pal.setColor ( QPalette::Active, QPalette::ButtonText, QPalette::Mid ); pal.setColor ( QPalette::Active, QPalette::Text, QPalette::Mid ); pal.setColor ( QPalette::Inactive, QPalette::WindowText, QPalette::Mid ); pal.setColor ( QPalette::Inactive, QPalette::ButtonText, QPalette::Mid ); pal.setColor ( QPalette::Inactive, QPalette::Text, QPalette::Mid ); selectSessionDlg->setPalette ( pal ); pal.setColor ( QPalette::Button, QColor ( 255,255,255,0 ) ); pal.setColor ( QPalette::Window, QColor ( 255,255,255,255 ) ); pal.setColor ( QPalette::Base, QColor ( 255,255,255,255 ) ); QFont fnt=selectSessionDlg->font(); if ( miniMode ) fnt.setPointSize ( 9 ); selectSessionDlg->setFont ( fnt ); selectSessionLabel=new QLabel ( tr ( "Select session:" ), selectSessionDlg ); running_label = new QLabel (tr ("Note: the currently selected session " "is already running.
To forcefully " "resume it, suspend it first."), selectSessionDlg); running_label->setWordWrap (true); sOk=new QPushButton ( tr ( "Resume" ),selectSessionDlg ); setWidgetStyle ( sOk ); sCancel=new QPushButton ( tr ( "Cancel" ),selectSessionDlg ); setWidgetStyle ( sCancel ); #if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) sCancel->setShortcut (QKeySequence::Cancel); #else /* QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) */ #ifdef Q_OS_DARWIN QAction *cancel_action = new QAction (selectSessionDlg); QList tmp_shortcuts; tmp_shortcuts << Qt::Key_Escape << (Qt::CTRL + Qt::Key_Period); cancel_action->setShortcuts (tmp_shortcuts); connect (cancel_action, SIGNAL (triggered ()), sCancel, SLOT (animateClick ())); sCancel->addAction (cancel_action); #else /* defined (Q_OS_DARWIN) */ sCancel->setShortcut (QKeySequence (Qt::Key_Escape)); #endif /* defined (Q_OS_DARWIN) */ #endif /* QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) */ bCancel=new QPushButton ( tr ( "Cancel" ),selectSessionDlg ); setWidgetStyle ( bCancel ); bSusp=new QPushButton ( tr ( "Suspend" ),selectSessionDlg ); setWidgetStyle ( bSusp ); bTerm=new QPushButton ( tr ( "Terminate" ),selectSessionDlg ); setWidgetStyle ( bTerm ); bNew=new QPushButton ( tr ( "New" ),selectSessionDlg ); setWidgetStyle ( bNew ); bShadow=new QPushButton ( tr ( "Full access" ),selectSessionDlg ); setWidgetStyle ( bShadow ); bShadowView=new QPushButton ( tr ( "View only" ),selectSessionDlg ); setWidgetStyle ( bShadowView ); sOk->setPalette ( pal ); sCancel->setPalette ( pal ); connect ( sCancel,SIGNAL ( clicked() ),this, SLOT ( slotCloseSelectDlg() ) ); connect ( bCancel,SIGNAL ( clicked() ),this, SLOT ( slotCloseSelectDlg() ) ); selectSessionDlg->show(); sOk->setFixedSize ( ok->sizeHint() ); sCancel->setFixedSize ( cancel->sizeHint() ); int bmaxw=bNew->size().width(); if ( bSusp->size().width() >bmaxw ) bmaxw=bSusp->size().width(); if ( bTerm->size().width() >bmaxw ) bmaxw=bTerm->size().width(); bNew->setFixedWidth ( bmaxw ); bSusp->setFixedWidth ( bmaxw ); bTerm->setFixedWidth ( bmaxw ); sOk->setEnabled (false); sCancel->setEnabled ( true ); selectSessionDlg->setEnabled ( true ); setEnabled ( true ); sessTv=new SessTreeView ( selectSessionDlg ); setWidgetStyle ( sessTv ); setWidgetStyle ( sessTv->horizontalScrollBar() ); setWidgetStyle ( sessTv->verticalScrollBar() ); sessTv->setItemsExpandable ( false ); sessTv->setRootIsDecorated ( false ); model=new QStandardItemModel ( sessionExplorer->getSessionsList()->size(), 8 ); if(!brokerMode) model->setHeaderData ( S_DISPLAY,Qt::Horizontal, QVariant ( ( QString ) tr ( "Display" ) ) ); else { model->setHeaderData ( S_DISPLAY,Qt::Horizontal, QVariant ( ( QString ) tr ( "User" ) ) ); } model->setHeaderData ( S_STATUS,Qt::Horizontal, QVariant ( ( QString ) tr ( "Status" ) ) ); model->setHeaderData ( S_COMMAND,Qt::Horizontal, QVariant ( ( QString ) tr ( "Command" ) ) ); model->setHeaderData ( S_TYPE,Qt::Horizontal, QVariant ( ( QString ) tr ( "Type" ) ) ); model->setHeaderData ( S_SERVER,Qt::Horizontal, QVariant ( ( QString ) tr ( "Server" ) ) ); model->setHeaderData ( S_CRTIME,Qt::Horizontal, QVariant ( ( QString ) tr ( "Creation time" ) ) ); model->setHeaderData ( S_IP,Qt::Horizontal, QVariant ( ( QString ) tr ( "Client IP" ) ) ); model->setHeaderData ( S_ID,Qt::Horizontal, QVariant ( ( QString ) tr ( "Session ID" ) ) ); modelDesktop=new QStandardItemModel ( sessionExplorer->getSessionsList()->size(), 2 ); modelDesktop->setHeaderData ( D_USER,Qt::Horizontal, QVariant ( ( QString ) tr ( "User" ) ) ); modelDesktop->setHeaderData ( D_DISPLAY,Qt::Horizontal, QVariant ( ( QString ) tr ( "Display" ) ) ); sessTv->setModel ( ( QAbstractItemModel* ) model ); QFontMetrics fm ( sessTv->font() ); sessTv->setEditTriggers ( QAbstractItemView::NoEditTriggers ); sessTv->setPalette ( pal ); sessTv->setModel ( ( QAbstractItemModel* ) model ); bNew->setPalette ( pal ); bShadow->setPalette ( pal ); bShadowView->setPalette ( pal ); bSusp->setPalette ( pal ); bTerm->setPalette ( pal ); sessTv->setFrameStyle ( QFrame::StyledPanel|QFrame::Plain ); bSusp->setEnabled ( false ); bTerm->setEnabled ( false ); bShadow->setEnabled ( false ); selectSessionLabel->hide(); running_label->hide (); bCancel->setPalette ( pal ); bCancel->hide(); desktopFilter=new QLineEdit ( selectSessionDlg ); setWidgetStyle ( desktopFilter ); // desktopFilter->setFrame ( false ); desktopFilterCb=new QCheckBox ( tr ( "Only my desktops" ), selectSessionDlg ); desktopFilterCb->hide(); QVBoxLayout* layout=new QVBoxLayout ( selectSessionDlg ); QHBoxLayout* filterLay=new QHBoxLayout(); QHBoxLayout* blay=new QHBoxLayout(); QVBoxLayout* alay=new QVBoxLayout(); QHBoxLayout* tvlay=new QHBoxLayout(); selectSesDlgLayout=layout; layout->addWidget ( selectSessionLabel ); layout->addLayout ( filterLay ); layout->addLayout ( tvlay ); layout->addStretch (); layout->addWidget (running_label); layout->addStretch (); layout->addLayout ( blay ); filterLay->addWidget ( desktopFilter ); filterLay->addWidget ( desktopFilterCb ); alay->addWidget ( bSusp ); alay->addWidget ( bTerm ); alay->addWidget ( bShadowView ); alay->addWidget ( bShadow ); alay->addStretch(); alay->addWidget ( bNew ); alay->addWidget ( bCancel ); tvlay->addWidget ( sessTv ); tvlay->addLayout ( alay ); blay->addStretch(); blay->addWidget ( sOk ); blay->addWidget ( sCancel ); blay->addStretch(); if ( !miniMode ) layout->setContentsMargins ( 25,25,10,10 ); else layout->setContentsMargins ( 10,10,10,10 ); sOk->hide(); sCancel->hide(); bNew->hide(); bSusp->hide(); bTerm->hide(); connect ( sessTv,SIGNAL ( selected ( const QModelIndex& ) ), this,SLOT ( slotActivated ( const QModelIndex& ) ) ); connect ( sOk,SIGNAL ( clicked() ),this, SLOT ( slotResumeSess() ) ); connect ( sessTv,SIGNAL ( doubleClicked ( const QModelIndex& ) ), this,SLOT ( slotResumeDoubleClick ( const QModelIndex& ) ) ); if(!brokerMode) { connect ( bNew,SIGNAL ( clicked() ),this, SLOT ( slotNewSess() ) ); } else { connect ( bNew,SIGNAL ( clicked() ),broker, SIGNAL ( sessionSelected() ) ); } connect ( bSusp,SIGNAL ( clicked() ),this, SLOT ( slotSuspendSess() ) ); connect ( bTerm,SIGNAL ( clicked() ),this, SLOT ( slotTermSess() ) ); connect ( bShadow,SIGNAL ( clicked() ),this, SLOT ( slotShadowSess() ) ); connect ( bShadowView,SIGNAL ( clicked() ),this, SLOT ( slotShadowViewSess() ) ); connect ( desktopFilter,SIGNAL ( textEdited ( const QString& ) ),this, SLOT ( slotDesktopFilterChanged ( const QString& ) ) ); connect ( desktopFilterCb,SIGNAL ( stateChanged ( int ) ), this, SLOT ( slotDesktopFilterCb ( int ) ) ); selectSessionLabel->show(); sOk->show(); sCancel->show(); bNew->show(); bSusp->show(); bTerm->show(); sessTv->show(); selectSessionDlg->hide(); #ifdef Q_OS_WIN if ( embedMode ) { QRect r; wapiWindowRect ( (HWND)sOk->winId(),r ); wapiWindowRect ( (HWND)sessTv->verticalScrollBar ()->winId(),r ); wapiWindowRect ( (HWND)sessTv->horizontalScrollBar ()->winId(),r ); wapiWindowRect ( (HWND)sessTv->header ()->viewport()->winId(),r ); } #endif } void ONMainWindow::printSshDError_startupFailure() { if ( closeEventSent ) return; QString error_message; error_message = tr ("SSH daemon could not be started.\n\n"); QString detailed_error_message = tr ("You have enabled Remote Printing or File Sharing.\n" "These features require a running and functioning SSH server on your computer.\n" "Printing and File Sharing will be disabled for this session.\n\n"); #ifdef Q_OS_WIN detailed_error_message += tr ("Normally, this should not happen as X2Go Client for Windows " "ships its own internal SSH server.\n\n" "If you see this message, please report a bug on:\n"); #else /* defined (Q_OS_WIN) */ detailed_error_message += tr ("The SSH server failed to start.\n\n" "Please report a bug on:\n"); #endif /* defined (Q_OS_WIN) */ detailed_error_message += tr ("
" "https://wiki.x2go.org/doku.php/wiki:bugs" "
\n"); detailed_error_message += tr ("Disabling Remote Printing or File Sharing support " "in the session settings will get rid of this message."); Non_Modal_MessageBox::critical (0l, "X2Go Client", error_message, detailed_error_message, true, QMessageBox::Ok, QMessageBox::NoButton); } void ONMainWindow::printSshDError_noHostPubKey() { if ( closeEventSent ) return; QString error_message = tr ("SSH daemon failed to open its public host key."); QString detailed_error_message = tr ("You have enabled Remote Printing or File Sharing.\n" "These features require a running and functioning SSH server on your computer.\n" "Printing and File Sharing will be disabled for this session.\n\n"); #ifdef Q_OS_WIN detailed_error_message += tr ("Normally, this should not happen as X2Go Client for Windows " "ships its own internal SSH server and automatically " "generates the required keys.\n\n" "If you see this message, please report a bug on:\n"); #else /* defined (Q_OS_WIN) */ detailed_error_message += tr ("X2Go Client was unable to create SSH host keys.\n\n" "Please report a bug on:\n"); #endif /* defined (Q_OS_WIN) */ detailed_error_message += tr ("
" "https://wiki.x2go.org/doku.php/wiki:bugs" "
\n"); detailed_error_message += tr ("Disabling Remote Printing or File Sharing support " "in the session settings will get rid of this message."); Non_Modal_MessageBox::critical (0l, "X2Go Client", error_message, detailed_error_message, true, QMessageBox::Ok, QMessageBox::NoButton); } void ONMainWindow::printSshDError_noExportPubKey() { if ( closeEventSent ) return; QMessageBox::critical ( 0l,tr ( "SSH Error" ), tr ( "SSH daemon failed to open the application's public key\n" "used for exporting folders and printers." ), QMessageBox::Ok,QMessageBox::NoButton ); } void ONMainWindow::printSshDError_noAuthorizedKeysFile() { if ( closeEventSent ) return; QMessageBox::critical ( 0l,tr ( "SSH Error" ), tr ( "SSH daemon failed to open the application's\n" "authorized_keys file." ), QMessageBox::Ok,QMessageBox::NoButton ); } void ONMainWindow::slotPCookieReady ( bool result, QString , int ) { /* Silence warning. */ UNUSED (result); } void ONMainWindow::loadPulseModuleNativeProtocol() { QProcess* proc=new QProcess ( this ); QStringList args; args<<"load-module"<<"module-native-protocol-tcp"; proc->start ( "pactl",args ); proc->waitForFinished ( 3000 ); } void ONMainWindow::slotEmbedToolBar() { if ( statusLabel ) { delete statusLabel; statusLabel=0; } if ( embedTbVisible ) { stb->clear(); act_embedToolBar->setIcon ( QIcon ( iconsPath("/16x16/tbshow.png" )) ); stb->addAction ( act_embedToolBar ); stb->setToolButtonStyle ( Qt::ToolButtonIconOnly ); stb->widgetForAction ( act_embedToolBar )->setFixedHeight ( 16 ); act_embedToolBar->setText ( tr ( "Restore toolbar" ) ); statusLabel=new QLabel; stb->addWidget ( statusLabel ); #ifndef Q_OS_WIN if(!brokerMode) statusBar()->hide(); #endif } else { initEmbedToolBar(); act_embedToolBar->setIcon ( QIcon ( iconsPath("/32x32/tbhide.png" )) ); act_embedToolBar->setText ( tr ( "Minimize toolbar" ) ); } embedTbVisible=!embedTbVisible; if ( proxyWinEmbedded ) setStatStatus(); X2goSettings st ( "sessions" ); st.setting()->setValue ( "embedded/tbvisible", embedTbVisible ); st.setting()->sync(); } void ONMainWindow::initEmbedToolBar() { stb->addAction ( act_embedToolBar ); stb->addSeparator(); stb->setToolButtonStyle ( Qt::ToolButtonTextUnderIcon ); stb->addAction ( act_shareFolder ); stb->addAction ( act_showApps ); stb->addAction ( act_reconnect ); stb->addAction ( act_suspend ); stb->addAction ( act_terminate ); stb->addSeparator(); stb->addAction ( act_embedContol ); stb->addSeparator(); stb->addAction ( act_set ); stb->addAction ( act_abclient ); } void ONMainWindow::slotEmbedToolBarToolTip() { if ( !showTbTooltip ) return; QWidget* widg=stb->widgetForAction ( act_embedToolBar ); QToolTip::showText ( this->mapToGlobal ( QPoint ( 6,6 ) ), tr ( "
   Click this " "button   
" "   to restore toolbar" "   

" ), widg ); } void ONMainWindow::slotActivateWindow() { if ( embedMode ) { QApplication::setActiveWindow ( this ) ; activateWindow(); /* x2goDebug<<"focus:"<hasFocus(); x2goDebug<<"activ:"<isActiveWindow();*/ QTimer::singleShot ( 50, this, SLOT ( slotEmbedToolBarToolTip() ) ); } } #ifndef Q_OS_WIN void ONMainWindow::mouseReleaseEvent ( QMouseEvent * event ) { QMainWindow::mouseReleaseEvent ( event ); slotActivateWindow(); } #endif void ONMainWindow::slotHideEmbedToolBarToolTip() { showTbTooltip=false; QToolTip::hideText(); } void ONMainWindow::slotDesktopFilterChanged ( const QString& text ) { filterDesktops ( text ); } void ONMainWindow::slotDesktopFilterCb ( int state ) { if ( state==Qt::Checked ) { filterDesktops ( getCurrentUname(),true ); desktopFilter->setEnabled ( false ); } else { filterDesktops ( desktopFilter->text() ); desktopFilter->setEnabled ( true ); } } void ONMainWindow::filterDesktops ( const QString& filter, bool strict ) { modelDesktop->setRowCount ( 0 ); bShadow->setEnabled ( false ); bShadowView->setEnabled ( false ); QFontMetrics fm ( sessTv->font() ); uint nextRow=0; for ( int row = 0; row < selectedDesktops.size(); ++row ) { QStringList desktop=selectedDesktops[row].split ( "@" ); if ( filter==tr ( "Filter" ) ||filter.length() <=0|| ( strict && desktop[0]==filter ) || ( !strict && desktop[0].startsWith ( filter ) ) ) { QStandardItem *item; item= new QStandardItem ( desktop[0] ); modelDesktop->setItem ( nextRow,D_USER,item ); item= new QStandardItem ( desktop[1] ); modelDesktop->setItem ( nextRow++,D_DISPLAY,item ); for ( int j=0; j<2; ++j ) { QString txt= modelDesktop->index ( row,j ).data().toString(); if ( sessTv->header()->sectionSize ( j ) < fm.width ( txt ) +6 ) { sessTv->header()->resizeSection ( j,fm.width ( txt ) +6 ); } } } } } void ONMainWindow::slotShadowSess() { shadowMode=SHADOW_FULL; slotShadowViewSess(); } void ONMainWindow::slotShadowViewSess() { shadowUser=sessTv->model()->index ( sessTv->currentIndex().row(), D_USER ).data().toString(); shadowDisplay=sessTv->model()->index ( sessTv->currentIndex().row(), D_DISPLAY ).data().toString(); startNewSession(); } void ONMainWindow::slotReconnectSession() { if ( !managedMode ) slotSelectedFromList ( ( SessionButton* ) 0 ); else { setEnabled ( false ); } } QSize ONMainWindow::getEmbedAreaSize() { if ( embedTbVisible && config.showstatusbar ) statusBar()->show(); QSize sz=bgFrame->size(); // sz.setHeight(sz.height()-statusBar()->size().height()); if(!brokerMode) statusBar()->hide(); return sz; } void ONMainWindow::slotStartBroker() { config.brokerPass=pass->text(); config.brokerUser=login->text(); setStatStatus ( tr ( "Connecting to broker" ) ); stInfo->insertPlainText ( "broker url: "+config.brokerurl ); setEnabled ( false ); if(!usePGPCard) broker->getUserSessions(); } void ONMainWindow::slotGetBrokerSession() { startSession ( config.session); } void ONMainWindow::slotStartNewBrokerSession ( ) { if ( managedMode ) { setEnabled ( true ); slotSelectedFromList ( ( SessionButton* ) 0 ); } } #ifdef Q_OS_WIN QString ONMainWindow::u3DataPath() { QStringList env=QProcess::systemEnvironment(); QString dpath; for ( int i=0; i0 ) { dpath.replace ( "U3_APP_DATA_PATH=","" ); portableDataPath=dpath; return dpath; } return QString::null; } #endif void ONMainWindow::cleanPortable() { removeDir ( homeDir +"/.ssh" ); removeDir ( homeDir +"/ssh" ); removeDir ( homeDir+"/.x2go" ); if (cleanAllFiles) removeDir(homeDir+"/.x2goclient"); } void ONMainWindow::removeDir ( QString path ) { x2goDebug<<"removeDir, entering: " <error()!=QNetworkReply::NoError) { x2goDebug<<"Failed to load resource file "<url()<errorString(); if(resReply.length()==1) { reply->deleteLater(); resourcesLoaded=true; initUI(); return; } } else { // x2goDebug<url().toString()<<" ...OK"; if(resReply.length()==1) { QTemporaryFile fl; fl.open(); resourceTmpDir= new QDir(fl.fileName()+"_d"); fl.close(); resourceDir=resourceTmpDir->path(); x2goDebug<<"resources path:"<mkpath(resourceTmpDir->path()); QString data=reply->readAll(); QStringList lines=data.split("\n"); foreach(QString line, lines) { if((line.indexOf("")!=-1 )&&(line.indexOf("")!=-1)) { line.replace("",""); line.replace("",""); line=line.trimmed(); resReply<get (QNetworkRequest(QUrl(resourceURL+"/"+line))); } } } else { QString fpath=resourceDir+reply->url().toString().replace(resourceURL,""); QStringList parts=fpath.split("/",QString::SkipEmptyParts); QString fname=parts.takeLast(); QString path="/"+parts.join("/"); resourceTmpDir->mkpath(path); QFile file(path+"/"+fname); file.open(QIODevice::WriteOnly); file.write(reply->readAll()); file.close(); } } foreach(QNetworkReply* r, resReply) { if(!r->isFinished()) { return; } } foreach(QNetworkReply* r, resReply) r->deleteLater(); resourcesLoaded=true; initUI(); return; } bool ONMainWindow::parseResourceUrl(const QString& url) { x2goDebug<<"parsing resource url:"<get (QNetworkRequest(QUrl(url+"/resources.qrc"))); resourceURL=url; return true; } resourceDir=url; if(url.indexOf("file://")==0) { resourceDir.replace("file://",""); } QDir d(resourceDir); if(!d.exists()) { resourceDir=QString::null; printError(tr("Directory not exists:")+" "+url+". "+tr("Using built in resources")); } else { x2goDebug<<"Using alternative resource directory:"< * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef ONMAINWINDOW_H #define ONMAINWINDOW_H #include "x2goclientconfig.h" //#include "CallbackInterface.h" #include #include #include #include #include #include #include "LDAPSession.h" #include #include #include #include #include #include #include #include #include #include "sshmasterconnection.h" #include "non_modal_messagebox.h" #ifdef Q_OS_WIN #include #include #endif #if defined (Q_OS_DARWIN) || defined (Q_OS_WIN) #include "pulsemanager.h" #endif /* defined (Q_OS_DARWIN) || defined (Q_OS_WIN) */ /** @author Oleksandr Shneyder */ class QToolButton; class QTemporaryFile; class QLineEdit; class QFrame; class QVBoxLayout; class QHBoxLayout; class QScrollArea; class UserButton; class QTextEdit; class SessionButton; class QLabel; class QProcess; class QFile; class SVGFrame; class SessionButton; class QAction; class QCheckBox; class QModelIndex; class SshMasterConnection; class IMGFrame; class QStandardItemModel; class HttpBrokerClient; class QMenu; class QComboBox; class InteractionDialog; class QNetworkAccessManager; class QNetworkReply; class SessionExplorer; class QSplashScreen; struct user { int uin; QString uid; QString name; QPixmap foto; static bool lessThen ( user u1,user u2 ) { return u1.uid < u2.uid; } }; struct directory { QString key; QString dstKey; QString dirList; bool isRemovable; int pid; }; struct serv { QString name; float factor; float sess; bool connOk; bool operator < ( const struct serv it ) { return ( it.sess < sess ); } static bool lt ( const struct serv it, const struct serv it1 ) { return it.sessselected ( currentIndex() ); QTreeView::selectionChanged ( selected, deselected ); } Q_SIGNALS: void selected ( const QModelIndex& index ); }; class ClickLineEdit; class ONMainWindow : public QMainWindow { friend class HttpBrokerClient; friend class SessionButton; Q_OBJECT public: enum { S_DISPLAY, S_STATUS, S_COMMAND, S_TYPE, S_SERVER, S_CRTIME, S_IP, S_ID }; enum { MODEM, ISDN, ADSL, WAN, LAN }; enum { D_USER, D_DISPLAY }; enum { SHADOW_VIEWONLY, SHADOW_FULL }; enum { PULSE, ARTS, ESD }; enum key_types { RSA_KEY_TYPE, DSA_KEY_TYPE, ECDSA_KEY_TYPE, ED25519_KEY_TYPE, UNKNOWN_KEY_TYPE }; enum client_events { CONNECTING, CONNECTED, SUSPENDING, TERMINATING, FINISHED, ALIVE }; static bool debugging; static bool libssh_debugging; static bool libssh_packetlog; static bool portable; ONMainWindow ( QWidget *parent = 0 ); ~ONMainWindow(); static void installTranslator(); QString iconsPath ( const QString &fname ) const; QString images_resource_path (const QString &filename, const QString &base = "") const; static bool isServerRunning ( int port ); void startNewSession(); void suspendSession ( QString sessId ); void suspendBrokerSession ( const QString& sessId, const QString& host ); bool termSession ( QString sessId, bool warn=true ); void termBrokerSession ( const QString& sessId, const QString& host ); InteractionDialog* getInteractionDialog() { return interDlg; } void setStatStatus ( QString status=QString::null ); x2goSession getNewSessionFromString ( const QString& string ); void runCommand(); long findWindow ( QString text ); bool retUseLdap() { return useLdap; } bool retMiniMode() { return miniMode; } QString retLdapServer() { return ldapServer; } int retLdapPort() { return ldapPort; } QString retLdapDn() { return ldapDn; } QString retLdapServer1() { return ldapServer1; } int retLdapPort1() { return ldapPort1; } QString retLdapServer2() { return ldapServer2; } int retLdapPort2() { return ldapPort2; } QHBoxLayout* mainLayout() { return mainL; } QWidget* mainWidget() { return ( QWidget* ) fr; } static bool getPortable() { return portable; } static QString getHomeDirectory() { return homeDir; } bool getShowAdvOption() { return config.showextconfig; } bool getUsePGPCard() { return usePGPCard; } QString getCardLogin() { return cardLogin; } QString getDefaultCmd() { return defaultCmd; } QString getDefaultSshPort() { return defaultSshPort; } QString getDefaultClipboardMode() { return defaultClipboardMode; } QString getDefaultKbdType() { return defaultKbdType; } QStringList getDefaultLayout() { return defaultLayout; } QString getDefaultPack() { return defaultPack; } int getDefaultQuality() { return defaultQuality; } uint getDefaultDPI() { return defaultDPI; } bool getDefaultSetDPI() { return defaultSetDPI; } bool getEmbedMode() { return embedMode; } int getDefaultLink() { return defaultLink; } int getDefaultWidth() { return defaultWidth; } int getDefaultHeight() { return defaultHeight; } bool getDefaultSetKbd() { return defaultSetKbd; } bool getDefaultUseSound() { return defaultUseSound; } bool getDefaultFullscreen() { return defaultFullscreen; } bool sessionEditEnabled() { return !noSessionEdit; } const QList& getApplications() { return applications; } static QString getSessionConf() { return sessionCfg; } bool getHideFolderSharing() { return hideFolderSharing; } SessionExplorer* getSessionExplorer() { return sessionExplorer; } bool getBrokerMode() { return brokerMode; } bool getMiniMode() { return miniMode; } bool getAcceptRSA() { return acceptRsa; } QScrollArea* getUsersArea() { return users; } QFrame* getUsersFrame() { return uframe; } IMGFrame* getCentralFrame() { return fr; } ConfigFile* getConfig() { return &config; } #if defined (Q_OS_DARWIN) || defined (Q_OS_WIN) bool getSystemDisablePARecord() { return systemDisablePARecord; } bool getSystemDisablePA() { return systemDisablePA; } #endif /* defined (Q_OS_DARWIN) || defined (Q_OS_WIN) */ void runApplication(QString exec); SshMasterConnection* findServerSshConnection(QString host); void cleanServerSshConnections(); bool parseResourceUrl(const QString& url); void showHelp(); void showVersion(); void showTextFile(QString file, QString title); void showGit(); void showChangelog(); void showHelpPack(); void exportDirs ( QString exports,bool removable=false ); void reloadUsers(); void setWidgetStyle ( QWidget* widget ); QStringList internApplicationsNames() { return _internApplicationsNames; } QStringList transApplicationsNames() { return _transApplicationsNames; } QString transAppName ( const QString& internAppName, bool* found=0l ); QString internAppName ( const QString& transAppName, bool* found=0l ); void setEmbedSessionActionsEnabled ( bool enable ); bool startSshd (key_types key_type = RSA_KEY_TYPE); QSize getEmbedAreaSize(); void setBrokerStatus(const QString& text, bool error=false); bool isPassFormHidden(); bool isSelectFormHidden(); #ifdef Q_OS_WIN static QString cygwinPath ( const QString& winPath ); void startXOrg(std::size_t start_offset = 0); static bool haveCygwinEntry(); static void removeCygwinEntry(); static QString U3DevicePath() { return u3Device; } #endif private: InteractionDialog* interDlg; QString m_x2goconfig; QStringList _internApplicationsNames; QStringList _transApplicationsNames; QString portableDataPath; QString proxyErrString; bool haveTerminal; bool proxyRunning; bool drawMenu; bool extStarted; bool startMaximized; bool closeDisconnect; bool startHidden; QString splashPix; QSplashScreen* splash; bool keepTrayIcon; bool hideFolderSharing; bool brokerNoauthWithSessionUsername; bool brokerCredsForSession; bool defaultUseSound; bool defaultXinerama; bool cardStarted; bool defaultSetKbd; bool autoresume; bool showExport; bool usePGPCard; bool miniMode; bool managedMode; bool brokerMode; bool changeBrokerPass; bool connTest; bool embedMode; bool thinMode; QString statusString; QStringList autostartApps; bool cmdAutologin; int defaultLink; int defaultQuality; int defaultWidth; int defaultHeight; bool defaultFullscreen; bool acceptRsa; bool startEmbedded; bool extLogin; bool printSupport; bool showTbTooltip; bool noSessionEdit; bool cleanAllFiles; bool PGPInited; bool resumeAfterSuspending; QString sshPort; QString clientSshPort; QString defaultSshPort; QString resourceDir; QString resourceURL; QDir* resourceTmpDir; QList resReply; #ifdef Q_OS_WIN QString sshLog; #endif QVBoxLayout* selectSesDlgLayout; SshMasterConnection* sshConnection; QList serverSshConnections; bool closeEventSent; int shadowMode; QString shadowUser; QString shadowDisplay; QString defaultPack; QStringList defaultLayout; QString selectedLayout; QString defaultKbdType; QString defaultClipboardMode; QString defaultCmd; bool defaultSetDPI; uint defaultDPI; QStringList listedSessions; QString appDir; QString localGraphicPort; static QString homeDir; int retSessions; QList x2goServers; QList applications; QList cmdSshKeys; bool forceToShowTrayicon; //true if --tray-icon passed in command line QPushButton* bSusp; QPushButton* bTerm; QPushButton* bNew; QPushButton* bShadow; QPushButton* bShadowView; QPushButton* bCancel; QPushButton *bBrokerLogout; QLabel* selectSessionLabel; QLabel* running_label; SessTreeView* sessTv; QLineEdit* desktopFilter; QCheckBox* desktopFilterCb; SessionExplorer* sessionExplorer; IMGFrame* fr; SVGFrame *bgFrame; SVGFrame *on; QLineEdit* uname; ClickLineEdit* pass; ClickLineEdit* login; QFrame* uframe; SVGFrame *passForm; QSize mwSize; bool mwMax; QPoint mwPos; SVGFrame *selectSessionDlg; SVGFrame *sessionStatusDlg; QLabel* u; QLabel* fotoLabel; QLabel* nameLabel; QLabel* passPrompt; QLabel* loginPrompt; QLabel* layoutPrompt; QLabel* slName; QLabel* slVal; QComboBox* cbLayout; QPushButton* ok; QPushButton* cancel; QString readExportsFrom; QString readLoginsFrom; QPushButton* sOk; QToolButton* sbSusp; QToolButton* sbExp; QToolButton* sbTerm; QToolButton* sbApps; QCheckBox* sbAdv; QPushButton* sCancel; QString resolution; QString kdeIconsPath; QScrollArea* users; QVBoxLayout* userl; QHBoxLayout* mainL; QHBoxLayout* bgLay; QList names; UserButton* lastUser; QString prevText; QString onserver; QString id; QString selectedCommand; QString currentKey; QTimer *exportTimer; QTimer *extTimer; QTimer *spoolTimer; QTimer *proxyWinTimer; QTimer *xineramaTimer; QTimer *brokerAliveTimer; QTimer *brokerSyncTimer; short xinSizeInc; QRect lastDisplayGeometry; QList xineramaScreens; QStyle* widgetExtraStyle; bool isPassShown; bool xmodExecuted; long proxyWinId; bool embedControlChanged; bool embedTbVisible; QLabel* statusLabel; ConfigFile config; QStandardItemModel* model; QStandardItemModel* modelDesktop; QAction *act_set; QAction *act_abclient; QAction *act_support; QAction *act_shareFolder; QAction *act_showApps; QAction *act_suspend; QAction *act_terminate; QAction *act_reconnect; QAction *act_embedContol; QAction *act_embedToolBar; QAction *act_changeBrokerPass; QAction *act_testCon; QList topActions; QToolBar *stb; QString sessionStatus; QString spoolDir; QString sessionRes; QHBoxLayout* username; QList userList; QList exportDir; QString nick; QString nfsPort; QString mntPort; static QString sessionCfg; QProcess* ssh; QProcess* soundServer; QProcess* scDaemon; QProcess* gpg; LDAPSession* ld; long embedParent; long embedChild; bool proxyWinEmbedded; bool useLdap; bool showToolBar; bool showHaltBtn; bool showBrokerLogoutBtn; bool newSession; bool runStartApp; bool ldapOnly; #ifdef Q_OS_LINUX bool directRDP; #endif bool startSessSound; int startSessSndSystem; bool fsInTun; bool fsTunReady; QString fsExportKey; bool fsExportKeyReady; QString ldapServer; int ldapPort; QString ldapServer1; int ldapPort1; QString ldapServer2; int ldapPort2; QString ldapDn; QString sessionCmd; QString supportMenuFile; QString BGFile; QString OnFile; QString SPixFile; QString LDAPSndSys; QString LDAPSndPort; bool LDAPSndStartServer; bool LDAPPrintSupport; QAction *act_edit; QAction *act_new; QAction *act_sessicon; QProcess *nxproxy; int proxyWinWidth; int proxyWinHeight; #ifndef Q_OS_WIN QProcess *sshd; #else QProcess *xorg; PROCESS_INFORMATION sshd; bool winSshdStarted; static QString u3Device; int xDisplay; int sshdPort; bool winServersReady; QString oldEtcDir; QString oldBinDir; QString oldTmpDir; bool cyEntry; bool maximizeProxyWin; QTimer* xorgLogTimer; QString xorgLogFile; QMutex xorgLogMutex; #endif QString lastFreeServer; QString cardLogin; QTextEdit* stInfo; int localDisplayNumber; #if defined (Q_OS_DARWIN) || defined (Q_OS_WIN) QThread *pulseManagerThread; PulseManager *pulseManager; bool systemDisablePARecord; bool systemDisablePA; #endif /* defined (Q_OS_DARWIN) || defined (Q_OS_WIN) */ SVGFrame* ln; int tunnel; int sndTunnel; int fsTunnel; QList selectedSessions; QStringList selectedDesktops; x2goSession resumingSession; bool startSound; bool restartResume; bool runRemoteCommand; bool shadowSession; int firstUid; int lastUid; bool cardReady; HttpBrokerClient* broker; client_events lastBrokerEvent; QString lastBrokerEventSession; #if defined ( Q_OS_WIN) //&& defined (CFGCLIENT ) void xorgSettings(); bool startXorgOnStart; bool useInternalX; enum {VCXSRV, XMING} internalX; QString xorgExe; QString xorgOptions; QString xorgWinOptions; QString xorgFSOptions; QString xorgSAppOptions; QString xorgMDOptions; enum {WIN,FS,SAPP,MULTIDISPLAY} xorgMode; QString xorgWidth; QString xorgHeight; int waitingForX; std::size_t x_start_tries_; std::size_t x_start_limit_; QRect dispGeometry; #endif #ifdef Q_OS_LINUX long image, shape; #endif // Tray icon stuff based on patch from Joachim Langenbach QSystemTrayIcon *trayIcon; QMenu *trayIconMenu; QMenu *trayIconActiveConnectionMenu; QAction* appSeparator; QMenu* appMenu[Application::OTHER+1]; bool trayEnabled; bool trayMinToTray; bool trayNoclose; bool trayMinCon; bool trayMaxDiscon; bool trayAutoHidden; bool resourcesLoaded; QNetworkAccessManager* resourceLoader; //server connection type // DEFAULT - start X2GO session // SUSPEND - open connection to suspend broker session // TERMINATE - open connection to terminate broker session typedef enum {DEFAULT, SUSPEND, TERMINATE} CONTYPE; CONTYPE connectionType; QString suspendTerminateHostFromBroker; QString suspendTerminateSessionFromBroker; void initUI(); void initSplash(); void destroySplash(); void sendEventToBroker(client_events ev); void suspendFromBroker(const QString& sid); void terminateFromBroker(const QString& sid); QString findSshKeyForServer(QString user, QString server, QString port); void loadSettings(); void showPass ( UserButton* user ); void clean(); bool defaultSession; QString defaultSessionName; QString defaultSessionId; QString defaultUserName; bool defaultUser; QString getKdeIconsPath(); QString findTheme ( QString theme ); bool initLdapSession ( bool showBox=true ); bool startSession ( const QString& id, CONTYPE conType=DEFAULT); x2goSession getSessionFromString ( const QString& string ); void resumeSession ( const x2goSession& s ); void selectSession ( QStringList& sessions ); x2goSession getSelectedSession(); bool parseParameter ( QString param ); bool linkParameter ( QString value ); bool clipboardParameter ( QString value ); bool geometry_par ( QString value ); bool setKbd_par ( QString value ); bool ldapParameter ( QString value ); bool ldap1Parameter ( QString value ); bool ldap2Parameter ( QString value ); bool packParameter ( QString value ); bool soundParameter ( QString val ); void printError ( QString param ); void exportDefaultDirs(); directory* getExpDir ( QString key ); bool findInList ( const QString& uid ); void setUsersEnabled ( bool enable ); void externalLogout ( const QString& logoutDir ); void externalLogin ( const QString& loginDir ); void startGPG(); void GPGCardLogin ( const QString& cardLogin); void closeClient(); void continueNormalSession(); void continueLDAPSession(); SshMasterConnection* startSshConnection ( QString host, QString port, bool acceptUnknownHosts, QString login, QString password, bool autologin, bool krbLogin, bool getSrv=false, bool useproxy=false, SshMasterConnection::ProxyType type=SshMasterConnection::PROXYSSH, QString proxyserver=QString::null, quint16 proxyport=0, QString proxylogin=QString::null, QString proxypassword=QString::null, QString proxyKey=QString::null, bool proxyAutologin=false, bool proxyKrbLogin=false ); void setProxyWinTitle(); QRect proxyWinGeometry(); void readApplications(); void removeAppsFromTray(); void plugAppsInTray(); QMenu* initTrayAppMenu(QString text, QPixmap icon); void setTrayIconToSessionIcon(QString info); /* * Tries to get the most suitable translator for the running system. * * The first parameter file_name_start denotes the start of a potential * translation file name. Locale values will be appended to this. * * On Qt 4.7 and lower, only tries to fetch a translator for the * main language as returned by QLocale::system(). * On Qt 4.8 and higher, tries to fetch the first available translator * for the list returned by QLocale::uiLanguages(). * * If no translator is available OR the best available translator * is for an English locale, returns false and doesn't touch * the passed translator object. * Otherwise returns true and sets the translator object to loaded * translation. */ static bool get_translator (const QString file_name_start, QTranslator **translator); void getClientKeyboardConfig(QString& layout, QString& model, QString& variant); protected: virtual void closeEvent ( QCloseEvent* event ); virtual void hideEvent ( QHideEvent* event); #ifndef Q_OS_WIN virtual void mouseReleaseEvent ( QMouseEvent * event ); #else private slots: void slotSetWinServersReady(); void startWinServers(key_types key_type = RSA_KEY_TYPE); void slotCheckXOrgLog(); void slotCheckXOrgConnection(); #endif #if defined (Q_OS_DARWIN) || defined (Q_OS_WIN) private slots: void pulseManagerWrapper (); #endif /* defined (Q_OS_DARWIN) || defined (Q_OS_WIN) */ private slots: void slotAppDialog(); void slotShowPassForm(); void displayUsers(); void slotAppMenuTriggered ( QAction * action ); void slotPassChanged(const QString& result); void slotResize ( const QSize sz ); void slotUnameChanged ( const QString& text ); void slotPassEnter(); void slotChangeBrokerPass(); void slotTestConnection(); void slotCheckPortableDir(); void readUsers(); void slotSelectedFromList ( UserButton* user ); void slotUnameEntered(); void slotReadSessions(); void slotManage(); void displayToolBar ( bool ); void showSessionStatus(); void slotSshConnectionError ( QString message, QString lastSessionError ); void slotSshServerAuthError ( int error, QString sshMessage, SshMasterConnection* connection ); void slotSshServerAuthPassphrase ( SshMasterConnection* connection, SshMasterConnection::passphrase_types passphrase_type ); void slotSshInteractionStart ( SshMasterConnection* connection, QString prompt ); void slotSshInteractionUpdate ( SshMasterConnection* connection, QString output ); void slotSshInteractionFinish ( SshMasterConnection* connection); void slotSshServerAuthChallengeResponse( SshMasterConnection* connection, QString Challenge ); void slotCloseInteractionDialog(); void slotSshUserAuthError ( QString error ); void slotSshConnectionOk(); void slotServSshConnectionOk(QString server); void slotChangeKbdLayout(const QString& layout); void slotSyncX(); void slotShutdownThinClient(); void slotBrokerLogoutButton (); void slotReadApplications(bool result, QString output, int pid ); void slotResLoadRequestFinished( QNetworkReply* reply ); void setProxyWinNotResizable(); public slots: void slotConfig(); void slotNewSession(); void slotEmbedControlAction(); void slotDetachProxyWindow(); void slotActivateWindow(); void setFocus(); void slotEnableBrokerLogoutButton (); void slotClosePass(); void slotCloseSelectDlg(); private slots: void slotSendBrokerAlive(); void slotShowPAMSGDialog(bool error, const QString& main_text, const QString& info_text, bool modal); void slotSnameChanged ( const QString& ); void slotSelectedFromList ( SessionButton* session ); void slotSessEnter(); void slotActivated ( const QModelIndex& index ); void slotResumeSess(); void slotSuspendSess(); void slotTermSessFromSt(); void slotSuspendSessFromSt(); void slotTermSess(); void slotNewSess(); void slotGetBrokerAuth(); void slotGetBrokerSession(); void slotCmdMessage ( bool result,QString output, int ); void slotListSessions ( bool result,QString output, int ); void slotRetSuspSess ( bool value,QString message, int ); void slotRetTermSess ( bool result,QString output, int ); void slotRetResumeSess ( bool result,QString output, int ); void slotTunnelFailed ( bool result,QString output, int ); void slotFsTunnelFailed ( bool result,QString output, int ); void slotSndTunnelFailed ( bool result,QString output, int ); void slotCopyKey ( bool result,QString output,int ); void slotTunnelOk(int = 0); void slotFsTunnelOk(int ); void slotProxyError ( QProcess::ProcessError err ); void slotProxyFinished ( int result,QProcess::ExitStatus st ); void slotProxyStderr(); void slotProxyStdout(); void slotResumeDoubleClick ( const QModelIndex& ); void slotShowAdvancedStat(); void slotRestartProxy(); void slotTestSessionStatus(); void SlotRunCommand(bool, QString output, int); void slotRetRunCommand ( bool result, QString output, int ); void slotGetServers ( bool result, QString output, int ); void slotListAllSessions ( bool result,QString output, int ); void slotRetExportDir ( bool result,QString output, int ); void slotResize(); void slotExportDirectory(); void slotExportTimer(); void slotAboutQt(); void slotAbout(); void slotSupport(); //trayIcon stuff void trayIconActivated(QSystemTrayIcon::ActivationReason reason); void trayMessageClicked(); void trayQuit(); void trayIconInit(); private slots: void slotSetProxyWinFullscreen(); void slotCheckPrintSpool(); void slotRereadUsers(); void slotExtTimer(); void slotStartPGPAuth(); void slotScDaemonStdOut(); void slotScDaemonStdErr(); void slotGpgFinished ( int exitCode, QProcess::ExitStatus exitStatus ); void slotScDaemonFinished ( int exitCode, QProcess::ExitStatus exitStatus ); void slotScDaemonError (QProcess::ProcessError error); void slotGpgError(); void slotExecXmodmap(); void slotCreateSessionIcon(); void slotFindProxyWin(); void slotConfigXinerama(); void slotXineramaConfigured(); void slotAttachProxyWindow(); void slotEmbedIntoParentWindow(); void slotEmbedWindow(); void slotPCookieReady ( bool result,QString output, int proc ); void slotEmbedToolBar(); void slotEmbedToolBarToolTip(); void slotHideEmbedToolBarToolTip(); void slotDesktopFilterChanged ( const QString& text ) ; void slotDesktopFilterCb ( int state ) ; void slotShadowViewSess(); void slotShadowSess(); void slotReconnectSession(); void slotStartBroker(); void slotStartNewBrokerSession (); void slotInitLibssh (); #ifdef Q_OS_DARWIN void slotSetModMap(); void handle_xmodmap_error (QProcess &proc); private: QTimer* modMapTimer; QString kbMap; #endif private: void resizeProxyWinOnDisplay(int display); #ifdef Q_OS_LINUX long X11FindWindow ( QString text, long rootWin=0 ); #endif void addToAppNames ( QString intName, QString transName ); bool checkAgentProcess(); bool isColorDepthOk ( int disp, int sess ); void check_cmd_status(); int startSshFsTunnel(); void startX2goMount(); void cleanPrintSpool(); void cleanAskPass(); void initWidgetsEmbed(); void initWidgetsNormal(); QString getCurrentUname(); QString getCurrentPass(); void processSessionConfig(); void processCfgLine ( QString line ); void initSelectSessDlg(); void initStatusDlg(); void initPassDlg(); void printSshDError_startupFailure(); void printSshDError_noHostPubKey(); void printSshDError_noExportPubKey(); void printSshDError_noAuthorizedKeysFile(); void loadPulseModuleNativeProtocol(); void initEmbedToolBar(); #ifdef Q_OS_LINUX void startDirectRDP(); #endif void filterDesktops ( const QString& filter, bool strict=false ); void generateEtcFiles(); QString u3DataPath(); void cleanPortable(); void removeDir ( QString path ); #ifdef Q_OS_WIN void saveCygnusSettings(); void restoreCygnusSettings(); #endif #if defined (Q_OS_WIN) || defined (Q_OS_DARWIN) QString getXDisplay(); #endif key_types check_key_type (key_types key_type); QString key_type_to_string (key_types key_type); std::size_t default_size_for_key_type (key_types key_type); QString generateKey (key_types key_type, bool host_key = false); QString createKeyBundle (key_types key_type = RSA_KEY_TYPE); }; #ifdef Q_OS_WIN #include #include class ONMainWindow; class WinServerStarter: public QThread { public: enum daemon {X,SSH}; WinServerStarter ( daemon server, ONMainWindow * par ); void run(); void set_ssh_key_type (ONMainWindow::key_types key_type); ONMainWindow::key_types get_ssh_key_type (); private: daemon mode; ONMainWindow* parent; ONMainWindow::key_types ssh_key_type_; }; #endif #endif x2goclient-4.1.2.3/src/onmainwindow_privat.h0000644000000000000000000001015214447111614015663 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef ONMAINWINDOWPRIVAT_H #define ONMAINWINDOWPRIVAT_H #include #include #include #include #include "version.h" #include "x2goclientconfig.h" #include "x2goutils.h" #include "onmainwindow.h" #include "userbutton.h" #include "exportdialog.h" #include "printprocess.h" #include "helpdialog.h" #include "appdialog.h" #include "InteractionDialog.h" #include #include #include #include #include #include #include #include "httpbrokerclient.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "x2gosettings.h" #include #include #include #include #include #include #include #include #include #include #include #include #if QT_VERSION < 0x050000 #include #else #include #include #endif #include "imgframe.h" #include #include "clicklineedit.h" #include #include "brokerpassdlg.h" #include "sshmasterconnection.h" #include "contest.h" #if !defined Q_OS_WIN #include #ifdef Q_OS_LINUX #include #include #include #endif // Q_OS_LINUX #endif // !defined Q_OS_WIN #include #include #include #include #include #define ldap_SUCCESS 0 #define ldap_INITERROR 1 #define ldap_OPTERROR 2 #define ldap_BINDERROR 3 #define ldap_SEARCHERROR 4 #define ldap_NOBASE 5 //LDAP attributes #define SESSIONID "sn" #define USERNAME "cn" #define CLIENT "registeredAddress" #define SERVER "postalAddress" #define RES "title" #define DISPLAY "street" #define STATUS "st" #define STARTTIME "telephoneNumber" #define CREATTIME "telexNumber" #define SUSPTIME "internationaliSDNNumber" #define SESSIONCMD "o" #define FIRSTUID "ou" #define LASTUID "l" #define SNDSUPPORT "sn" #define NETSOUNDSYSTEM "o" #define SNDSUPPORT "sn" #define SNDPORT "ou" #define STARTSNDSERVER "title" #include #include "SVGFrame.h" #include "configdialog.h" #include "editconnectiondialog.h" #include "sessionbutton.h" #include "folderbutton.h" #include "sessionexplorer.h" #include "sessionmanagedialog.h" #include "x2gologdebug.h" #include #ifdef Q_OS_WIN #include "wapi.h" #include #endif #ifdef Q_OS_LINUX #if QT_VERSION < 0x050000 #include #else #include #endif #include #include #endif #endif //ONMAINWINDOWPRIVAT_H x2goclient-4.1.2.3/src/printdialog.cpp0000644000000000000000000000524614447111614014444 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include "printdialog.h" #include #include "printwidget.h" #include #include "x2gologdebug.h" #include PrintDialog::PrintDialog ( QWidget* parent, Qt::WindowFlags f ) : QDialog ( parent,f ) { x2goDebug<<"Starting print dialog."<button ( QDialogButtonBox::Ok )->setText ( tr ( "Print" ) ); pwidg=new PrintWidget ( this ); ( ( QVBoxLayout* ) ( layout() ) )->insertWidget ( 0,pwidg ); //x2goclient can stay under the nxagent window //we must start it as toplevel window and be shure //that x2goclient window will not be activated //so we must start print dialog as window setWindowFlags ( Qt::Window|Qt::WindowStaysOnTopHint ); connect ( pwidg,SIGNAL ( dialogShowEnabled ( bool ) ), this,SLOT ( slot_dlgShowEnabled ( bool ) ) ); } PrintDialog::~PrintDialog() { x2goDebug<<"Closing print dialog."<saveSettings(); QDialog::accept(); } void PrintDialog::slot_dlgShowEnabled ( bool enable ) { if ( !enable ) QMessageBox::warning ( this, tr ( "You've deactivated the X2Go " "Client printing dialog." ), tr ( "You may reactivate this dialog " "using the X2Go Client settings " "dialog. To do so, follow this path " "in the menu bar: Options -> " "Settings" ) ); } x2goclient-4.1.2.3/src/printdialog.h0000644000000000000000000000322514447111614014104 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef PRINTDIALOG_H #define PRINTDIALOG_H #include #include "ui_printdialog.h" /** @author Oleksandr Shneyder */ class PrintWidget; class PrintDialog : public QDialog { Q_OBJECT public: PrintDialog ( QWidget* par=0, Qt::WindowFlags f = 0 ); ~PrintDialog(); private: Ui::PrintDialog ui; PrintWidget* pwidg; public slots: void accept(); private slots: void slot_dlgShowEnabled(bool); }; #endif x2goclient-4.1.2.3/src/printercmddialog.cpp0000644000000000000000000000472114447111614015454 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include "printercmddialog.h" #include "x2goclientconfig.h" #ifdef Q_OS_WIN #include "printwidget.h" #endif PrinterCmdDialog::PrinterCmdDialog ( QString* cmd, bool* stdinpr, bool* ps, QWidget* parent ) : QDialog ( parent ) { ui.setupUi ( this ); printCmd=cmd; printStdIn=stdinpr; printPs=ps; ui.leCmd->setText ( *printCmd ); if ( *printStdIn ) ui.rbStdIn->setChecked ( true ); else ui.rbParam->setChecked ( true ); if ( *printPs ) ui.rbPS->setChecked ( true ); else ui.rbPDF->setChecked ( true ); connect ( ui.buttonBox, SIGNAL ( accepted() ),this,SLOT ( slot_ok() ) ); #ifdef Q_OS_WIN QString txt=tr ( "Please enter your customized or" " individual printing command.\n" "Example:\n"); QString ver,path; if(PrintWidget::gsViewInfo(ver,path)) txt+=path+" -query -color"; else txt+=tr(" -query -color"); ui.label->setText (txt); if(!PrintWidget::gsInfo(ver,path)) { ui.rbPDF->setChecked ( true ); ui.rbPS->setEnabled(false); } #endif } PrinterCmdDialog::~PrinterCmdDialog() { } void PrinterCmdDialog::slot_ok() { *printCmd=ui.leCmd->text(); *printPs=ui.rbPS->isChecked(); *printStdIn=ui.rbStdIn->isChecked(); accept(); } x2goclient-4.1.2.3/src/printercmddialog.h0000644000000000000000000000330214447111614015113 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef PRINTERCMDDIALOG_H #define PRINTERCMDDIALOG_H #include #include "ui_printercmddialog.h" /** @author Oleksandr Shneyder */ class PrinterCmdDialog : public QDialog { Q_OBJECT public: PrinterCmdDialog ( QString* cmd, bool* stdinpr, bool* ps, QWidget* parent=0l ); ~PrinterCmdDialog(); private: Ui::PrinterCmdDialog ui; bool* printStdIn; bool* printPs; QString* printCmd; private slots: void slot_ok(); }; #endif x2goclient-4.1.2.3/src/printprocess.cpp0000644000000000000000000001715714447111614014667 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include "x2goclientconfig.h" #include "printprocess.h" #include "x2gologdebug.h" #include #include "x2gosettings.h" #include #include "printdialog.h" #if (!defined Q_OS_WIN) #include "cupsprint.h" #else #include "printwidget.h" #endif #include #include #include #include "x2gologdebug.h" #ifdef Q_OS_WIN #include "wapi.h" #endif #include PrintProcess::PrintProcess ( QString pdf, QString title, QObject *parent ) : QObject ( parent ) { x2goDebug<<"Starting print process."; pdfFile=pdf; pdfTitle=title; parentWidg= ( QWidget* ) parent; if ( !loadSettings() ) { QFile::remove ( pdfFile ); return; } if ( viewPdf ) { x2goDebug<<"Opening PDF file: "<setStandardInputFile ( psFile ); connect ( proc,SIGNAL ( error ( QProcess::ProcessError ) ), this,SLOT ( slot_error ( QProcess::ProcessError ) ) ); proc->start ( printCmd ); } } else slot_pdf2psError ( QProcess::Crashed ); } bool PrintProcess::loadSettings() { X2goSettings st ( "printing" ); if ( st.setting()->value ( "showdialog",true ).toBool() ) { PrintDialog dlg; if ( dlg.exec() ==QDialog::Rejected ) return false; } viewPdf=st.setting()->value ( "pdfview",false ).toBool(); customPrintCmd=st.setting()->value ( "print/startcmd",false ).toBool(); printCmd=st.setting()->value ( "print/command","lpr" ).toString(); printStdIn= st.setting()->value ( "print/stdin",false ).toBool(); printPs=st.setting()->value ( "print/ps",false ).toBool(); pdfOpen= st.setting()->value ( "view/open",true ).toBool(); #ifndef Q_OS_WIN pdfOpenCmd=st.setting()->value ( "view/command","xpdf" ).toString(); #else winX2goPrinter= st.setting()->value ( "print/defaultprinter", wapiGetDefaultPrinter() ).toString(); #endif return true; } void PrintProcess::openPdf() { x2goDebug<<"Opening/saving PDF ..."; if ( pdfOpen ) { #ifndef Q_OS_WIN QString cmd=pdfOpenCmd+" \""+pdfFile+"\""; x2goDebug<<"Using PDF viewer command: "<0 ) QFile::rename ( pdfFile,fileName ); } } void PrintProcess::print() { if ( !customPrintCmd ) { #ifndef Q_OS_WIN CUPSPrint prn; prn.setCurrentPrinter ( prn.getDefaultUserPrinter() ); prn.print ( pdfFile, pdfTitle ); #else x2goDebug<<"Printing to "<setStandardInputFile ( pdfFile ); connect ( proc,SIGNAL ( error ( QProcess::ProcessError ) ), this,SLOT ( slot_error ( QProcess::ProcessError ) ) ); proc->start ( printCmd ); } } else { QStringList args; psFile=pdfFile; psFile.replace ( "pdf","ps" ); args<start ( "pdf2ps",args ); #else QString pdf2ps,ver; PrintWidget::gsInfo ( ver,pdf2ps ); QString wdir=pdf2ps; wdir.replace ( "pdf2ps.bat","" ); proc->setWorkingDirectory ( wdir ); QStringList env=QProcess::systemEnvironment(); env.replaceInStrings ( QRegExp ( "^PATH=(.*)", Qt::CaseInsensitive ), "PATH=\\1;"+wdir ); wdir.replace ( "\\lib\\","\\bin\\" ); env.replaceInStrings ( QRegExp ( "^PATH=(.*)", Qt::CaseInsensitive ), "PATH=\\1;"+wdir ); proc->setEnvironment ( env ); proc->start ( pdf2ps,args ); #endif } } } void PrintProcess::slot_error ( QProcess::ProcessError ) { QString message=tr ( "Failed to execute command:\n" ); if ( viewPdf ) message+=" "+pdfOpenCmd+ " " +pdfFile; else { message+=printCmd; if ( !printStdIn ) { message+=" "; if ( printPs ) message+=psFile; else message+=pdfFile; } } QMessageBox::critical ( 0l, tr ( "Printing error." ), message ); } void PrintProcess::slot_pdf2psError ( QProcess::ProcessError ) { QMessageBox::critical ( 0l, tr ( "Printing error." ), tr ( "Failed to execute command:\n" ) + "pdf2ps "+pdfFile+" "+psFile ); } x2goclient-4.1.2.3/src/printprocess.h0000644000000000000000000000417714447111614014332 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef PRINTPROCESS_H #define PRINTPROCESS_H #include #include #include /** @author Oleksandr Shneyder */ class PrintProcess: public QObject { Q_OBJECT public: PrintProcess ( QString pdf, QString title, QObject * parent=0l ); ~PrintProcess(); private: QString pdfFile; QString pdfTitle; QString psFile; bool viewPdf; bool customPrintCmd; bool printStdIn; bool printPs; bool pdfOpen; QString pdfOpenCmd; QWidget* parentWidg; QString printCmd; #ifdef Q_OS_WIN QString winX2goPrinter; QString winDefaultPrinter; #endif private: bool loadSettings(); private slots: void slot_processFinished ( int exitCode, QProcess::ExitStatus exitStatus ); void slot_pdf2psError ( QProcess::ProcessError error ) ; void slot_error ( QProcess::ProcessError error ); void openPdf(); void print(); }; #endif x2goclient-4.1.2.3/src/printwidget.cpp0000644000000000000000000001700714447111614014466 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include "printwidget.h" #if (!defined Q_OS_WIN) #include "cupsprintwidget.h" #endif #include "printercmddialog.h" #include "x2gosettings.h" #include "x2gologdebug.h" #include #include #ifdef Q_OS_WIN #include "wapi.h" #endif PrintWidget::PrintWidget ( QWidget* parent ) : QWidget ( parent ) { ui.setupUi ( this ); ui.rbPrint->setChecked ( true ); ui.gbView->setVisible ( false ); QVBoxLayout* lay= ( QVBoxLayout* ) ui.gbPrint->layout(); #if defined (Q_OS_WIN) connect ( ui.cbPrintCmd,SIGNAL ( toggled ( bool ) ),ui.cbWinPrinter, SLOT ( setDisabled ( bool ) ) ); connect ( ui.cbPrintCmd,SIGNAL ( toggled ( bool ) ),ui.lWinPrinter, SLOT ( setDisabled ( bool ) ) ); connect ( ui.cbPrintCmd,SIGNAL ( toggled ( bool ) ),ui.lWinInfo, SLOT ( setDisabled ( bool ) ) ); printers=wapiGetLocalPrinters(); defaultPrinter=wapiGetDefaultPrinter(); ui.cbWinPrinter->insertItems ( 0,printers ); int index=printers.indexOf ( defaultPrinter ); if ( index!=-1 ) ui.cbWinPrinter->setCurrentIndex ( index ); QLabel *rtfm=new QLabel ( tr ( "Please configure your client side printing settings.

" "If you want to print the created file, you'll need " "an external application. Typically you can use " "" "ghostprint and " "" "ghostview
You can find further information " "here." ), ui.gbPrint ); rtfm->setWordWrap ( true ); rtfm->setOpenExternalLinks ( true ); lay->insertWidget ( 6,rtfm ); #else ui.cbWinPrinter->hide(); ui.lWinPrinter->hide(); ui.lWinInfo->hide(); pwid=new CUPSPrintWidget ( ui.gbPrint ); lay->insertWidget ( 0,pwid ); connect ( ui.cbPrintCmd,SIGNAL ( toggled ( bool ) ),pwid, SLOT ( setDisabled ( bool ) ) ); #endif connect ( ui.pbPrintCmd,SIGNAL ( clicked() ),this, SLOT ( slot_editPrintCmd() ) ); QButtonGroup* bg=new QButtonGroup(); bg->addButton ( ui.rbPrint ); bg->addButton ( ui.rbView ); loadSettings(); connect ( ui.cbShowDialog,SIGNAL ( toggled ( bool ) ), this, SIGNAL ( dialogShowEnabled ( bool ) ) ); #if (defined Q_OS_WIN) ui.label->hide(); ui.leOpenCmd->hide(); #endif } PrintWidget::~PrintWidget() { } void PrintWidget::slot_editPrintCmd() { QString printCmd=ui.lePrintCmd->text(); PrinterCmdDialog dlg ( &printCmd,&printStdIn,&printPs, this ); dlg.exec(); ui.lePrintCmd->setText ( printCmd ); } void PrintWidget::loadSettings() { X2goSettings st ( "printing" ); bool pdfView=st.setting()->value ( "pdfview",false ).toBool(); QString prcmd= st.setting()->value ( "print/command","" ).toString(); #ifdef Q_OS_WIN defaultPrinter= st.setting()->value ( "print/defaultprinter",defaultPrinter ).toString(); int index=printers.indexOf ( defaultPrinter ); if ( index!=-1 ) ui.cbWinPrinter->setCurrentIndex ( index ); QString ver,gspath,gsvpath; bool isGsInstalled=gsInfo ( ver,gspath ); bool isGsViewInstalled=gsViewInfo ( ver,gsvpath ); if ( prcmd=="" && ! ( isGsInstalled && isGsViewInstalled ) ) { // x2goDebug<<"fallback to view"<setChecked ( st.setting()->value ( "showdialog",true ).toBool() ); if ( pdfView ) ui.rbView->setChecked ( true ); else ui.rbPrint->setChecked ( true ); ui.cbPrintCmd->setChecked ( st.setting()->value ( "print/startcmd", false ).toBool() ); #ifndef Q_OS_WIN if ( prcmd=="" ) prcmd="lpr"; #endif ui.lePrintCmd->setText ( prcmd ); printStdIn= st.setting()->value ( "print/stdin",false ).toBool(); printPs=st.setting()->value ( "print/ps",false ).toBool(); #ifdef Q_OS_WIN printPs=printPs&&isGsInstalled; #endif if ( ( st.setting()->value ( "view/open",true ).toBool() ) ) ui.rbOpen->setChecked ( true ); else ui.rbSave->setChecked ( true ); ui.leOpenCmd->setText ( st.setting()->value ( "view/command","xpdf" ).toString() ); } void PrintWidget::saveSettings() { X2goSettings st ( "printing" ); st.setting()->setValue ( "showdialog", QVariant ( ui.cbShowDialog->isChecked () ) ); st.setting()->setValue ( "pdfview", QVariant ( ui.rbView->isChecked () ) ); st.setting()->setValue ( "print/startcmd", QVariant ( ui.cbPrintCmd->isChecked ( ) ) ); st.setting()->setValue ( "print/command", QVariant ( ui.lePrintCmd->text () ) ); st.setting()->setValue ( "print/stdin", QVariant ( printStdIn ) ); st.setting()->setValue ( "print/ps", QVariant ( printPs ) ); st.setting()->setValue ( "view/open", QVariant ( ui.rbOpen->isChecked () ) ); st.setting()->setValue ( "view/command", QVariant ( ui.leOpenCmd->text () ) ); #ifdef Q_OS_WIN st.setting()->setValue ( "print/defaultprinter", QVariant ( ui.cbWinPrinter->currentText()) ); #else pwid->savePrinter(); #endif } #ifdef Q_OS_WIN bool PrintWidget::gsInfo ( QString& version, QString& pdf2ps ) { QSettings st ( "HKEY_LOCAL_MACHINE\\" "SOFTWARE\\GPL Ghostscript", QSettings::NativeFormat ); version="0.0"; QStringList keys=st.allKeys(); for ( int i=0;iversion.toFloat() ) { version=v; pdf2ps=libs+"\\pdf2ps.bat"; } } } if ( version.toFloat() >0.0 ) { return true; } return false; } bool PrintWidget::gsViewInfo ( QString& version, QString& gsprint ) { QSettings st ( "HKEY_LOCAL_MACHINE\\" "SOFTWARE\\Ghostgum\\GSview", QSettings::NativeFormat ); version="0.0"; QStringList keys=st.allKeys(); for ( int i=0;iversion.toFloat() ) { version=v; gsprint=libs+"\\gsview\\gsprint.exe"; } } if ( version.toFloat() >0.0 ) { return true; } return false; } #endif //Q_OS_WIN x2goclient-4.1.2.3/src/printwidget.h0000644000000000000000000000373414447111614014135 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef PRINTWIDGET_H #define PRINTWIDGET_H #include "x2goclientconfig.h" #include "ui_printwidget.h" /** @author Oleksandr Shneyder */ class CUPSPrintWidget; class PrintWidget : public QWidget { Q_OBJECT public: PrintWidget ( QWidget* parent=0l ); ~PrintWidget(); void saveSettings(); #ifdef Q_OS_WIN static bool gsInfo ( QString& version, QString& pdf2ps ); static bool gsViewInfo ( QString& version, QString& gsprint ); #endif private: Ui::PrintWidget ui; bool printPs; bool printStdIn; #ifndef Q_OS_WIN CUPSPrintWidget* pwid; #else QStringList printers; QString defaultPrinter; #endif private slots: void slot_editPrintCmd(); private: void loadSettings(); signals: void dialogShowEnabled ( bool ); }; #endif x2goclient-4.1.2.3/src/pulsemanager.cpp0000644000000000000000000007761414447111614014623 0ustar /*************************************************************************** * Copyright (C) 2012-2023 by Mihai Moldovan * * * * This program is free software; you can redistribute 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include #include #include #include #if QT_VERSION >= 0x050000 #include #endif /* QT_VERSION >= 0x050000 */ #include "pulsemanager.h" #include "x2gologdebug.h" #include "x2goutils.h" PulseManager::PulseManager () : app_dir_ (QApplication::applicationDirPath ()), pulse_X2Go_ ("/.x2go/pulse"), server_binary_ (QString ("")), server_working_dir_ (QString ("")), server_args_ (QStringList ()), pulse_server_ (NULL), state_ (QProcess::NotRunning), pulse_port_ (4713), esd_port_ (4714), pulse_version_major_ (0), pulse_version_minor_ (0), pulse_version_micro_ (0), pulse_version_misc_ (""), pulse_version_valid_ (false), record_ (true), playback_ (true), debug_ (false), system_pulse_ (false), shutdown_state_ (false) { pulse_dir_ = QDir (QDir::homePath ()); pulse_dir_.mkpath (pulse_dir_.absolutePath () + pulse_X2Go_ + "/tmp"); pulse_dir_.cd (pulse_X2Go_.mid (1)); env_ = QProcessEnvironment::systemEnvironment (); env_.insert ("HOME", QDir::toNativeSeparators (pulse_dir_.absolutePath ())); env_.insert ("TEMP", QDir::toNativeSeparators (pulse_dir_.absolutePath () + "/tmp")); #ifdef Q_OS_WIN env_.insert ("USERPROFILE", QDir::toNativeSeparators (pulse_dir_.absolutePath ())); env_.insert ("USERNAME", "pulseuser"); #endif // defined (Q_OS_WIN) /* Set server binary and working dir paths. */ #ifdef Q_OS_DARWIN /* Assume bundled PA first. */ server_working_dir_ = QString (app_dir_ + "/../exe/"); server_binary_ = QString (server_working_dir_ + "/pulseaudio"); #if QT_VERSION < 0x050000 QProcessEnvironment tmp_env = QProcessEnvironment::systemEnvironment (); QString path_val = tmp_env.value ("PATH"); QStringList to_front, to_back; to_front << MACPORTS_PREFIX "/bin"; /* MacPorts prefix. */ to_back << "/usr/local/bin"; /* Homebrew or random stuff. Probably even both intermingled... */ path_val = add_to_path (path_val, to_back); path_val = add_to_path (path_val, to_front, false); server_binary_ = find_binary (server_working_dir_, "pulseaudio"); if (server_binary_.isEmpty ()) { server_binary_ = find_binary (path_val, "pulseaudio"); if (!(server_binary_.isEmpty ())) { system_pulse_ = true; } } #else /* QT_VERSION < 0x050000 */ QStringList search_paths; search_paths << server_working_dir_; server_binary_ = QStandardPaths::findExecutable ("pulseaudio", search_paths); if (server_binary_.isEmpty ()) { search_paths = QStringList (); search_paths << MACPORTS_PREFIX "/bin"; /* MacPorts prefix. */ server_binary_ = QStandardPaths::findExecutable ("pulseaudio", search_paths); if (server_binary_.isEmpty ()) { search_paths = QStringList (); server_binary_ = QStandardPaths::findExecutable ("pulseaudio", search_paths); if (server_binary_.isEmpty ()) { search_paths = QStringList (); search_paths << "/usr/local/bin"; /* Homebrew or random stuff. Probably even both intermingled... */ server_binary_ = QStandardPaths::findExecutable ("pulseaudio", search_paths); if (!(server_binary_.isEmpty ())) { system_pulse_ = true; } } else { system_pulse_ = true; } } else { system_pulse_ = true; } } #endif /* QT_VERSION < 0x050000 */ if (!(server_binary_.isEmpty ())) { QFileInfo tmp_file_info = QFileInfo (server_binary_); server_working_dir_ = tmp_file_info.canonicalPath (); x2goDebug << "Found PA binary as " << server_binary_; x2goDebug << "Corresponding working dir: " << server_working_dir_; } #elif defined (Q_OS_WIN) server_working_dir_ = QString (app_dir_ + "/pulse/"); server_binary_ = QString (app_dir_ + "/pulse/pulseaudio.exe"); #elif defined (Q_OS_LINUX) std::ssize_t path_len = pathconf (".", _PC_PATH_MAX); if (-1 == path_len) { path_len = 1024; } char *buf, *ptr; for (buf = ptr = NULL; ptr == NULL; path_len += 20) { if (NULL == (buf = static_cast (realloc (buf, path_len)))) { x2goErrorf (16) << "Could not allocate buffer for getting current working directory!"; emit sig_pulse_user_warning (true, tr ("Could not allocate buffer for getting current working directory!"), QString (), true); abort (); } memset (buf, 0, path_len); ptr = getcwd (buf, path_len); if ((NULL == ptr) && (ERANGE != errno)) { int saved_errno = errno; x2goErrorf (17) << "getcwd() failed: " << QString (strerror (saved_errno)); emit sig_pulse_user_warning (true, tr ("getcwd() failed!"), QString (strerror (saved_errno)), true); abort (); } } server_working_dir_ = QString (buf); server_binary_ = QString ("pulseaudio"); free (buf); buf = ptr = NULL; #endif // defined (Q_OS_DARWIN) if (!(server_binary_.isEmpty ())) { fetch_pulseaudio_version (); } } PulseManager::~PulseManager () { if (pulse_server_ && is_server_running ()) shutdown (); delete (pulse_server_); } void PulseManager::start () { if (is_server_running ()) { return; } delete (pulse_server_); pulse_server_ = new QProcess (0); state_ = QProcess::Starting; // Search for a free Pulse and EsounD port. // Note that there is no way we could find // an esd port, if the pulse port detection // failed. Better trust your compiler to // optimize this statement and save some // cycles. if ((find_port (false)) && (find_port (true))) { #ifdef Q_OS_DARWIN start_osx (); #elif defined (Q_OS_WIN) start_win (); #elif defined (Q_OS_LINUX) start_linux (); #endif // defined (Q_OS_DARWIN) } } void PulseManager::start_generic () { pulse_server_->setProcessEnvironment (env_); pulse_server_->setWorkingDirectory (server_working_dir_); if (!(server_binary_.isEmpty ())) { pulse_server_->start (server_binary_, server_args_); /* * We may wait here, because PulseManager runs in a separate thread. * Otherwise, we'd better use signals and slots to not block the main thread. */ if (pulse_server_->waitForStarted (-1)) { x2goDebug << "pulse started with arguments " << server_args_ << "- waiting for it to finish..."; state_ = QProcess::Running; connect (pulse_server_, SIGNAL (finished (int)), this, SLOT (slot_on_pulse_finished (int))); env_.insert ("PULSE_SERVER", "127.0.0.1:" + QString::number (pulse_port_)); QString clean_pulse_dir = pulse_dir_.absolutePath (); #ifdef Q_OS_WIN clean_pulse_dir = wapiShortFileName (clean_pulse_dir); #endif /* defined (Q_OS_WIN) */ QString tmp_auth_cookie = QDir::toNativeSeparators (clean_pulse_dir + "/.pulse-cookie"); env_.insert ("PULSE_COOKIE", tmp_auth_cookie); if (debug_) { // Give PA a little time to come up. QTimer::singleShot (3000, this, SLOT (slot_play_startup_sound ())); } } else { x2goErrorf (27) << "PulseAudio failed to start! Sound support will not be available."; show_startup_warning (); } } else { x2goErrorf (31) << "PulseAudio not detected on system! Sound support will not be available."; show_startup_warning (); } } void PulseManager::start_osx () { server_args_ = QStringList (); server_args_ << "--exit-idle-time=-1" << "-n" << "-F" << QDir::toNativeSeparators (pulse_dir_.absolutePath () + "/config.pa"); if (!system_pulse_) { if (!(pulse_version_valid_)) { x2goDebug << "PulseAudio version number was not fetched successfully, data is invalid. Continuing anyway."; } server_args_ << "-p" << QDir::toNativeSeparators (QDir (app_dir_ + "/../Frameworks/pulse-" + QString::number (pulse_version_major_) + "." + QString::number (pulse_version_minor_) + "/modules").absolutePath ()); } server_args_ << "--high-priority"; if (debug_) { server_args_ << "--log-level=debug" << "--verbose" << "--log-target=file:" + QDir::toNativeSeparators (pulse_dir_.absolutePath () + "/pulse.log"); } if (generate_server_config () && generate_client_config ()) { cleanup_client_dir (); start_generic (); } } void PulseManager::start_win () { /* * Some code in here is Windows-specific and will lead to compile * failures on other platforms. Make this a stub for everything non-Windows. */ #ifdef Q_OS_WIN server_args_ = QStringList (); if (!(pulse_version_valid_)) { x2goDebug << "PulseAudio version number was not fetched successfully, data is invalid. Continuing anyway."; } server_args_ << "--exit-idle-time=-1" << "-n" << "-F" << QDir::toNativeSeparators (QDir (pulse_dir_.absolutePath () + "/config.pa").absolutePath ()) << "-p" << QDir::toNativeSeparators (QDir (app_dir_ + "/pulse/lib/pulse-" + QString::number (pulse_version_major_) + "." + QString::number (pulse_version_minor_) + "/modules/").absolutePath ()); if (debug_) { server_args_ << "--log-level=debug" << "--verbose" << "--log-target=file:" + QDir::toNativeSeparators (pulse_dir_.absolutePath () + "/pulse.log"); } /* * Fix for x2goclient bug #526. * Works around PulseAudio bug #80772. * Tested with PulseAudio 5.0. * This argument will not cause PulseAudio 0.9.6 or 1.1 (the legacy versions) * to fail to launch. * However, 0.9.6 defaults to normal priority anyway, * and 1.1 ignores it for some reason. * So yes, the fact that 1.1 ignores it would be a bug in x2goclient if we * ever ship 1.1 again. */ if ((QSysInfo::WindowsVersion == QSysInfo::WV_XP) || (QSysInfo::WindowsVersion == QSysInfo::WV_2003)) { x2goDebug << "Windows XP or Server 2003 (R2) detected." << "Setting PulseAudio to \"normal\" CPU priority."; server_args_ << "--high-priority=no"; } if (generate_server_config () && generate_client_config ()) { create_client_dir (); start_generic (); } #endif /* defined (Q_OS_WIN) */ } void PulseManager::start_linux () { /* Do nothing - assumed to be already running. */ } void PulseManager::fetch_pulseaudio_version () { QStringList args (QString ("--version")); QProcess tmp_server (this); /* Start PA with --version argument. */ tmp_server.setWorkingDirectory (server_working_dir_); tmp_server.start (server_binary_, args); bool stop_processing = false; /* Wait until the process exited again. */ if (tmp_server.waitForFinished ()) { /* Read stdout and split it up on newlines. */ QByteArray ba (tmp_server.readAllStandardOutput ()); QString stdout_data (ba.constData ()); QStringList stdout_list (stdout_data.split ("\n")); x2goDebug << "pulseaudio --version returned:" << stdout_data << endl; bool found = false; for (QStringList::const_iterator cit = stdout_list.begin (); (cit != stdout_list.end ()) && (!stop_processing); ++cit) { /* Remove trailing whitespace, mostly carriage returns on Windows. */ QString tmp_str (*cit); tmp_str = tmp_str.trimmed (); QString needle ("pulseaudio "); if (tmp_str.startsWith (needle)) { /* Drop first part. */ tmp_str = tmp_str.mid (needle.size ()); /* We should be at a digit now. */ bool numbers_started[3] = { false, false, false }; bool numbers_finished[3] = { false, false, false }; bool numbers_skip[3] = { false, false, false }; QString tmp_remaining_str = QString (""); QString numbers[3] = { }; for (QString::const_iterator cit = tmp_str.begin (); (cit != tmp_str.end ()) && (!stop_processing); ++cit) { if (!(numbers_finished[0])) { if (((*cit) >= '0') && ((*cit) <= '9')) { numbers[0].append (*cit); numbers_started[0] = true; } else if ((*cit) == '.') { /* First number part complete and more to come, mark as done. */ numbers_finished[0] = true; } else if ((*cit) == '-') { /* First number part complete and no more numbers, mark as done, and... */ numbers_finished[0] = true; /* * Skip all the other numbers (i.e., assume the default value.) * This doesn't make a huge lot of sense for the first number, * but let's make this robust... */ numbers_skip[1] = true; numbers_skip[2] = true; } else { x2goErrorf (21) << "Unexpected character found when parsing version string for major version number: '" << QString (*cit) << "'."; emit sig_pulse_user_warning (true, tr ("Error fetching PulseAudio version number!"), tr ("Unexpected character found when parsing version string for major version number") + ": '" + QString (*cit) + "'.", true); stop_processing = true; } } else if ((!(numbers_finished[1])) && (!(numbers_skip[1]))) { if (((*cit) >= '0') && ((*cit) <= '9')) { numbers[1].append (*cit); numbers_started[1] = true; } else if ((*cit) == '.') { /* Second number part complete and more to come, mark as done. */ numbers_finished[1] = true; } else if ((*cit) == '-') { /* Second number part complete and no more numbers, mark as done, and... */ numbers_finished[1] = true; /* Skip all the other numbers (i.e., assume the default value.) */ numbers_skip[2] = true; } else { x2goErrorf (23) << "Unexpected character found when parsing version string for minor version number: '" << QString (*cit) << "'."; emit sig_pulse_user_warning (true, tr ("Error fetching PulseAudio version number!"), tr ("Unexpected character found when parsing version string for minor version number") + ": '" + QString (*cit) + "'.", true); stop_processing = true; } } else if ((!(numbers_finished[2])) && (!(numbers_skip[2]))) { if (((*cit) >= '0') && ((*cit) <= '9')) { numbers[2].append (*cit); numbers_started[2] = true; } else if ((*cit) == '-') { /* Third number part complete and no more numbers, mark as done. */ numbers_finished[2] = true; } else { x2goErrorf (25) << "Unexpected character found when parsing version string for micro version number: '" << QString (*cit) << "'."; emit sig_pulse_user_warning (true, tr ("Error fetching PulseAudio version number!"), tr ("Unexpected character found when parsing version string for micro version number") + ": '" + QString (*cit) + "'.", true); stop_processing = true; } } else { /* Numbers should be good by now, let's fetch everything else. */ tmp_remaining_str.append (*cit); } } if (numbers_skip[0]) { x2goErrorf (30) << "Supposed to skip major version number. Something is wrong."; emit sig_pulse_user_warning (true, tr ("Error fetching PulseAudio version number!"), tr ("Supposed to skip major version number. " "Something is wrong."), true); stop_processing = true; } /* not skipping and ((met period or dash) or (have something to convert and met EOL)) */ if ((!numbers_skip[0]) && ((numbers_finished[0]) || (numbers_started[0]))) { bool convert_success = false; pulse_version_major_ = numbers[0].toUInt (&convert_success, 10); if (!convert_success) { x2goErrorf (20) << "Unable to convert major version number string to integer."; emit sig_pulse_user_warning (true, tr ("Error fetching PulseAudio version number!"), tr ("Unable to convert major version number string to integer."), true); stop_processing = true; } else { /* First number is enough to satisfy the "found" criterion. */ found = true; } } /* not skipping and ((met period or dash) or (have something to convert and met EOL)) */ if ((!numbers_skip[1]) && ((numbers_finished[1]) || (numbers_started[1]))) { bool convert_success = false; pulse_version_minor_ = numbers[1].toUInt (&convert_success, 10); if (!convert_success) { x2goErrorf (22) << "Unable to convert minor version number string to integer."; emit sig_pulse_user_warning (true, tr ("Error fetching PulseAudio version number!"), tr ("Unable to convert minor version number string to integer."), true); stop_processing = true; } } /* not skipping and ((met period or dash) or (have something to convert and met EOL)) */ if ((!numbers_skip[2]) && ((numbers_finished[2]) || (numbers_started[2]))) { bool convert_success = false; pulse_version_micro_ = numbers[2].toUInt (&convert_success, 10); if (!convert_success) { x2goErrorf (24) << "Unable to convert micro version number string to integer."; emit sig_pulse_user_warning (true, tr ("Error fetching PulseAudio version number!"), tr ("Unable to convert micro version number string to integer."), true); stop_processing = true; } } /* Misc version part will be set to the trailing string. */ if (found) { pulse_version_misc_ = tmp_remaining_str; pulse_version_valid_ = true; stop_processing = true; break; } } else { /* No need to look any further. */ continue; } } if (!found) { x2goErrorf (19) << "Unable to fetch PulseAudio version - unexpected format."; emit sig_pulse_user_warning (true, tr ("Error fetching PulseAudio version number!"), tr ("Unexpected format encountered."), true); } } else { x2goErrorf (18) << "Unable to start PulseAudio to fetch its version number."; emit sig_pulse_user_warning (true, tr ("Error fetching PulseAudio version number!"), tr ("Unable to start PulseAudio binary."), true); } } bool PulseManager::find_port (bool search_esd) { QTcpSocket tcpSocket (0); bool free = false; std::uint16_t search_port = pulse_port_; std::uint16_t other_port = esd_port_; // If the search_esd parameter is true, find a free port // for the PulseAudio emulation. if (search_esd) { search_port = esd_port_; other_port = pulse_port_; } do { // Skip this port, if it's reserved for the counterpart. if (search_port == other_port) { ++search_port; continue; } tcpSocket.connectToHost ("127.0.0.1", search_port); if (tcpSocket.waitForConnected (1000)) { tcpSocket.close (); free = false; ++search_port; } else { free = true; } } while ((!free) && (search_port > 1023)); if (!search_esd) { pulse_port_ = search_port; } else { esd_port_ = search_port; } return (free); } bool PulseManager::generate_server_config () { QString config_file_name (pulse_dir_.absolutePath () + "/config.pa"); QTemporaryFile config_tmp_file (pulse_dir_.absolutePath () + "/tmp/tmpconfig"); bool ret = false; if (config_tmp_file.open ()) { QTextStream config_tmp_file_stream (&config_tmp_file); config_tmp_file_stream << "load-module module-native-protocol-tcp port=" + QString::number (pulse_port_); /* * Reference: * http://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Modules/#index22h3 * * Setting auth-cookie fixes bug #422. * * PulseAudio 6.0 changed the path that auth-cookie is relative to, so * Tanu Kaskinen recommended we specify the absolute path instead. * The absolute path works with at least 5.0 and 6.0. */ if ((!(pulse_version_valid_)) || (pulse_version_major_ > 2)) { QString clean_pulse_dir = pulse_dir_.absolutePath (); #ifdef Q_OS_WIN clean_pulse_dir = wapiShortFileName (clean_pulse_dir); #endif /* defined (Q_OS_WIN) */ QString tmp_auth_cookie = QDir::toNativeSeparators (clean_pulse_dir + "/.pulse-cookie"); #ifdef Q_OS_WIN /* Double backslashes are required in config.pa. */ tmp_auth_cookie.replace ("\\", "\\\\"); #endif /* defined (Q_OS_WIN) */ config_tmp_file_stream << " auth-cookie=" + tmp_auth_cookie; } config_tmp_file_stream << endl; #ifdef Q_OS_UNIX config_tmp_file_stream << "load-module module-native-protocol-unix" << endl; config_tmp_file_stream << "load-module module-esound-protocol-unix" << endl; #endif // defined(Q_OS_UNIX) config_tmp_file_stream << "load-module module-esound-protocol-tcp port=" << QString::number (esd_port_) << endl; #ifdef Q_OS_DARWIN config_tmp_file_stream << "load-module module-coreaudio-detect"; #elif defined (Q_OS_WIN) config_tmp_file_stream << "load-module module-waveout"; // FIXME Linux #endif // defined (Q_OS_DARWIN) config_tmp_file_stream << " record="; if (!record_) { config_tmp_file_stream << "0"; } else { config_tmp_file_stream << "1"; } config_tmp_file_stream << " playback="; if (!playback_) { config_tmp_file_stream << "0"; } else { config_tmp_file_stream << "1"; } config_tmp_file_stream << endl; QFile config_file (config_file_name); if (QFile::exists (config_file_name)) QFile::remove (config_file_name); config_tmp_file.copy (config_file_name); config_tmp_file.remove (); ret = true; } return (ret); } bool PulseManager::generate_client_config () { QTemporaryFile client_config_tmp_file (pulse_dir_.absolutePath () + "/tmp/tmpconfig"); QString client_config_file_name (pulse_dir_.absolutePath () + "/.pulse/client.conf"); bool ret = false; if (client_config_tmp_file.open ()) { QTextStream config_tmp_file_stream (&client_config_tmp_file); config_tmp_file_stream << "autospawn=no" << endl; #ifdef Q_OS_WIN config_tmp_file_stream << "default-server=localhost:" << pulse_port_ << endl; #endif // defined (Q_OS_WIN) config_tmp_file_stream << "daemon-binary=" << QDir::toNativeSeparators (QDir (server_binary_).absolutePath ()) << endl; if (QFile::exists (client_config_file_name)) QFile::remove (client_config_file_name); QDir client_config_dir (pulse_dir_.absolutePath () + "/.pulse/"); client_config_dir.mkpath (client_config_dir.absolutePath ()); client_config_tmp_file.copy (client_config_file_name); client_config_tmp_file.remove (); ret = true; } return (ret); } void PulseManager::cleanup_client_dir () { // PA expects $HOME/.pulse/$HOST-runtime to be a symbolic link // and will fail, if it's just a plain directory on Mac OS X. // Delete it first. QDir machine_dir (pulse_dir_.absolutePath () + "/.pulse/" + QHostInfo::localHostName () + "-runtime"); if (QFile::exists (machine_dir.absolutePath () + "/pid")) QFile::remove (machine_dir.absolutePath () + "/pid"); if (machine_dir.exists ()) machine_dir.remove (machine_dir.absolutePath ()); } void PulseManager::create_client_dir () { QDir machine_dir (pulse_dir_.absolutePath () + "/.pulse/" + QHostInfo::localHostName () + "-runtime"); if (!machine_dir.exists ()) machine_dir.mkpath (machine_dir.absolutePath ()); if (QFile::exists (machine_dir.absolutePath () + "/pid")) QFile::remove (machine_dir.absolutePath () + "/pid"); } void PulseManager::slot_play_startup_sound () { if (debug_) { QProcess play_file (0); /* * Assume paplay is located at the same place as * the pulseaudio binary. */ QString play_file_binary (server_working_dir_); QString play_file_file (app_dir_); #ifdef Q_OS_DARWIN play_file_binary += "/paplay"; play_file_file += "/../Resources/startup.wav"; #elif defined (Q_OS_WIN) play_file_binary += "/paplay.exe"; play_file_file += "/startup.wav"; #else /* FIXME: implement Linux section. */ #endif // defined (Q_OS_DARWIN) QStringList args (play_file_file); play_file.setWorkingDirectory (server_working_dir_); play_file.setProcessEnvironment (env_); play_file.start (play_file_binary, args); if (play_file.waitForStarted (-1)) { play_file.waitForFinished (); } else { x2goErrorf (26) << "Unable to play startup sound! Something may be wrong."; show_startup_warning (true); } } } void PulseManager::slot_on_pulse_finished (int exit_code) { if (exit_code && !shutdown_state_) { x2goDebug << "Warning! Pulseaudio's exit code is non-zero."; show_startup_warning(true); } shutdown_state_ = false; x2goDebug << "Pulseaudio finished with code:"<readAllStandardOutput ()); const char *data = ba.constData (); x2goDebug << data; ba = pulse_server_->readAllStandardError (); data = ba.constData (); x2goDebug << data; // Clean up QDir work_dir (app_dir_); #ifdef Q_OS_WIN work_dir.remove (pulse_dir_.absolutePath () + "/pulse-pulseuser/pid"); work_dir.rmdir (pulse_dir_.absolutePath () + "/pulse-pulseuser"); #endif // defined (Q_OS_WIN) #if defined (Q_OS_DARWIN) || defined (Q_OS_WIN) // Remove server config file, otherwise the directory won't be empty. if (!debug_) { work_dir.remove (QDir::toNativeSeparators (QDir (pulse_dir_.absolutePath () + "/config.pa").absolutePath ())); work_dir.remove (QDir::toNativeSeparators (QDir (pulse_dir_.absolutePath () + "/pulse.log").absolutePath ())); } #else // Linux // FIXME. #endif work_dir.rmdir (pulse_dir_.absolutePath ()); state_ = QProcess::NotRunning; emit (sig_pulse_server_terminated ()); } bool PulseManager::is_server_running () const { if (pulse_server_) return (pulse_server_->state () == QProcess::Running); else return (false); } void PulseManager::shutdown () { QEventLoop loop; shutdown_state_ = true; connect (this, SIGNAL (sig_pulse_server_terminated ()), &loop, SLOT (quit ())); // Console applications without an event loop can only be terminated // by QProcess::kill() on Windows (unless they handle WM_CLOSE, which // PA obviously doesn't.) #ifdef Q_OS_WIN pulse_server_->kill (); #else // defined (Q_OS_WIN) pulse_server_->terminate (); #endif // defined (Q_OS_WIN) loop.exec (); } std::uint16_t PulseManager::get_pulse_port () const { return (pulse_port_); } std::uint16_t PulseManager::get_esd_port () const { return (esd_port_); } bool PulseManager::get_record () const { return (record_); } bool PulseManager::get_playback () const { return (playback_); } QDir PulseManager::get_pulse_dir () const { return (pulse_dir_); } bool PulseManager::set_pulse_port (std::uint16_t pulse_port) { bool ret = false; if (!(is_server_running ())) { pulse_port_ = pulse_port; ret = true; } return (ret); } bool PulseManager::set_esd_port (std::uint16_t esd_port) { bool ret = false; if (!(is_server_running ())) { esd_port_ = esd_port; ret = true; } return (ret); } bool PulseManager::set_record (bool record) { bool ret = false; if (!(is_server_running ())) { ret = true; } record_ = record; return (ret); } bool PulseManager::set_playback (bool playback) { bool ret = false; if (!(is_server_running ())) { playback_ = playback; ret = true; } return (ret); } void PulseManager::set_debug (bool debug) { debug_ = debug; } void PulseManager::restart () { if (pulse_server_ && is_server_running ()) shutdown (); x2goDebug << "restarting pulse"; start (); } QProcess::ProcessState PulseManager::state () { return (state_); } void PulseManager::show_startup_warning (bool play_startup_sound){ QString main_text, informative_text; if (!(play_startup_sound)) { main_text = tr ("Unable to play startup sound."); } else { main_text = tr ("PulseAudio failed to start!"); informative_text = tr ("Sound support will not be available.") + "\n\n"; } informative_text += tr ("If you downloaded the bundled, pre-compiled version from the official home page " "or the upstream Linux packages, please report a bug on:\n" "
" "https://wiki.x2go.org/doku.php/wiki:bugs" "
\n"); emit sig_pulse_user_warning (false, main_text, informative_text, true); } x2goclient-4.1.2.3/src/pulsemanager.h0000644000000000000000000000740714447111614014261 0ustar /*************************************************************************** * Copyright (C) 2012-2023 by Mihai Moldovan * * * * This program is free software; you can redistribute 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef PULSEMANAGER_H #define PULSEMANAGER_H #include #include #include #include #include #include #include #include #include #include #ifdef Q_OS_WIN #include "windows_stdint.h" #else /* defined (Q_OS_WIN) */ #include "unix_stdint.h" #endif /* defined (Q_OS_WIN) */ #include "x2gosettings.h" #include "wapi.h" class PulseManager: public QObject { Q_OBJECT; public: PulseManager (); ~PulseManager (); QProcess::ProcessState state (); std::uint16_t get_pulse_port () const; std::uint16_t get_esd_port () const; bool get_record () const; bool get_playback () const; QDir get_pulse_dir () const; bool set_pulse_port (std::uint16_t pulse_port); bool set_esd_port (std::uint16_t esd_port); bool set_record (bool record); bool set_playback (bool playback); void set_debug (bool debug); bool is_server_running () const; public slots: void start (); void restart (); void shutdown (); private: PulseManager (const PulseManager &other); void start_osx (); void start_win (); // FIXME void start_linux (); void start_generic (); void fetch_pulseaudio_version (); bool find_port (bool search_esd = false); bool generate_server_config (); bool generate_client_config (); void create_client_dir (); void cleanup_client_dir (); void show_startup_warning (bool play_startup_sound = false); private slots: void slot_on_pulse_finished (int exit_code); void slot_play_startup_sound (); signals: void sig_pulse_server_terminated (); void sig_pulse_user_warning(bool error, const QString& main_text, const QString& inf_text, bool modal); private: QString app_dir_; QString pulse_X2Go_; QDir pulse_dir_; QString server_binary_; QString server_working_dir_; QProcessEnvironment env_; QStringList server_args_; QProcess *pulse_server_; QProcess::ProcessState state_; std::uint16_t pulse_port_; std::uint16_t esd_port_; std::uint32_t pulse_version_major_; std::uint32_t pulse_version_minor_; std::uint32_t pulse_version_micro_; QString pulse_version_misc_; bool pulse_version_valid_; bool record_; bool playback_; bool debug_; bool system_pulse_; bool shutdown_state_; }; #endif // PULSEMANAGER_H x2goclient-4.1.2.3/src/sessionbutton.cpp0000644000000000000000000010235614447111614015047 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include "sessionbutton.h" #include "x2goclientconfig.h" #include "x2goutils.h" #include #include #include #include "x2gosettings.h" #include #include #include #include #include #include #include "onmainwindow.h" #include "x2gologdebug.h" #include #include #include #include #include #include #include #include "sessionexplorer.h" SessionButton::SessionButton ( ONMainWindow* mw,QWidget *parent, QString id ) : SVGFrame ( mw->images_resource_path("/svg/sessionbut.svg"),false,parent ) { editable=mw->sessionEditEnabled(); running=suspended=0; QPalette pal=palette(); pal.setColor ( QPalette::Active, QPalette::WindowText, QPalette::Mid ); pal.setColor ( QPalette::Active, QPalette::ButtonText, QPalette::Mid ); pal.setColor ( QPalette::Active, QPalette::Text, QPalette::Mid ); pal.setColor ( QPalette::Inactive, QPalette::WindowText, QPalette::Mid ); pal.setColor ( QPalette::Inactive, QPalette::ButtonText, QPalette::Mid ); pal.setColor ( QPalette::Inactive, QPalette::Text, QPalette::Mid ); setPalette(pal); updated=false; fav=false; QFont fnt=font(); if ( mw->retMiniMode() ) fnt.setPointSize ( 9 ); setFont ( fnt ); setFocusPolicy ( Qt::NoFocus ); bool miniMode=mw->retMiniMode(); if ( !miniMode ) setFixedSize ( 340,190 ); else setFixedSize ( 250,145 ); par= mw; connect ( this,SIGNAL ( clicked() ),this,SLOT ( slotClicked() ) ); sid=id; cmdBox=new QComboBox ( this ); cmdBox->setMouseTracking ( true ); cmdBox->setFrame ( false ); QPalette cpal=cmdBox->palette(); cpal.setColor ( QPalette::Button,QColor ( 255,255,255 ) ); cpal.setColor ( QPalette::Base,QColor ( 255,255,255 ) ); cpal.setColor ( QPalette::Window,QColor ( 255,255,255 ) ); cmdBox->setPalette ( cpal ); geomBox=new QComboBox ( this ); geomBox->setMouseTracking ( true ); geomBox->setFrame ( false ); geomBox->setEditable ( true ); geomBox->setEditable ( false ); geomBox->update(); geomBox->setPalette ( cpal ); pathLabel=new QLabel ( this ); QFont lfnt=fnt; lfnt.setWeight(0); lfnt.setPointSize(lfnt.pointSize()-2); pathLabel->setFont(lfnt); sessName=new QLabel ( this ); sessStatus=new QLabel ( this ); fnt=sessName->font(); fnt.setBold ( true ); sessName->setFont ( fnt ); icon=new QLabel ( this ); cmd=new QLabel ( this ); cmd->setMouseTracking ( true ); serverIcon=new QLabel ( this ); geomIcon=new QLabel ( this ); geomIcon->setMouseTracking ( true ); cmdIcon=new QLabel ( this ); cmdIcon->setMouseTracking ( true ); server=new QLabel ( this ); geom=new QLabel ( this ); geom->setMouseTracking ( true ); sound=new QPushButton ( this ); soundIcon=new QLabel ( this ); sound->setPalette ( cpal ); sound->setFlat ( true ); sound->setMouseTracking ( true ); connect ( sound,SIGNAL ( clicked() ),this, SLOT ( slot_soundClicked() ) ); editBut=new QPushButton ( this ); editBut->setMouseTracking ( true ); connect ( editBut,SIGNAL ( pressed() ),this,SLOT ( slotShowMenu() ) ); /* Load our edit button SVG file. */ QSvgRenderer svg_renderer (par->images_resource_path ("/svg/hamburger.svg")); /* Prepare image to render to with full transparency. */ QImage tmp_image (16, 16, QImage::Format_ARGB32); tmp_image.fill (0x00000000); /* Paint icon to the image. */ QPainter tmp_painter (&tmp_image); svg_renderer.render (&tmp_painter); editBut->setIcon ( QIcon ( QPixmap::fromImage (tmp_image) ) ); editBut->setIconSize ( QSize ( 16,16 ) ); editBut->setFixedSize ( 24,24 ); editBut->setFlat ( true ); editBut->setPalette ( cpal ); sessMenu=new QMenu ( this ); favButton=new QPushButton (this); favButton->setIcon(QIcon(mw->iconsPath ( "/16x16/fav.png" ))); favButton->setFlat(true); favButton->setFixedSize(24,24); favButton->setMouseTracking(true); favButton->setPalette ( cpal ); connect( favButton, SIGNAL(clicked()), this, SLOT(slotFavClick())); connect ( sessMenu,SIGNAL ( aboutToHide() ),this, SLOT ( slotMenuHide() ) ); act_edit=sessMenu->addAction ( QIcon ( mw->iconsPath ( "/16x16/edit.png" ) ), tr ( "Session preferences ..." ) ); #if (!defined Q_OS_DARWIN) act_createIcon=sessMenu->addAction ( QIcon ( mw->iconsPath ( "/16x16/create_file.png" ) ), tr ( "Create session icon on desktop ..." ) ); #endif act_remove=sessMenu->addAction ( QIcon ( mw->iconsPath ( "/16x16/delete.png" ) ), tr ( "Delete session" ) ); connect ( act_edit,SIGNAL ( triggered ( bool ) ),this, SLOT ( slotEdit() ) ); connect ( act_remove,SIGNAL ( triggered ( bool ) ),this, SLOT ( slotRemove() ) ); #if (!defined Q_OS_DARWIN) connect ( act_createIcon,SIGNAL ( triggered ( bool ) ),this, SLOT ( slotCreateSessionIcon() ) ); #endif editBut->setToolTip ( tr ( "Session actions" ) ); favButton->setToolTip(tr("Add to favorites")); cmdBox->setToolTip ( tr ( "Select type" ) ); geomBox->setToolTip ( tr ( "Select resolution" ) ); sound->setToolTip ( tr ( "Toggle sound support" ) ); icon->move ( 10,10 ); if ( !miniMode ) { pathLabel->move(80,10); pathLabel->setMaximumWidth(224); sessName->move ( 80,34 ); sessStatus->move(80,50); editBut->move ( 307,156 ); favButton->move ( 307,10 ); serverIcon->move ( 58,84 ); server->move ( 80,84 ); cmdIcon->move ( 58,108 ); cmd->move ( 80,108 ); cmdBox->move ( 80,108 ); geomIcon->move ( 58,132 ); geom->move ( 80,132 ); geomBox->move ( 80,132 ); soundIcon->move ( 58,156 ); sound->move ( 76,156 ); } else { pathLabel->move(64,6); pathLabel->setMaximumWidth(154); editBut->move ( 218,113 ); favButton->move ( 218,10 ); sessName->move ( 64,22 ); serverIcon->move ( 66,44 ); server->move ( 88,44 ); cmdIcon->move ( 66,68 ); cmd->move ( 88,68 ); cmdBox->move ( 88,68 ); geomIcon->move ( 66,92 ); geom->move ( 88,92 ); geomBox->move ( 88,92 ); soundIcon->move ( 66,116 ); sound->move ( 86,116 ); } if (mw->brokerMode) { pathLabel->move(10,10); if(miniMode) pathLabel->setMaximumWidth(204); else pathLabel->setMaximumWidth(294); icon->move(10,30); sessName->move(90,50); sessStatus->move(90,70); sessStatus->setMinimumWidth(220); setFixedHeight(120); } cmdBox->hide(); geomBox->hide(); QPixmap spix; spix.load ( par->iconsPath ( "/16x16/session.png" ) ); serverIcon->setPixmap ( spix ); serverIcon->setFixedSize ( 16,16 ); QPixmap rpix; rpix.load ( par->iconsPath ( "/16x16/resolution.png" ) ); geomIcon->setPixmap ( rpix ); geomIcon->setFixedSize ( 16,16 ); QPixmap apix; apix.load ( par->iconsPath ( "/16x16/audio.png" ) ); soundIcon->setPixmap ( apix ); soundIcon->setFixedSize ( 16,16 ); redraw(); connect ( cmdBox,SIGNAL ( activated ( const QString& ) ),this, SLOT ( slot_cmd_change ( const QString& ) ) ); connect ( geomBox,SIGNAL ( activated ( const QString& ) ),this, SLOT ( slot_geom_change ( const QString& ) ) ); editBut->setFocusPolicy ( Qt::NoFocus ); favButton->setFocusPolicy ( Qt::NoFocus ); sound->setFocusPolicy ( Qt::NoFocus ); cmdBox->setFocusPolicy ( Qt::NoFocus ); geomBox->setFocusPolicy ( Qt::NoFocus ); setMouseTracking(true); if (!editable) { editBut->hide(); cmdBox->hide(); geomBox->hide(); sessMenu->hide(); sound->setEnabled(false); } if (mw->brokerMode) { cmd->hide(); cmdIcon->hide(); server->hide(); serverIcon->hide(); geom->hide(); geomIcon->hide(); sound->hide(); soundIcon->hide(); } } SessionButton::~SessionButton() {} bool SessionButton::getFavFromConfig() { X2goSettings st( "favorits" ); return st.setting()->value("favorites").toStringList().contains(sid); } void SessionButton::slotFavClick() { setFav(!fav); X2goSettings st( "favorits" ); QStringList favs=st.setting()->value("favorites").toStringList(); if(fav) { if(! favs.contains(sid)) { favs.append(sid); st.setting()->setValue("favorites",favs); } } else { if(favs.contains(sid)) { favs.removeAll(sid); st.setting()->setValue("favorites",favs); } } st.setting()->sync(); emit favClicked(); } void SessionButton::setFav(bool fav) { this->fav=fav; if(fav) { favButton->setIcon(QIcon(par->iconsPath ( "/16x16/fav1.png" ))); favButton->setToolTip(tr("Remove from favorites")); } else { favButton->setIcon(QIcon(par->iconsPath ( "/16x16/fav.png" ))); favButton->setToolTip(tr("Add to favorites")); } } void SessionButton::slotClicked() { emit sessionSelected ( this ); } void SessionButton::slotEdit() { // editBut->setFlat ( true ); emit signal_edit ( this ); } void SessionButton::slotRemove() { emit ( signal_remove ( this ) ); } void SessionButton::redraw() { updated=true; bool snd; QStringList toolTip; X2goSettings *st; if (par->brokerMode) st=new X2goSettings(par->config.iniFile,QSettings::IniFormat); else st= new X2goSettings( "sessions" ); QString name=st->setting()->value ( sid+"/name", ( QVariant ) tr ( "New Session" ) ).toString(); QStringList tails=name.split("/",QString::SkipEmptyParts); if(tails.count()>0) { name=tails.last(); tails.pop_back(); path=tails.join("/"); if(path.length()) { toolTip<font()); nameofSession=name; QString elName=metr.elidedText(name, Qt::ElideRight, 250); sessName->setText (elName); sessName->setToolTip(nameofSession); sessStatus->setText(""); QString status=st->setting()->value ( sid+"/status", ( QVariant ) QString::null ).toString(); if (status == "R") { sessStatus->setText("("+tr("running")+")"); } if (status == "S") { sessStatus->setText("("+tr("suspended")+")"); } suspended=st->setting()->value ( sid+"/suspended", ( QVariant ) QString::null ).toUInt(); running=st->setting()->value ( sid+"/running", ( QVariant ) QString::null ).toUInt(); if(suspended || running) { QStringList parts; if(suspended) { parts<setText(parts.join(", ")); } QString sessIcon = wrap_legacy_resource_URIs (st->setting()->value (sid+"/icon", (QVariant) par->iconsPath("/128x128/x2gosession.png") ).toString ()); sessIcon = expandHome(sessIcon); QPixmap* pix; if(sessIcon == ":/img/icons/128x128/x2gosession.png") { sessIcon=par->iconsPath("/128x128/x2gosession.png"); } // x2goDebug << "Creating QPixmap with session icon: " << sessIcon.toLatin1 () << "."; if (!par->brokerMode || sessIcon == par->iconsPath("/128x128/x2gosession.png")) pix=new QPixmap( sessIcon ); else { pix=new QPixmap; if(sessIcon.indexOf("file://")!=-1) { //load icon from file URL pix->load(sessIcon.replace("file://","")); } else pix->loadFromData(QByteArray::fromBase64(sessIcon.toLatin1())); if(pix->isNull()) { //loading icon has failed, load default icon pix->load(par->iconsPath("/128x128/x2gosession.png")); } } if ( !par->retMiniMode() ) icon->setPixmap ( pix->scaled ( 64,64,Qt::IgnoreAspectRatio, Qt::SmoothTransformation ) ); else icon->setPixmap ( pix->scaled ( 48,48,Qt::IgnoreAspectRatio, Qt::SmoothTransformation ) ); delete pix; QString sv=st->setting()->value ( sid+"/host", ( QVariant ) QString::null ).toString(); QString uname=st->setting()->value ( sid+"/user", ( QVariant ) QString::null ).toString(); server->setText ( uname+"@"+sv ); QString command=st->setting()->value ( sid+"/command", ( QVariant ) tr ( "KDE" ) ). toString(); rootless=st->setting()->value ( sid+"/rootless", false ).toBool(); published=st->setting()->value ( sid+"/published", false ).toBool(); toolTip<clear(); cmdBox->addItem ( "KDE" ); cmdBox->addItem ( "GNOME" ); cmdBox->addItem ( "LXDE" ); cmdBox->addItem ("LXQt"); cmdBox->addItem ( "XFCE" ); cmdBox->addItem ( "MATE" ); cmdBox->addItem ( "UNITY" ); cmdBox->addItem ( "CINNAMON" ); cmdBox->addItem ( "TRINITY" ); cmdBox->addItem ( "OPENBOX" ); cmdBox->addItem ( "ICEWM" ); cmdBox->addItem ( tr ( "RDP connection" ) ); cmdBox->addItem ( tr ( "XDMCP" ) ); cmdBox->addItem ( tr ( "Connection to local desktop" ) ); cmdBox->addItem ( tr ( "Published applications" ) ); cmdBox->addItems ( par->transApplicationsNames() ); bool directRDP=false; QPixmap cmdpix; if ( command=="KDE" ) { cmdpix.load ( par->iconsPath ( "/16x16/kde.png" ) ); cmdBox->setCurrentIndex ( KDE ); } else if ( command =="GNOME" ) { cmdpix.load ( par->iconsPath ( "/16x16/gnome.png" ) ); cmdBox->setCurrentIndex ( GNOME ); } else if ( command =="UNITY" ) { cmdpix.load ( par->iconsPath ( "/16x16/unity.png" ) ); cmdBox->setCurrentIndex ( UNITY ); } else if ( command == "XFCE" ) { cmdpix.load ( par->iconsPath ( "/16x16/xfce.png" ) ); cmdBox->setCurrentIndex ( XFCE ); } else if ( command == "MATE" ) { cmdpix.load ( par->iconsPath ( "/16x16/mate.png" ) ); cmdBox->setCurrentIndex ( MATE ); } else if ( command =="LXDE" ) { cmdpix.load ( par->iconsPath ( "/16x16/lxde.png" ) ); cmdBox->setCurrentIndex ( LXDE ); } else if (command == "LXQt") { cmdpix.load (par->iconsPath ("/16x16/lxqt.png")); cmdBox->setCurrentIndex (LXQt); } else if ( command == "CINNAMON" ) { cmdpix.load ( par->iconsPath ( "/16x16/cinnamon.png" ) ); cmdBox->setCurrentIndex ( CINNAMON ); } else if ( command == "TRINITY" ) { cmdpix.load ( par->iconsPath ( "/16x16/trinity.png" ) ); cmdBox->setCurrentIndex ( TRINITY ); } else if ( command == "OPENBOX" ) { cmdpix.load ( par->iconsPath ( "/16x16/openbox.png" ) ); cmdBox->setCurrentIndex ( OPENBOX ); } else if ( command == "ICEWM" ) { cmdpix.load ( par->iconsPath ( "/16x16/icewm.png" ) ); cmdBox->setCurrentIndex ( ICEWM ); } else if ( command =="SHADOW" ) { cmdpix.load ( par->iconsPath ( "/16x16/X.png" ) ); cmdBox->setCurrentIndex ( SHADOW ); command=tr ( "Connection to local desktop" ); } else if ( command =="RDP" ) { #ifdef Q_OS_LINUX if (st->setting()->value ( sid+"/directrdp", ( QVariant ) false ).toBool()) directRDP=true; #endif cmdpix.load ( par->iconsPath ( "/16x16/rdp.png" ) ); cmdBox->setCurrentIndex ( RDP ); command=tr ( "RDP connection" ); } else if ( command =="XDMCP" ) { #ifdef Q_OS_LINUX if (st->setting()->value ( sid+"/directxdmcp", ( QVariant ) false ).toBool()) { directRDP=true; server->setText ( "XDM@"+sv ); } #endif cmdpix.load ( par->iconsPath ( "/16x16/X.png" ) ); cmdBox->setCurrentIndex ( XDMCP ); command=tr ( "XDMCP" ); } else if (published) { cmdpix.load ( par->iconsPath ( "/16x16/X.png" ) ); command=tr ("Published applications"); cmdBox->setCurrentIndex (PUBLISHED); } else { cmdpix.load ( par->iconsPath ( "/16x16/X.png" ) ); command=par->transAppName ( command ); int id= cmdBox->findText ( command ); if ( id ==-1 ) { cmdBox->addItem ( command ); cmdBox->setCurrentIndex ( cmdBox->count()-1 ); } else cmdBox->setCurrentIndex ( id ); } cmdIcon->setPixmap ( cmdpix ); cmd->setText ( command ); toolTip<clear(); geomBox->addItem ( tr ( "fullscreen" ) ); uint displays=QApplication::desktop()->numScreens(); if (!directRDP) for (uint i=0; iaddItem ( tr( "Display " )+QString::number(i+1)); //add maximun available area geomBox->addItem( QString::number(QApplication::desktop()->availableGeometry(i).width()) + "x" + QString::number(QApplication::desktop()->availableGeometry(i).height())); } geomBox->addItem ( "1440x900" ); geomBox->addItem ( "1280x1024" ); geomBox->addItem ( "1024x768" ); geomBox->addItem ( "800x600" ); if ( st->setting()->value ( sid+"/fullscreen", ( QVariant ) false ).toBool() ) { geom->setText ( tr ( "fullscreen" ) ); } else if (st->setting()->value ( sid+"/multidisp", ( QVariant ) false ).toBool() && !directRDP) { uint disp=st->setting()->value ( sid+"/display", ( QVariant ) 1 ).toUInt(); if (disp<=displays) { geom->setText( tr( "Display " )+QString::number(disp)); } else { geom->setText( tr( "Display " )+QString::number(1)); } for (int i=0; icount(); ++i) if (geomBox->itemText(i)==geom->text()) { geomBox->setCurrentIndex(i); break; } } else { QString g=QString::number ( st->setting()->value ( sid+"/width" ).toInt() ); g+="x"+QString::number ( st->setting()->value ( sid+"/height" ).toInt() ); geom->setText ( g ); if ( geomBox->findText ( g ) ==-1 ) geomBox->addItem ( g ); geomBox->setCurrentIndex ( geomBox->findText ( g ) ); } if (directRDP) { geomBox->addItem ( tr("Maximum") ); if (st->setting()->value ( sid+"/maxdim", ( QVariant ) false ).toBool()) { geom->setText ( tr("Maximum") ); geomBox->setCurrentIndex ( geomBox->findText ( tr("Maximum") )); } } snd=st->setting()->value ( sid+"/sound", ( QVariant ) true ).toBool(); if(directRDP) snd=false; if ( snd ) sound->setText ( tr ( "Enabled" ) ); else sound->setText ( tr ( "Disabled" ) ); soundIcon->setEnabled ( snd ); QFontMetrics fm ( sound->font() ); sound->setFixedSize ( fm.size ( Qt::TextSingleLine,sound->text() ) + QSize ( 8,4 ) ); sessName->setMinimumSize ( sessName->sizeHint() ); geom->setMinimumSize ( geom->sizeHint() ); cmd->setMinimumSize ( cmd->sizeHint() ); server->setMinimumSize ( server->sizeHint() ); delete st; setFav(getFavFromConfig()); setToolTip(toolTip.join("\n")); } void SessionButton::mousePressEvent ( QMouseEvent * event ) { SVGFrame::mousePressEvent ( event ); loadBg ( par->images_resource_path("/svg/sessionbut_grey.svg" )); } void SessionButton::mouseReleaseEvent ( QMouseEvent * event ) { SVGFrame::mouseReleaseEvent ( event ); loadBg ( par->images_resource_path("/svg/sessionbut.svg" )); QPoint click_pos (event->x (), event->y ()); QRect sensitive_area (0, 0, width (), height ()); bool recognized_click = false; /* * If button is editable, let only the top "half" * of the button be clickable to trigger an event. * * Actually, the area will look something like that: * ---------------------------- * | | * | ----------------------- * | | * | | * | | * ------ * */ if (editable) { bool mini_mode = par->retMiniMode (); QRect sensitive_area2; if (!mini_mode) { sensitive_area.setHeight (84); sensitive_area2 = QRect (0, 83, 58, height () - 84); } else { sensitive_area.setHeight (44); sensitive_area2 = QRect (0, 43, 66, height () - 44); } QPolygon real_sensitive_area; real_sensitive_area << sensitive_area.topLeft () << sensitive_area.topRight () << sensitive_area.bottomRight () << sensitive_area2.topRight () << sensitive_area2.bottomRight () << sensitive_area2.bottomLeft () << sensitive_area.topLeft (); recognized_click = real_sensitive_area.containsPoint (click_pos, Qt::WindingFill); } else { recognized_click = sensitive_area.contains (click_pos); } if (recognized_click) { emit clicked (); } } void SessionButton::mouseMoveEvent ( QMouseEvent * event ) { SVGFrame::mouseMoveEvent ( event ); if ( favButton->isFlat() ) { if ( event->x() > favButton->x() && event->x() < favButton->x() + favButton->width() && event->y() >favButton->y() && event->y() y() + favButton->height() ) favButton->setFlat ( false ); } else { if ( event->x() < favButton->x() || event->x() > favButton->x() + favButton->width() || event->y() y() || event->y() >favButton->y() + favButton->height() ) favButton->setFlat ( true ); } if (!editable) return; if ( cmd->isVisible() ) if ( event->x() > cmd->x() && event->x() < cmd->x() + cmd->width() && event->y() >cmd->y() && event->y() y() + cmd->height() ) { if ( cmdBox->width() width() ) cmdBox->setFixedWidth ( cmd->width() +20 ); if ( cmdBox->height() !=cmd->height() ) cmdBox->setFixedHeight ( cmd->height() ); cmd->hide(); cmdBox->show(); } if ( cmdBox->isVisible() ) if ( event->x() < cmdBox->x() || event->x() > cmdBox->x() + cmdBox->width() || event->y() y() || event->y() >cmdBox->y() + cmdBox->height() ) { cmdBox->hide(); cmd->show(); } if ( sound->isFlat() ) { if ( event->x() > sound->x() && event->x() < sound->x() + sound->width() && event->y() >sound->y() && event->y() y() + sound->height() ) { sound->setFlat ( false ); } } else { if ( event->x() < sound->x() || event->x() > sound->x() + sound->width() || event->y() y() || event->y() >sound->y() + sound->height() ) { sound->setFlat ( true ); } } if ( editBut->isFlat() ) { if ( event->x() > editBut->x() && event->x() < editBut->x() + editBut->width() && event->y() >editBut->y() && event->y() y() + editBut->height() ) editBut->setFlat ( false ); } else { if ( event->x() < editBut->x() || event->x() > editBut->x() + editBut->width() || event->y() y() || event->y() >editBut->y() + editBut->height() ) editBut->setFlat ( true ); } if ( geom->isVisible() ) if ( event->x() > geom->x() && event->x() < geom->x() + geom->width() && event->y() >geom->y() && event->y() y() + geom->height() ) { if ( geomBox->width() width() ) geomBox->setFixedWidth ( geom->width() +20 ); if ( geomBox->height() !=geom->height() ) geomBox->setFixedHeight ( geom->height() ); geom->hide(); geomBox->show(); } if ( geomBox->isVisible() ) if ( event->x() < geomBox->x() || event->x() > geomBox->x() + geomBox->width() || event->y() y() || event->y() >geomBox->y() + geomBox->height() ) { geomBox->hide(); geom->show(); } } void SessionButton::slot_soundClicked() { bool snd=!soundIcon->isEnabled(); soundIcon->setEnabled ( snd ); if ( snd ) sound->setText ( tr ( "Enabled" ) ); else sound->setText ( tr ( "Disabled" ) ); QFontMetrics fm ( sound->font() ); sound->setFixedSize ( fm.size ( Qt::TextSingleLine,sound->text() ) + QSize ( 8,4 ) ); X2goSettings st ( "sessions" ); st.setting()->setValue ( sid+"/sound", ( QVariant ) snd ); st.setting()->sync(); } void SessionButton::slot_cmd_change ( const QString& command ) { cmd->setText ( command ); QPixmap pix; bool newRootless=rootless; published=false; QString cmd=command; if ( command=="KDE" ) { newRootless=false; pix.load ( par->iconsPath ( "/16x16/kde.png" ) ); } else if ( command =="GNOME" ) { newRootless=false; pix.load ( par->iconsPath ( "/16x16/gnome.png" ) ); } else if ( command =="LXDE" ) { newRootless=false; pix.load ( par->iconsPath ( "/16x16/lxde.png" ) ); } else if (command == "LXQt") { newRootless = false; pix.load (par->iconsPath ("/16x16/lxqt.png")); } else if ( command =="UNITY" ) { newRootless=false; pix.load ( par->iconsPath ( "/16x16/unity.png" ) ); } else if ( command == "XFCE" ) { newRootless=false; pix.load ( par->iconsPath ( "/16x16/xfce.png" ) ); } else if ( command == "MATE" ) { newRootless=false; pix.load ( par->iconsPath ( "/16x16/mate.png" ) ); } else if ( command == "CINNAMON" ) { newRootless=false; // As of 2014-10-01, Cinnamon does not have a logo. This icon is the // gear, which is the default start menu icon as of 2.2. pix.load ( par->iconsPath ( "/16x16/cinnamon.png" ) ); } else if ( command == "TRINITY" ) { newRootless=false; pix.load ( par->iconsPath ( "/16x16/trinity.png" ) ); } else if ( command == "OPENBOX" ) { newRootless=false; pix.load ( par->iconsPath ( "/16x16/openbox.png" ) ); } else if ( command == "ICEWM" ) { newRootless=false; pix.load ( par->iconsPath ( "/16x16/icewm.png" ) ); } else if ( command ==tr ( "Connection to local desktop" ) ) { newRootless=false; pix.load ( par->iconsPath ( "/16x16/X.png" ) ); cmd="SHADOW"; } else if ( command == tr ( "RDP connection" ) ) { newRootless=false; pix.load ( par->iconsPath ( "/16x16/rdp.png" ) ); cmd="RDP"; } else if ( command == tr ( "XDMCP" ) ) { newRootless=false; pix.load ( par->iconsPath ( "/16x16/X.png" ) ); cmd="XDMCP"; } else pix.load ( par->iconsPath ( "/16x16/X.png" ) ); cmdIcon->setPixmap ( pix ); X2goSettings st ( "sessions" ); if ( command=="startkde" ) { cmd="KDE"; newRootless=false; } if ( command=="gnome-session" ) { cmd="GNOME"; newRootless=false; } if ( command=="LXDE" ) { cmd="LXDE"; newRootless=false; } if (command == "LXQt") { cmd = "LXQt"; newRootless = false; } if ( command=="unity" ) { cmd="UNITY"; newRootless=false; } if ( command=="xfce4-session" ) { cmd="XFCE"; newRootless=false; } if ( command=="mate-session" ) { cmd="MATE"; newRootless=false; } if ( command=="cinnamon-session" ) { cmd="CINNAMON"; newRootless=false; } if (command== tr("Published applications")) { published=true; cmd="PUBLISHED"; } bool found=false; cmd=par->internAppName ( cmd,&found ); if ( found ) newRootless=true; st.setting()->setValue ( sid+"/command", ( QVariant ) cmd ); st.setting()->setValue ( sid+"/rootless", ( QVariant ) newRootless ); st.setting()->setValue ( sid+"/published", ( QVariant ) published ); st.setting()->sync(); } void SessionButton::slot_geom_change ( const QString& new_g ) { geom->setText ( new_g ); X2goSettings st ( "sessions" ); if ( new_g==tr ( "fullscreen" ) ) { st.setting()->setValue ( sid+"/fullscreen", ( QVariant ) true ); st.setting()->setValue ( sid+"/multidisp", ( QVariant ) false ); st.setting()->setValue ( sid+"/maxdim", ( QVariant ) false ); } else if ( new_g==tr ( "Maximum" )) { st.setting()->setValue ( sid+"/fullscreen", ( QVariant ) false ); st.setting()->setValue ( sid+"/multidisp", ( QVariant ) false ); st.setting()->setValue ( sid+"/maxdim", ( QVariant ) true ); } else if (new_g.indexOf(tr("Display "))==0) { QString g= new_g; g.replace(tr("Display "),""); st.setting()->setValue ( sid+"/multidisp", ( QVariant ) true ); st.setting()->setValue ( sid+"/display", ( QVariant ) g.toUInt()); st.setting()->setValue ( sid+"/fullscreen", ( QVariant ) false ); st.setting()->setValue ( sid+"/maxdim", ( QVariant ) false ); } else { QString new_geom=new_g; st.setting()->setValue ( sid+"/fullscreen", ( QVariant ) false ); st.setting()->setValue ( sid+"/multidisp", ( QVariant ) false ); st.setting()->setValue ( sid+"/maxdim", ( QVariant ) false ); QStringList lst=new_geom.split ( 'x' ); st.setting()->setValue ( sid+"/width", ( QVariant ) lst[0] ); st.setting()->setValue ( sid+"/height", ( QVariant ) lst[1] ); } st.setting()->sync(); } bool SessionButton::lessThen ( const SessionButton* b1, const SessionButton* b2 ) { return (b1->path+"/"+b1->sessName->text()).toLower().localeAwareCompare ( (b2->path+"/"+b2->sessName->text()).toLower() ) <0; } QString SessionButton::name() { return nameofSession; } void SessionButton::slotMenuHide() { editBut->setDown ( false ); editBut->setFlat ( true ); } void SessionButton::slotShowMenu() { sessMenu->popup ( mapToGlobal ( QPoint ( editBut->x() +editBut->width(), editBut->y() +editBut->height() ) ) ); } void SessionButton::showAdvInfo(bool show) { pathLabel->setText(path); pathLabel->setVisible((show && path.length())); } void SessionButton::slotCreateSessionIcon() { par->getSessionExplorer()->slotCreateDesktopIcon ( this ); } x2goclient-4.1.2.3/src/sessionbutton.h0000644000000000000000000000741114447111614014510 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef SESSIONBUTTON_H #define SESSIONBUTTON_H #include "SVGFrame.h" #include #include class ONMainWindow; class QComboBox; class QPushButton; /** @author Oleksandr Shneyder */ class SessionButton : public SVGFrame { Q_OBJECT public: enum {KDE,GNOME,LXDE, LXQt, XFCE,MATE,UNITY,CINNAMON,TRINITY,OPENBOX,ICEWM,RDP,XDMCP,SHADOW,PUBLISHED,OTHER,APPLICATION}; SessionButton ( ONMainWindow* mw, QWidget* parent,QString id ); ~SessionButton(); QString id() { return sid; } void redraw(); const QPixmap* sessIcon() { return icon->pixmap(); } static bool lessThen ( const SessionButton* b1, const SessionButton* b2 ); QString name(); QString getPath() { return path; } void setPath(QString path) { this->path=path; } void setNotUpdated() { updated=false; } bool isUpdated() { return updated; } bool isFav() { return fav; } int getRunning() { return running; } int getSuspended() { return suspended; } void showAdvInfo(bool show); private: void setFav(bool fav); bool getFavFromConfig(); QString nameofSession; QString sid; QString path; QLabel* pathLabel; QLabel* sessName; QLabel* sessStatus; QLabel* icon; QComboBox* cmdBox; QLabel* cmd; QLabel* serverIcon; QLabel* geomIcon; QLabel* cmdIcon; QLabel* server; QPushButton* editBut; QPushButton* favButton; QLabel* geom; QMenu* sessMenu; QComboBox* geomBox; QPushButton* sound; QLabel* soundIcon; ONMainWindow* par; QAction* act_edit; QAction* act_createIcon; QAction* act_remove; bool rootless; bool published; bool editable; bool updated; bool fav; int running; int suspended; private slots: void slotClicked(); void slotEdit(); void slot_soundClicked(); void slot_cmd_change ( const QString& command ); void slot_geom_change ( const QString& new_g ); void slotRemove(); void slotMenuHide(); void slotShowMenu(); void slotCreateSessionIcon(); void slotFavClick(); signals: void sessionSelected ( SessionButton* ); void signal_edit ( SessionButton* ); void signal_remove ( SessionButton* ); void clicked(); void favClicked(); protected: virtual void mouseMoveEvent ( QMouseEvent * event ); virtual void mousePressEvent ( QMouseEvent * event ); virtual void mouseReleaseEvent ( QMouseEvent * event ); }; #endif x2goclient-4.1.2.3/src/sessionexplorer.cpp0000644000000000000000000005712614447111614015400 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include "sessionexplorer.h" #include "sessionbutton.h" #include "folderbutton.h" #include "editconnectiondialog.h" #include "onmainwindow.h" #include #include #include "x2gosettings.h" #include #include #include #include #include "x2goutils.h" #include "imgframe.h" #include #include "x2gologdebug.h" #include #include #include SessionExplorer::SessionExplorer(ONMainWindow* p):QObject(p) { parent=p; lastSession=0; initUpdate=true; viewMode=ALL; runButton=new QPushButton(tr("Running"),parent->getCentralFrame()); favButton=new QPushButton(tr("Favorites"),parent->getCentralFrame()); allButton=new QPushButton(tr("All Sessions"),parent->getCentralFrame()); runButton->hide(); allButton->hide(); favButton->hide(); allButton->setFlat(true); runButton->setFocusPolicy ( Qt::NoFocus ); favButton->setFocusPolicy ( Qt::NoFocus ); allButton->setFocusPolicy ( Qt::NoFocus ); selectLayout=new QHBoxLayout(); selectLayout->addWidget(runButton); selectLayout->addWidget(favButton); selectLayout->addWidget(allButton); backButton=new QToolButton(parent->getCentralFrame()); backButton->setIcon(QIcon( parent->iconsPath ( "/32x32/tbhide.png" ))); backButton->setAutoRaise(true); pathLabel=new QLabel(" ",parent->getCentralFrame()); backButton->setFixedWidth(36); navigationLayout=new QHBoxLayout(); navigationLayout->addWidget(backButton); navigationLayout->addWidget(pathLabel); backButton->setToolTip(tr("Back")); QPalette pal=backButton->palette(); pal.setBrush ( QPalette::Window, QColor ( 110,112,127,255 ) ); pal.setBrush ( QPalette::Base, QColor ( 110,112,127,255 ) ); pal.setBrush ( QPalette::Button, QColor ( 110,112,127,255 ) ); backButton->setPalette(pal); backButton->setAutoFillBackground(true); runButton->setPalette(pal); runButton->setAutoFillBackground(true); favButton->setPalette(pal); favButton->setAutoFillBackground(true); allButton->setPalette(pal); allButton->setAutoFillBackground(true); pal=pathLabel->palette(); pal.setBrush ( QPalette::Window, QColor ( 110,112,127,255 ) ); pal.setBrush ( QPalette::WindowText, QColor ( 200,200,200,255 ) ); pathLabel->setPalette(pal); pathLabel->setAutoFillBackground(true); setNavigationVisible(false); connect(backButton,SIGNAL(clicked(bool)), this, SLOT(slotLevelUp())); connect(runButton,SIGNAL(clicked(bool)), this, SLOT(slotShowRun())); connect(allButton,SIGNAL(clicked(bool)), this, SLOT(slotShowAll())); connect(favButton,SIGNAL(clicked(bool)), this, SLOT(slotShowFav())); } SessionExplorer::~SessionExplorer() { } SessionButton * SessionExplorer::findSession(const QString& id) { foreach (SessionButton* s, sessions) { if(s->id()==id) return s; } return 0; } void SessionExplorer::updateSessions(QStringList slst) { foreach (SessionButton* s, sessions) { s->setNotUpdated(); } for ( int i=0; iredraw(); } foreach (SessionButton* s, sessions) { if(!s->isUpdated()) { sessions.removeOne(s); if(s==lastSession) { lastSession=0; parent->slotCloseSelectDlg(); parent->slotClosePass(); } delete s; } } updateView(); } void SessionExplorer::updateView() { bool hasFavs=false; bool hasRun=0; foreach (SessionButton* s, sessions) { if(s->isFav()) { hasFavs=true; } if(s->getRunning()||s->getSuspended()) hasRun=true; } runButton->setVisible(hasRun); favButton->setVisible(hasFavs); allButton->setVisible(hasRun||hasFavs); if(initUpdate) { initUpdate=false; if(hasRun) { viewMode=RUN; } else if(hasFavs) { viewMode=FAV; } } if((!hasRun && viewMode==RUN)||(!hasFavs && viewMode==FAV)) { viewMode=ALL; } allButton->setFlat(viewMode==ALL); runButton->setFlat(viewMode==RUN); favButton->setFlat(viewMode==FAV); placeButtons(); } void SessionExplorer::resize() { pathLabel->setMaximumWidth(parent->getUsersArea()->width()-backButton->width()); QFontMetrics metrics(pathLabel->font()); QString displayText = metrics.elidedText(" "+currentPath, Qt::ElideLeft, pathLabel->width()-6); pathLabel->setText(displayText); } void SessionExplorer::cleanSessions() { for ( int i=0; iclose(); sessions.clear(); for ( int i=0; iclose(); folders.clear(); } void SessionExplorer::exportsEdit ( SessionButton* bt ) { EditConnectionDialog dlg (false, bt->id(),parent,4 ); if ( dlg.exec() ==QDialog::Accepted ) { bt->redraw(); bool vis=bt->isVisible(); placeButtons(); parent->getUsersArea()->ensureVisible ( bt->x(),bt->y(),50,220 ); bt->setVisible ( vis ); } } void SessionExplorer::getFoldersFromConfig() { X2goSettings *st; if (parent->getBrokerMode()) st=new X2goSettings(parent->getConfig()->iniFile,QSettings::IniFormat); else st= new X2goSettings( "sessions" ); QStringList folders=st->setting()->childKeys(); QString folder; foreach(folder,folders) { if(folder.indexOf("icon_")==0) { folder=folder.mid(strlen("icon_")); folder.replace("::","/"); if(findFolder(folder)==-1) createFolder(folder); } } } void SessionExplorer::slotEdit ( SessionButton* bt ) { EditConnectionDialog dlg (false, bt->id(),parent ); if ( dlg.exec() ==QDialog::Accepted ) { bt->redraw(); placeButtons(); parent->getUsersArea()->ensureVisible ( bt->x(),bt->y(),50,220 ); } } void SessionExplorer::slotCreateDesktopIcon ( SessionButton* bt ) { QMessageBox messageBox(QMessageBox::Question, tr ( "Create session icon on desktop." ), tr ( "Desktop icons can be configured " "not to show X2Go Client (hidden mode.) " "If you like to use this feature you'll " "need to configure login via a GPG key " "or GPG Smart Card.\n\n" "Use X2Go Client's hidden mode?" ), QMessageBox::Yes|QMessageBox::No, parent); //adding a chekbox to know if user want to enable trayicon in hide sessions QCheckBox cbShowTrayIcon(tr("Show session tray icon when running")); messageBox.layout()->addWidget(&cbShowTrayIcon); QGridLayout* gridLayout = (QGridLayout*) messageBox.layout(); gridLayout->addWidget(&cbShowTrayIcon, gridLayout->rowCount(), 0, 1, gridLayout->columnCount()); cbShowTrayIcon.blockSignals(true); //getting the result bool crHidden = (messageBox.exec() == QMessageBox::Yes); bool bShowTrayicon = (cbShowTrayIcon.checkState() == Qt::Checked); X2goSettings st ( "sessions" ); QString name=st.setting()->value ( bt->id() +"/name", ( QVariant ) tr ( "New Session" ) ).toString() ; // PyHoca-GUI uses the slash as separator for cascaded menus, so let's handle these on the file system name.replace("/","::"); QString sessIcon = wrap_legacy_resource_URIs (st.setting ()->value (bt->id() + "/icon", (QVariant) parent->iconsPath("/128x128/x2gosession.png") ).toString ()); sessIcon = expandHome(sessIcon); if ( sessIcon.startsWith ( ":/img/icons",Qt::CaseInsensitive ) || !sessIcon.endsWith ( ".png",Qt::CaseInsensitive ) ) { sessIcon="/usr/share/x2goclient/icons/x2gosession.png"; } QString cmd="x2goclient"; QStringList args; if ( crHidden ) args << "--hide"; if (bShowTrayicon) args << "--tray-icon"; args << QString ("--sessionid=" + bt->id ()); #ifndef Q_OS_WIN QFile file ( #if QT_VERSION < 0x050000 QDesktopServices::storageLocation ( QDesktopServices::DesktopLocation ) +"/"+name+".desktop" ); #else QStandardPaths::writableLocation( QStandardPaths::DesktopLocation) +"/"+name+".desktop" ); #endif if ( !file.open ( QIODevice::WriteOnly | QIODevice::Text ) ) return; QTextStream out ( &file ); out << "[Desktop Entry]\n"<< "Exec="<getPath()!="") { if(findFolder(s->getPath())==-1) { createFolder(s->getPath()); } } } SessionButton* SessionExplorer::createBut ( const QString& id ) { SessionButton* l; l=new SessionButton ( parent,parent->getUsersFrame(),id ); sessions.append ( l ); connect ( l,SIGNAL ( signal_edit ( SessionButton* ) ), this,SLOT ( slotEdit ( SessionButton* ) ) ); connect ( l,SIGNAL ( signal_remove ( SessionButton* ) ), this,SLOT ( slotDeleteButton ( SessionButton* ) ) ); connect ( l,SIGNAL ( sessionSelected ( SessionButton* ) ),parent, SLOT ( slotSelectedFromList ( SessionButton* ) ) ); connect(l, SIGNAL( favClicked()), this, SLOT(updateView())); checkPath(l); return l; } void SessionExplorer::placeButtons() { getFoldersFromConfig(); setNavigationVisible((currentPath.length()>0)&&(viewMode==ALL)); resize(); int currentVerticalPosition=0; qSort ( sessions.begin(),sessions.end(),SessionButton::lessThen ); qSort ( folders.begin(), folders.end(), FolderButton::lessThen ); for ( int i=0; ihide(); continue; } if((folders[i]->getPath() != currentPath)||(getFolderChildren(folders[i]).length()<=0) || isFolderEmpty(folders[i])) { folders[i]->hide(); continue; } if ( parent->getMiniMode() ) { folders[i]->move ( ( parent->getUsersArea()->width()-260 ) /2, currentVerticalPosition+5 ); currentVerticalPosition+=170; } else { folders[i]->move ( ( parent->getUsersArea()->width()-360 ) /2, currentVerticalPosition+5 ); currentVerticalPosition+=230; } folders[i]->show(); folders[i]->setChildrenList(getFolderChildren(folders[i])); } if(parent->isPassFormHidden() && parent->isSelectFormHidden()) { lastSession=0; parent->slotClosePass(); } for ( int i=0; igetPath() != currentPath)) { sessions[i]->hide(); continue; } if((viewMode==FAV) && (! sessions[i]->isFav())) { sessions[i]->hide(); continue; } if((viewMode==RUN) && (! (sessions[i]->getRunning() || sessions[i]->getSuspended()))) { sessions[i]->hide(); continue; } int horizontalPosition=(parent->getMiniMode())?(parent->getUsersArea()->width()-260 ) /2:(parent->getUsersArea()->width()-360 ) /2; sessions[i]->move ( horizontalPosition, currentVerticalPosition+5 ); sessions[i]->showAdvInfo(viewMode!=ALL); if(parent->getBrokerMode()) { currentVerticalPosition+=150; } else { if ( parent->getMiniMode() ) { currentVerticalPosition+=170; } else { currentVerticalPosition+=230; } } // x2goDebug<<"last session"<<(void*)lastSession<<"current"<<(void*)sessions[i]; sessions[i]->show(); if(lastSession == sessions[i]) { sessions[i]->hide(); } } if ( currentVerticalPosition ) { parent->getUsersFrame()->setFixedHeight ( currentVerticalPosition); } int id=findFolder(currentPath); if(id<0) return; if(getFolderChildren(folders[id]).length()<=0) slotLevelUp(); } //Folder is not empty if it has sessions or not empty subfdolders bool SessionExplorer::isFolderEmpty(FolderButton* folder) { QString normPath=(folder->getPath()+"/"+folder->getName()).split("/",QString::SkipEmptyParts).join("/"); for(int i=0; igetPath()==normPath) if(! isFolderEmpty(folders[i])) return false; } for(int i=0; igetPath()==normPath) return false; } return true; } QStringList SessionExplorer::getFolderChildren(FolderButton* folder) { QStringList children; QString normPath=(folder->getPath()+"/"+folder->getName()).split("/",QString::SkipEmptyParts).join("/"); for(int i=0; igetPath()==normPath) children<getName(); } for(int i=0; igetPath()==normPath) children<name(); } return children; } void SessionExplorer::slotDeleteButton ( SessionButton * bt ) { if ( QMessageBox::warning ( parent,bt->name(), tr ( "Are you sure you want to delete this session?" ), QMessageBox::Yes,QMessageBox::No ) !=QMessageBox::Yes ) return; X2goSettings st ( "sessions" ); st.setting()->beginGroup ( bt->id() ); st.setting()->remove ( "" ); st.setting()->sync(); sessions.removeAll ( bt ); bt->close(); placeButtons(); parent->getUsersArea()->ensureVisible ( 0,0,50,220 ); } void SessionExplorer::setNavigationVisible(bool value) { backButton->setVisible(value); pathLabel->setVisible(value); } void SessionExplorer::createFolder(QString path) { x2goDebug<<"Create Folder:"<getUsersFrame(),currentPath.join("/"), tails.last()); connect(fb, SIGNAL(folderSelected(FolderButton*)), this, SLOT(slotFolderSelected(FolderButton*))); folders<getPath()+"/"+folders[i]->getName()).split("/",QString::SkipEmptyParts).join("/"); if(normPath==path) return i; } return -1; } void SessionExplorer::slotFolderSelected(FolderButton* bt) { currentPath=(bt->getPath()+"/"+bt->getName()).split("/",QString::SkipEmptyParts).join("/"); placeButtons(); } void SessionExplorer::slotLevelUp() { QStringList levels=currentPath.split("/",QString::SkipEmptyParts); if(levels.count()) { levels.pop_back(); currentPath=levels.join("/"); } placeButtons(); } void SessionExplorer::setFolderIcon(QString path, QString icon) { QPixmap pix(icon); if(!pix.isNull()) { pix=pix.scaled(64,64,Qt::KeepAspectRatio, Qt::SmoothTransformation); path=path.split("/",QString::SkipEmptyParts).join("::"); X2goSettings *st; if (parent->getBrokerMode()) st=new X2goSettings(parent->getConfig()->iniFile,QSettings::IniFormat); else st= new X2goSettings( "sessions" ); QByteArray bytes; QBuffer buffer(&bytes); buffer.open(QIODevice::WriteOnly); pix.save(&buffer,"PNG"); x2goDebug<<"Save: "<setting()->setValue("icon_"+path, QString(bytes.toBase64())); st->setting()->sync(); FolderButton* b; foreach(b, folders) { if((b->getPath()+"/"+b->getName()).split("/",QString::SkipEmptyParts).join("::")==path) { b->loadIcon(); break; } } } } void SessionExplorer::createNewFolder(QString path) { X2goSettings *st; if (parent->getBrokerMode()) st=new X2goSettings(parent->getConfig()->iniFile,QSettings::IniFormat); else st= new X2goSettings( "sessions" ); if(findFolder(path)==-1) { QString name=path; name.replace("/","::"); st->setting()->setValue(name, QByteArray()); st->setting()->sync(); createFolder(path); placeButtons(); } } void SessionExplorer::renameFolder(QString oldPath, QString currentPath) { FolderButton* b; oldPath=oldPath.split("/",QString::SkipEmptyParts).join("/"); currentPath=currentPath.split("/",QString::SkipEmptyParts).join("/"); QStringList parts=oldPath.split("/",QString::SkipEmptyParts); QString oldName=parts.last(); parts.pop_back(); QString pathOfFolder=parts.join("/"); foreach(b, folders) { if(b->getPath()==pathOfFolder && b->getName()==oldName) { b->setName(currentPath.split("/",QString::SkipEmptyParts).last()); } if((b->getPath()+"/").indexOf(oldPath+"/")==0) { QString newPath=currentPath+b->getPath().mid(oldPath.length()); b->setPath(newPath); } } SessionButton* s; foreach(s, sessions) { if((s->getPath()+"/").indexOf(oldPath+"/")==0) { QString newPath=currentPath+s->getPath().mid(oldPath.length()); s->setPath(newPath); } } if((this->currentPath+"/").indexOf(oldPath+"/")==0) { this->currentPath=currentPath+this->currentPath.mid(oldPath.length()); } X2goSettings *st; if (parent->getBrokerMode()) st=new X2goSettings(parent->getConfig()->iniFile,QSettings::IniFormat); else st= new X2goSettings( "sessions" ); QStringList folders=st->setting()->childKeys(); QString folder; foreach(folder,folders) { QString fname=folder; folder.replace("::","/"); if((folder+"/").indexOf(oldPath+"/")==0) { QVariant value=st->setting()->value(fname); folder=currentPath+folder.mid(oldPath.length()); folder.replace("/","::"); st->setting()->setValue(folder,value); st->setting()->remove(fname); } } QStringList sessions=st->setting()->childGroups(); QString session; foreach(session, sessions) { QString sname=st->setting()->value(session+"/name").toString(); if((sname+"/").indexOf(oldPath+"/")==0) { sname=currentPath+sname.mid(oldPath.length()); st->setting()->setValue(session+"/name",sname); } } st->setting()->sync(); placeButtons(); } bool SessionExplorer::isFolderEmpty(QString path) { FolderButton* b; path=path.split("/",QString::SkipEmptyParts).join("/"); foreach(b, folders) { if(b->getPath()==path) { return false; } } SessionButton* s; foreach(s, sessions) { if(s->getPath()==path) { return false; } } return true; } void SessionExplorer::deleteFolder(QString path) { path=path.split("/",QString::SkipEmptyParts).join("::"); X2goSettings *st; if (parent->getBrokerMode()) st=new X2goSettings(parent->getConfig()->iniFile,QSettings::IniFormat); else st= new X2goSettings( "sessions" ); st->setting()->remove(path); path.replace("::","/"); for(int i=0; i< folders.count(); ++i) { FolderButton* b=folders[i]; if((b->getPath()+"/"+b->getName()).split("/",QString::SkipEmptyParts).join("/")==path) { b->close(); folders.removeAt(i); break; } } if(currentPath==path) { currentPath=""; } placeButtons(); } void SessionExplorer::setEnable(bool enable) { backButton->setEnabled(enable); runButton->setEnabled(enable); favButton->setEnabled(enable); allButton->setEnabled(enable); } void SessionExplorer::slotShowAll() { viewMode=ALL; updateView(); } void SessionExplorer::slotShowRun() { viewMode=RUN; updateView(); } void SessionExplorer::slotShowFav() { viewMode=FAV; updateView(); } x2goclient-4.1.2.3/src/sessionexplorer.h0000644000000000000000000000735514447111614015044 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef SESSIONEXPLORER_H #define SESSIONEXPLORER_H #include #include #include class SessionButton; class FolderButton; class ONMainWindow; class QToolButton; class QPushButton; class QLabel; class QHBoxLayout; class SessionExplorer: public QObject { Q_OBJECT public: SessionExplorer(ONMainWindow *p); ~SessionExplorer(); QList * getSessionsList() { return &sessions; } QList * getFoldersList() { return &folders; } SessionButton* getLastSession() { return lastSession; } void setLastSession(SessionButton* s) { lastSession=s; } void cleanSessions(); SessionButton* createBut ( const QString& id ); void placeButtons(); QHBoxLayout* getNavigationLayout() { return navigationLayout; } QHBoxLayout* getSelectLayout() { return selectLayout; } bool isFolderEmpty(QString path); void resize(); void setFolderIcon(QString path, QString icon); void createNewFolder(QString path); void renameFolder(QString oldPath, QString currentPath); void deleteFolder(QString path); void updateSessions(QStringList slst); QString getCurrentPath() { return currentPath; } void setCurrrentPath(QString path) { currentPath=path; } void setEnable(bool enable); //vars private: QList sessions; QList folders; SessionButton* lastSession; ONMainWindow* parent; QToolButton* backButton; QPushButton* favButton; QPushButton* runButton; QPushButton* allButton; QLabel* pathLabel; QHBoxLayout* navigationLayout; QHBoxLayout* selectLayout; QString currentPath; enum {ALL, FAV, RUN} viewMode; bool initUpdate; //functions private: void setNavigationVisible(bool value); int findFolder(QString path); void createFolder(QString path); void getFoldersFromConfig(); SessionButton* findSession( const QString& id); void checkPath(SessionButton* s); bool isFolderEmpty(FolderButton* folder); public slots: void slotDeleteButton ( SessionButton * bt ); void slotEdit ( SessionButton* ); void slotCreateDesktopIcon ( SessionButton* bt ); void exportsEdit ( SessionButton* bt ); private slots: void slotFolderSelected(FolderButton* bt); void slotLevelUp(); QStringList getFolderChildren(FolderButton* folder); void slotShowAll(); void slotShowRun(); void slotShowFav(); void updateView(); }; #endif x2goclient-4.1.2.3/src/sessionmanagedialog.cpp0000644000000000000000000002315314447111614016141 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include "x2goclientconfig.h" #include "sessionmanagedialog.h" #include "onmainwindow.h" #include "x2gologdebug.h" #include #include #include #include #include #include #include #include "sessionbutton.h" #include "folderbutton.h" #include "sessionexplorer.h" #define SESSIONROLE Qt::UserRole+1 #define SESSIONIDROLE Qt::UserRole+2 SessionManageDialog::SessionManageDialog ( QWidget * parent, bool onlyCreateIcon, Qt::WindowFlags f ) : QDialog ( parent, f ) { QVBoxLayout* ml=new QVBoxLayout ( this ); QFrame *fr=new QFrame ( this ); QHBoxLayout* frLay=new QHBoxLayout ( fr ); currentPath=""; QPushButton* ok=new QPushButton ( tr ( "E&xit" ),this ); QHBoxLayout* bLay=new QHBoxLayout(); sessions=new QTreeWidget ( fr ); frLay->addWidget ( sessions ); QPushButton* newSession=new QPushButton ( tr ( "&New session" ),fr ); editSession=new QPushButton ( tr ( "&Session preferences" ),fr ); removeSession=new QPushButton ( tr ( "&Delete session" ),fr ); #if (!defined Q_OS_DARWIN) if ( !ONMainWindow::getPortable() ) createSessionIcon=new QPushButton ( tr ( "&Create session icon on desktop ..." ),fr ); #endif par= ( ONMainWindow* ) parent; newSession->setIcon ( QIcon ( par->iconsPath ( "/16x16/new_file.png" ) ) ); editSession->setIcon ( QIcon ( par->iconsPath ( "/16x16/edit.png" ) ) ); #if (!defined Q_OS_DARWIN) if ( !ONMainWindow::getPortable() ) createSessionIcon->setIcon ( QIcon ( par->iconsPath ( "/16x16/create_file.png" ) ) ); #endif removeSession->setIcon ( QIcon ( par->iconsPath ( "/16x16/delete.png" ) ) ); QVBoxLayout* actLay=new QVBoxLayout(); actLay->addWidget ( newSession ); actLay->addWidget ( editSession ); actLay->addWidget ( removeSession ); #if (!defined Q_OS_DARWIN) if ( !ONMainWindow::getPortable() ) actLay->addWidget ( createSessionIcon ); #endif actLay->addStretch(); frLay->addLayout ( actLay ); if ( onlyCreateIcon ) { newSession->hide(); editSession->hide(); removeSession->hide(); } QShortcut* sc=new QShortcut ( QKeySequence ( tr ( "Delete","Delete" ) ),this ); connect ( ok,SIGNAL ( clicked() ),this,SLOT ( close() ) ); connect ( sc,SIGNAL ( activated() ),removeSession,SIGNAL ( clicked() ) ); connect ( removeSession,SIGNAL ( clicked() ),this,SLOT ( slot_delete() ) ); connect ( editSession,SIGNAL ( clicked() ),this,SLOT ( slot_edit() ) ); #if (!defined Q_OS_DARWIN) if ( !ONMainWindow::getPortable() ) connect ( createSessionIcon,SIGNAL ( clicked() ), this,SLOT ( slot_createSessionIcon() ) ); #endif connect ( newSession,SIGNAL ( clicked() ),this,SLOT ( slotNew() ) ); bLay->setSpacing ( 5 ); bLay->addStretch(); bLay->addWidget ( ok ); ml->addWidget ( fr ); ml->addLayout ( bLay ); fr->setFrameStyle ( QFrame::StyledPanel | QFrame::Raised ); fr->setLineWidth ( 2 ); setSizeGripEnabled ( true ); setWindowIcon ( QIcon ( ( ( ONMainWindow* ) parent )->iconsPath ( "/32x32/edit.png" ) ) ); setWindowTitle ( tr ( "Session management" ) ); loadSessions(); connect (sessions, SIGNAL (itemPressed (QTreeWidgetItem *, int)), this, SLOT (slot_endisable (QTreeWidgetItem *, int))); connect (sessions, SIGNAL (itemActivated (QTreeWidgetItem *, int)), this, SLOT (slot_endisable (QTreeWidgetItem *, int))); connect (sessions, SIGNAL (itemChanged (QTreeWidgetItem *, int)), this, SLOT (slot_endisable (QTreeWidgetItem *, int))); connect (sessions, SIGNAL (currentItemChanged (QTreeWidgetItem *, QTreeWidgetItem *)), this, SLOT (slot_endisable_ItemChanged_wrapper (QTreeWidgetItem *, QTreeWidgetItem *))); connect (sessions,SIGNAL (itemDoubleClicked (QTreeWidgetItem *, int)), this, SLOT (slot_dclicked (QTreeWidgetItem *, int))); } SessionManageDialog::~SessionManageDialog() {} void SessionManageDialog::loadSessions() { sessions->clear(); /*const QList *sess=par->getSessionExplorer()->getSessionsList();*/ /*const QList *folders=par->getSessionExplorer()->getFoldersList();*/ removeSession->setEnabled ( false ); editSession->setEnabled ( false ); #if (!defined Q_OS_DARWIN) if ( !ONMainWindow::getPortable() ) createSessionIcon->setEnabled ( false ); #endif QTreeWidgetItem* root; root=new QTreeWidgetItem(sessions); root->setText(0,"/"); root->setIcon(0,QIcon(par->iconsPath("/128x128/folder.png"))); initFolders(root, ""); root->setExpanded(true); root->setData(0, SESSIONROLE , false); sessions->setRootIsDecorated(false); sessions->setHeaderHidden(true); } void SessionManageDialog::initFolders(QTreeWidgetItem* parent, QString path) { FolderButton* b; foreach(b, *(par->getSessionExplorer()->getFoldersList())) { if(b->getPath()==path) { QTreeWidgetItem* it=new QTreeWidgetItem(parent); it->setText(0,b->getName()); it->setIcon(0, QIcon(*(b->folderIcon()))); QString normPath=(b->getPath()+"/"+b->getName()).split("/",QString::SkipEmptyParts).join("/"); it->setData(0,Qt::UserRole, normPath+"/"); it->setData(0, SESSIONROLE , false); initFolders(it, normPath); } } for(int i=0; i< par->getSessionExplorer()->getSessionsList()->count(); ++i) { SessionButton* s=par->getSessionExplorer()->getSessionsList()->at(i); if(s->getPath()==path) { QTreeWidgetItem* it=new QTreeWidgetItem(parent); it->setText(0,s->name()); it->setIcon(0, QIcon(*(s->sessIcon()))); QString normPath=(s->getPath()+"/"+s->name()).split("/",QString::SkipEmptyParts).join("/"); it->setData(0,Qt::UserRole, normPath+"/"); it->setData(0, SESSIONROLE, true); it->setData(0, SESSIONIDROLE, i); initFolders(it, normPath); } } } void SessionManageDialog::slot_endisable ( QTreeWidgetItem* item, int col) { Q_UNUSED (col); bool isSess=(item && item->data(0, SESSIONROLE).toBool()); x2goDebug << "slot_endisable: isSess: " << isSess; if(!isSess) { if(item) currentPath=item->data(0,Qt::UserRole).toString().split("/",QString::SkipEmptyParts).join("/"); else currentPath="/"; x2goDebug << "slot_endisable: no session, currentPath(?): " << currentPath; } removeSession->setEnabled ( isSess ); editSession->setEnabled ( isSess ); #if (!defined Q_OS_DARWIN) if ( !ONMainWindow::getPortable() ) createSessionIcon->setEnabled ( isSess ); #endif } void SessionManageDialog::slot_endisable_ItemChanged_wrapper (QTreeWidgetItem *item, QTreeWidgetItem *) { /* * The int parameter of slot_endisable is unused anyway, * just use the default value in this special case. */ slot_endisable (item); } void SessionManageDialog::slot_dclicked ( QTreeWidgetItem* item, int ) { if(item->data(0, SESSIONROLE).toBool()) slot_edit(); } void SessionManageDialog::slotNew() { par->getSessionExplorer()->setCurrrentPath(currentPath); par->slotNewSession(); loadSessions(); } void SessionManageDialog::slot_edit() { if((! sessions->currentItem()) || (! sessions->currentItem()->data(0, SESSIONROLE).toBool())) return; int ind=sessions->currentItem()->data(0, SESSIONIDROLE).toInt(); par->getSessionExplorer()->slotEdit ( par->getSessionExplorer()->getSessionsList()->at ( ind ) ); loadSessions(); } void SessionManageDialog::slot_createSessionIcon() { if((! sessions->currentItem()) || (! sessions->currentItem()->data(0, SESSIONROLE).toBool())) return; int ind=sessions->currentItem()->data(0, SESSIONIDROLE).toInt(); par->getSessionExplorer()->slotCreateDesktopIcon ( par->getSessionExplorer()->getSessionsList()->at ( ind ) ); } void SessionManageDialog::slot_delete() { if((! sessions->currentItem()) || (! sessions->currentItem()->data(0, SESSIONROLE).toBool())) return; int ind=sessions->currentItem()->data(0, SESSIONIDROLE).toInt(); par->getSessionExplorer()->slotDeleteButton ( par->getSessionExplorer()->getSessionsList()->at ( ind ) ); loadSessions(); } x2goclient-4.1.2.3/src/sessionmanagedialog.h0000644000000000000000000000446314447111614015611 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef SESSIONMANAGEDIALOG_H #define SESSIONMANAGEDIALOG_H #include "x2goclientconfig.h" #include class QTreeWidget; class QTreeWidgetItem; class QPushButton; class QModelIndex; class ONMainWindow; /** @author Oleksandr Shneyder */ class SessionManageDialog : public QDialog { Q_OBJECT public: SessionManageDialog ( QWidget * parent, bool onlyCreateIcon=false, Qt::WindowFlags f=0 ); ~SessionManageDialog(); void loadSessions(); private: void initFolders(QTreeWidgetItem* parent, QString path); private: QTreeWidget* sessions; QPushButton* editSession; QPushButton* removeSession; QPushButton* createSessionIcon; ONMainWindow* par; QString currentPath; private slots: void slot_endisable (QTreeWidgetItem *item, int col = -1); void slot_endisable_ItemChanged_wrapper (QTreeWidgetItem *item, QTreeWidgetItem *); void slotNew(); void slot_edit(); void slot_createSessionIcon(); void slot_delete(); void slot_dclicked ( QTreeWidgetItem * item, int ); }; #endif x2goclient-4.1.2.3/src/sessionwidget.cpp0000644000000000000000000010031614447111614015011 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include "sessionwidget.h" #include "x2goutils.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include "onmainwindow.h" #include "x2gosettings.h" #include #include #include #include "folderexplorer.h" #include "sessionexplorer.h" SessionWidget::SessionWidget ( bool newSession, QString id, ONMainWindow * mw, QWidget * parent, Qt::WindowFlags f ) : ConfigWidget ( id,mw,parent,f ) { QVBoxLayout* sessLay=new QVBoxLayout ( this ); this->parent=mw; this->newSession=newSession; sessName=new QLineEdit ( this ); icon=new QPushButton ( QString::null,this ); if ( !miniMode ) { icon->setIconSize ( QSize ( 100,100 ) ); icon->setFixedSize ( 100,100 ); } else { icon->setIconSize ( QSize ( 48,48 ) ); icon->setFixedSize ( 48,48 ); } icon->setFlat ( true ); QHBoxLayout* slay=new QHBoxLayout(); slay->addWidget ( new QLabel ( tr ( "Session name:" ),this ) ); slay->addWidget ( sessName ); QHBoxLayout* ilay=new QHBoxLayout(); ilay->addWidget ( icon ); ilay->addWidget ( new QLabel ( tr ( "<< change icon" ),this ) ); lPath=new QLabel(this); lPath->setFrameStyle(QFrame::StyledPanel); QPushButton* pathButton=new QPushButton("...",this); QHBoxLayout* pathLay=new QHBoxLayout(); pathLay->addWidget(new QLabel(tr("Path:"), this),0); pathLay->addWidget(lPath,1); pathLay->addWidget(pathButton,0); QGroupBox *sgb=new QGroupBox ( tr ( "&Server" ),this ); const QString ssh_port_tooltip_text = tr ("Values ranging from 0 to 65535 are allowed." "
A value of 0 will either use the port specified in the " "SSH configuration file belonging to a host or shortname, " "or use the default of 22."); server=new QLineEdit ( sgb ); uname=new QLineEdit ( sgb ); sshPort=new QSpinBox ( sgb ); sshPort->setValue ( mainWindow->getDefaultSshPort().toInt() ); sshPort->setMinimum ( 0 ); sshPort->setMaximum ( 65535 ); sshPort->setToolTip (ssh_port_tooltip_text); #ifdef Q_OS_LINUX rdpPort=new QSpinBox ( sgb ); rdpPort->setValue ( mainWindow->getDefaultSshPort().toInt() ); rdpPort->setMinimum ( 0 ); rdpPort->setMaximum ( 65535 ); rdpPort->setToolTip (ssh_port_tooltip_text); #endif key=new QLineEdit ( sgb ); openKey=new QPushButton ( QIcon ( mainWindow->iconsPath ( "/32x32/file-open.png" ) ), QString::null,sgb ); QVBoxLayout *sgbLay = new QVBoxLayout ( sgb ); QHBoxLayout *suLay =new QHBoxLayout(); QVBoxLayout *slLay =new QVBoxLayout(); QVBoxLayout *elLay =new QVBoxLayout(); slLay->addWidget ( new QLabel ( tr ( "Host:" ),sgb ) ); lLogin= new QLabel ( tr ( "Login:" ),sgb ); slLay->addWidget (lLogin ); lPort=new QLabel ( tr ( "SSH port:" ),sgb ); slLay->addWidget ( lPort ); elLay->addWidget ( server ); elLay->addWidget ( uname ); elLay->addWidget ( sshPort ); #ifdef Q_OS_LINUX elLay->addWidget ( rdpPort ); #endif suLay->addLayout ( slLay ); suLay->addLayout ( elLay ); QHBoxLayout *keyLay =new QHBoxLayout(); lKey=new QLabel ( tr ( "Use RSA/DSA key for ssh connection:" ),sgb ); keyLay->addWidget (lKey ); keyLay->addWidget ( key ); keyLay->addWidget ( openKey ); sgbLay->addLayout ( suLay ); sgbLay->addLayout ( keyLay ); cbAutoLogin=new QCheckBox(tr("Try auto login (via SSH Agent or default SSH key)"),sgb); cbKrbLogin=new QCheckBox(tr("Kerberos 5 (GSSAPI) authentication"),sgb); cbKrbDelegation=new QCheckBox(tr("Delegation of GSSAPI credentials to the server"),sgb); sgbLay->addWidget(cbAutoLogin); sgbLay->addWidget(cbKrbLogin); sgbLay->addWidget(cbKrbDelegation); cbProxy=new QCheckBox(tr("Use Proxy server for SSH connection"),sgb); proxyBox=new QGroupBox(tr("Proxy server"),sgb); sgbLay->addWidget(cbProxy); sgbLay->addWidget(proxyBox); QGridLayout* proxyLaout=new QGridLayout(proxyBox); QButtonGroup* proxyType=new QButtonGroup(proxyBox); proxyType->setExclusive(true); rbSshProxy=new QRadioButton(tr("SSH"),proxyBox); rbHttpProxy=new QRadioButton(tr("HTTP"),proxyBox); proxyType->addButton(rbSshProxy); proxyType->addButton(rbHttpProxy); proxyHost=new QLineEdit(proxyBox); proxyPort=new QSpinBox(proxyBox); proxyPort->setMinimum ( 0 ); proxyPort->setMaximum ( 65535 ); proxyPort->setToolTip (ssh_port_tooltip_text); cbProxySameUser=new QCheckBox(tr("Same login as on X2Go Server"), proxyBox); proxyLogin=new QLineEdit(proxyBox); cbProxySamePass=new QCheckBox(tr("Same password as on X2Go Server"), proxyBox); proxyKeyLabel=new QLabel( tr ( "RSA/DSA key:" ), proxyBox); proxyKey=new QLineEdit(proxyBox); pbOpenProxyKey=new QPushButton ( QIcon ( mainWindow->iconsPath ( "/16x16/file-open.png" ) ), QString::null,proxyBox ); cbProxyAutologin=new QCheckBox(tr("SSH Agent or default SSH key"),proxyBox); cbProxyKrbLogin=new QCheckBox(tr("Kerberos 5 (GSSAPI) authentication"),proxyBox); proxyLaout->addWidget(new QLabel(tr("Type:"),proxyBox),0,0,1,2); proxyLaout->addWidget(rbSshProxy,1,0,1,2); proxyLaout->addWidget(rbHttpProxy,2,0,1,2); proxyLaout->addWidget(new QLabel(tr("Host:"),proxyBox),3,0); proxyLaout->addWidget(new QLabel(tr("Port:"),proxyBox),4,0); proxyLaout->addWidget(proxyHost,3,1); proxyLaout->addWidget(proxyPort,4,1); proxyLaout->addWidget(cbProxySameUser,0,3,1,3); proxyLaout->addWidget(lProxyLogin=new QLabel(tr("Login:"),proxyBox),1,3,1,1); proxyLaout->addWidget(proxyLogin,1,4,1,2); proxyLaout->addWidget(cbProxySamePass,2,3,1,3); proxyLaout->addWidget(proxyKeyLabel,3,3,1,1); proxyLaout->addWidget(proxyKey,3,4,1,1); proxyLaout->addWidget(pbOpenProxyKey,3,5,1,1); proxyLaout->addWidget(cbProxyAutologin,4,3,1,3); proxyLaout->addWidget(cbProxyKrbLogin,5,3,1,3); QGroupBox *deskSess=new QGroupBox ( tr ( "&Session type" ),this ); QGridLayout* cmdLay=new QGridLayout ( deskSess ); cbKdrive=new QCheckBox(tr("Run in X2GoKDrive (experimental)")); sessBox=new QComboBox ( deskSess ); cmd=new QLineEdit ( deskSess ); cmdCombo=new QComboBox ( deskSess ); cmdCombo->setEditable ( true ); sessBox->addItem ( "KDE" ); sessBox->addItem ( "GNOME" ); sessBox->addItem ( "LXDE" ); sessBox->addItem ("LXQt"); sessBox->addItem ( "XFCE" ); sessBox->addItem ( "MATE" ); sessBox->addItem ( "UNITY" ); sessBox->addItem ( "CINNAMON" ); sessBox->addItem ( "TRINITY" ); sessBox->addItem ( "OPENBOX" ); sessBox->addItem ( "ICEWM" ); sessBox->addItem ( tr ( "Connect to Windows Terminal Server" ) ); sessBox->addItem ( tr ( "XDMCP" ) ); sessBox->addItem ( tr ( "X2Go/X11 Desktop Sharing" ) ); sessBox->addItem ( tr ( "Custom desktop" ) ); sessBox->addItem ( tr ( "Single application" ) ); sessBox->addItem ( tr ( "Published applications" ) ); cmdLay->addWidget ( cbKdrive,0,1,Qt::AlignLeft ); cmdLay->addWidget ( sessBox,1,1,Qt::AlignLeft ); leCmdIp=new QLabel ( tr ( "Command:" ),deskSess ); pbAdvanced=new QPushButton ( tr ( "Advanced options..." ),deskSess ); cmdLay->addWidget ( leCmdIp,1,2 ); cmdLay->setColumnStretch(6,1); cmdLay->addWidget ( cmd ,1,3); cmdLay->addWidget ( cmdCombo,1,4 ); cmdLay->addWidget ( pbAdvanced ,1,5); cmdCombo->setSizePolicy ( QSizePolicy::Expanding, QSizePolicy::Preferred ); cmdCombo->hide(); pbAdvanced->hide(); cmdCombo->addItem ( "" ); cmdCombo->addItems ( mainWindow->transApplicationsNames() ); cmdCombo->lineEdit()->setText ( tr ( "Path to executable" ) ); cmdCombo->lineEdit()->selectAll(); sessLay->addLayout ( slay ); sessLay->addLayout ( ilay ); sessLay->addLayout ( pathLay ); if ( !miniMode ) sessLay->addSpacing ( 15 ); sessLay->addWidget ( sgb ); sessLay->addWidget ( deskSess ); #ifdef Q_OS_LINUX cbDirectRDP=new QCheckBox(tr("Direct RDP connection"), deskSess); cmdLay->addWidget(cbDirectRDP,2,0,1,6); cbDirectRDP->hide(); connect(cbDirectRDP,SIGNAL(clicked()), this, SLOT(slot_rdpDirectClicked())); #endif sessLay->addStretch(); connect ( icon,SIGNAL ( clicked() ),this,SLOT ( slot_getIcon() ) ); connect ( openKey,SIGNAL ( clicked() ),this,SLOT ( slot_getKey() ) ); connect ( pbAdvanced,SIGNAL ( clicked() ),this, SLOT ( slot_rdpOptions() ) ); connect ( sessBox,SIGNAL ( activated ( int ) ),this, SLOT ( slot_changeCmd ( int ) ) ); connect ( sessName,SIGNAL ( textChanged ( const QString & ) ),this, SIGNAL ( nameChanged ( const QString & ) ) ); connect (server, SIGNAL(textChanged(const QString&)),this, SLOT(slot_emitSettings())); connect (uname, SIGNAL(textChanged(const QString&)),this, SLOT(slot_emitSettings())); connect (cbKrbLogin, SIGNAL(clicked(bool)), this, SLOT(slot_krbChecked())); #ifdef Q_OS_LINUX connect (rdpPort, SIGNAL(valueChanged(int)),this, SLOT(slot_emitSettings())); #endif connect ( pbOpenProxyKey,SIGNAL ( clicked() ),this,SLOT ( slot_proxyGetKey()) ); connect ( proxyType, SIGNAL ( buttonClicked(int)) ,this,SLOT ( slot_proxyType())); connect (cbProxy, SIGNAL(clicked(bool)), this, SLOT(slot_proxyOptions())); connect (cbProxySameUser, SIGNAL(clicked(bool)), this, SLOT(slot_proxySameLogin())); connect ( pathButton, SIGNAL(clicked(bool)), this, SLOT(slot_openFolder())); readConfig(); } SessionWidget::~SessionWidget() { } void SessionWidget::slot_proxyGetKey() { QString path; QString startDir=ONMainWindow::getHomeDirectory(); #ifdef Q_OS_WIN if ( ONMainWindow::getPortable() && ONMainWindow::U3DevicePath().length() >0 ) { startDir=ONMainWindow::U3DevicePath() +"/"; } #endif path = QFileDialog::getOpenFileName ( this, tr ( "Open key file" ), startDir, tr ( "All files" ) +" (*)" ); if ( path!=QString::null ) { #ifdef Q_OS_WIN if ( ONMainWindow::getPortable() && ONMainWindow::U3DevicePath().length() >0 ) { if ( path.indexOf ( ONMainWindow::U3DevicePath() ) !=0 ) { QMessageBox::critical ( 0l,tr ( "Error" ), tr ( "X2Go Client is running in " "portable mode. You should " "use a path on your USB device " "to be able to access your data " "wherever you are." ), QMessageBox::Ok,QMessageBox::NoButton ); slot_getKey(); return; } path.replace ( ONMainWindow::U3DevicePath(), "(U3)" ); } #endif proxyKey->setText ( path ); } } void SessionWidget::slot_proxyOptions() { proxyBox->setVisible(cbProxy->isChecked() && cbProxy->isVisible()); } void SessionWidget::slot_proxySameLogin() { lProxyLogin->setDisabled(cbProxySameUser->isChecked()); proxyLogin->setDisabled(cbProxySameUser->isChecked()); } void SessionWidget::slot_proxyType() { bool isSsh=rbSshProxy->isChecked(); cbProxyAutologin->setVisible(isSsh); cbProxyKrbLogin->setVisible(isSsh); proxyKey->setVisible(isSsh); proxyKeyLabel->setVisible(isSsh); pbOpenProxyKey->setVisible(isSsh); } #ifdef Q_OS_LINUX void SessionWidget::slot_rdpDirectClicked() { bool isDirectRDP=cbDirectRDP->isChecked(); bool isXDMCP=false; if(sessBox->currentText()== tr("XDMCP")) { cbDirectRDP->setText( tr("Direct XDMCP connection")); isXDMCP=true; } else { cbDirectRDP->setText( tr("Direct RDP connection")); } if (cbDirectRDP->isHidden()) isDirectRDP=false; pbAdvanced->setVisible((!isDirectRDP) && (sessBox->currentIndex()==RDP)); leCmdIp->setVisible(!isDirectRDP); cmd->setVisible(!isDirectRDP); key->setVisible(!isDirectRDP); cbAutoLogin->setVisible(!isDirectRDP); lKey->setVisible(!isDirectRDP); openKey->setVisible(!isDirectRDP); sshPort->setVisible(!isDirectRDP); rdpPort->setVisible(isDirectRDP && (!isXDMCP)); lPort->setVisible(!(isDirectRDP && isXDMCP)); cbKrbDelegation->setVisible(!isDirectRDP); cbKrbLogin->setVisible(!isDirectRDP); cbProxy->setVisible(!isDirectRDP); proxyBox->setVisible(!isDirectRDP && cbProxy->isChecked()); if (isDirectRDP) { lPort->setText(tr("RDP port:")); } else { lPort->setText(tr("SSH port:")); } lLogin->setVisible(!(isXDMCP&&isDirectRDP)); uname->setVisible(!(isXDMCP&&isDirectRDP)); emit directRDP(isDirectRDP, isXDMCP); slot_emitSettings(); } #endif void SessionWidget::slot_getIcon() { QString path= QFileDialog::getOpenFileName ( this, tr ( "Open picture" ), QDir::homePath(), tr ( "Pictures" ) +" (*.png *.xpm *.jpg)" ); if ( path!=QString::null ) { sessIcon = wrap_legacy_resource_URIs (path); icon->setIcon ( QIcon ( sessIcon ) ); } } void SessionWidget::slot_getKey() { QString path; QString startDir=ONMainWindow::getHomeDirectory(); #ifdef Q_OS_WIN if ( ONMainWindow::getPortable() && ONMainWindow::U3DevicePath().length() >0 ) { startDir=ONMainWindow::U3DevicePath() +"/"; } #endif path = QFileDialog::getOpenFileName ( this, tr ( "Open key file" ), startDir, tr ( "All files" ) +" (*)" ); if ( path!=QString::null ) { #ifdef Q_OS_WIN if ( ONMainWindow::getPortable() && ONMainWindow::U3DevicePath().length() >0 ) { if ( path.indexOf ( ONMainWindow::U3DevicePath() ) !=0 ) { QMessageBox::critical ( 0l,tr ( "Error" ), tr ( "X2Go Client is running in " "portable mode. You should " "use a path on your USB device " "to be able to access your data " "wherever you are." ), QMessageBox::Ok,QMessageBox::NoButton ); slot_getKey(); return; } path.replace ( ONMainWindow::U3DevicePath(), "(U3)" ); } #endif key->setText ( path ); } } void SessionWidget::slot_changeCmd ( int var ) { leCmdIp->setText ( tr ( "Command:" ) ); pbAdvanced->hide(); #ifdef Q_OS_LINUX cbDirectRDP->hide(); #endif leCmdIp->show(); cmd->show(); if ( var==APPLICATION ) { cmd->hide(); cmdCombo->setVisible ( true ); cmdCombo->setEnabled(true); cmdCombo->lineEdit()->selectAll(); cmdCombo->lineEdit()->setFocus(); } else { cmdCombo->hide(); cmd->setVisible ( true ); if ( var==OTHER || var == RDP || var == XDMCP ) { cmd->setText ( "" ); cmd->setEnabled ( true ); cmd->selectAll(); cmd->setFocus(); if ( var==RDP ) { leCmdIp->setText ( tr ( "Server:" ) ); pbAdvanced->show(); cmd->setText ( rdpServer ); #ifdef Q_OS_LINUX cbDirectRDP->show(); #endif } if ( var== XDMCP ) { leCmdIp->setText ( tr ( "XDMCP server:" ) ); cmd->setText ( xdmcpServer ); #ifdef Q_OS_LINUX cbDirectRDP->show(); cbDirectRDP->setText(tr ("direct XDMCP connection")); #endif } } else { cmd->setEnabled ( false ); cmd->setText ( "" ); } } #ifdef Q_OS_LINUX slot_rdpDirectClicked(); #endif } void SessionWidget::slot_rdpOptions() { bool ok; QString text = QInputDialog::getText ( this, tr ( "Connect to Windows Terminal Server" ), tr ( "rdesktop command line options:" ), QLineEdit::Normal, rdpOptions, &ok ); rdpOptions= text; } void SessionWidget::readConfig() { X2goSettings st ( "sessions" ); QString name=st.setting()->value ( sessionId+"/name", ( QVariant ) tr ( "New session" ) ).toString().trimmed(); QStringList tails=name.split("/",QString::SkipEmptyParts); QString path; if(tails.count()>0) { name=tails.last(); tails.pop_back(); path=tails.join("/")+"/"; } lPath->setText(path); if(newSession) lPath->setText(parent->getSessionExplorer()->getCurrentPath()+"/"); sessName->setText (name); sessIcon = wrap_legacy_resource_URIs (st.setting ()->value (sessionId+"/icon", (QVariant) parent->iconsPath("/128x128/x2gosession.png") ).toString ().trimmed ()); sessIcon = expandHome (sessIcon); if(sessIcon == ":/img/icons/128x128/x2gosession.png") { sessIcon=parent->iconsPath("/128x128/x2gosession.png"); } icon->setIcon ( QIcon ( sessIcon ) ); server->setText ( st.setting()->value ( sessionId+"/host", ( QVariant ) QString::null ).toString().trimmed() ); uname->setText ( st.setting()->value ( sessionId+"/user", ( QVariant ) QString::null ).toString().trimmed() ); key->setText ( st.setting()->value ( sessionId+"/key", ( QVariant ) QString::null ).toString().trimmed() ); cbAutoLogin->setChecked(st.setting()->value ( sessionId+"/autologin", ( QVariant ) false ).toBool()); cbKrbLogin->setChecked(st.setting()->value ( sessionId+"/krblogin", ( QVariant ) false ).toBool()); cbKrbDelegation->setChecked(st.setting()->value ( sessionId+"/krbdelegation", ( QVariant ) false ).toBool()); sshPort->setValue ( st.setting()->value ( sessionId+"/sshport", ( QVariant ) mainWindow->getDefaultSshPort().toInt() ).toInt() ); #ifdef Q_OS_LINUX rdpPort->setValue ( st.setting()->value ( sessionId+"/rdpport",3389 ).toInt() ); #endif cbProxy->setChecked(st.setting()->value ( sessionId+"/usesshproxy", false ).toBool() ); QString prtype= st.setting()->value ( sessionId+"/sshproxytype", "SSH" ).toString().trimmed() ; if(prtype=="HTTP") { rbHttpProxy->setChecked(true); } else { rbSshProxy->setChecked(true); } proxyLogin->setText(st.setting()->value ( sessionId+"/sshproxyuser", QString() ).toString().trimmed() ); proxyKey->setText(st.setting()->value ( sessionId+"/sshproxykeyfile", QString() ).toString().trimmed() ); proxyHost->setText(st.setting()->value ( sessionId+"/sshproxyhost", QString() ).toString().trimmed() ); proxyPort->setValue(st.setting()->value ( sessionId+"/sshproxyport", 22 ).toInt() ); cbProxySamePass->setChecked(st.setting()->value ( sessionId+"/sshproxysamepass", false ).toBool() ); cbProxySameUser->setChecked(st.setting()->value ( sessionId+"/sshproxysameuser", false ).toBool() ); cbProxyAutologin->setChecked(st.setting()->value ( sessionId+"/sshproxyautologin", false ).toBool() ); cbProxyKrbLogin->setChecked(st.setting()->value ( sessionId+"/sshproxykrblogin", false ).toBool() ); QTimer::singleShot(1, this,SLOT(slot_proxySameLogin())); QTimer::singleShot(2, this,SLOT(slot_proxyType())); QTimer::singleShot(3, this,SLOT(slot_proxyOptions())); QStringList appNames=st.setting()->value ( sessionId+"/applications" ).toStringList(); bool rootless=st.setting()->value ( sessionId+"/rootless",false ).toBool(); bool published=st.setting()->value ( sessionId+"/published",false ).toBool(); QString command=st.setting()->value ( sessionId+"/command", ( QVariant ) mainWindow->getDefaultCmd() ).toString().trimmed(); rdpOptions=st.setting()->value ( sessionId+"/rdpoptions", ( QVariant ) "" ).toString().trimmed(); rdpServer=st.setting()->value ( sessionId+"/rdpserver", ( QVariant ) "" ).toString().trimmed(); xdmcpServer=st.setting()->value ( sessionId+"/xdmcpserver", ( QVariant ) "localhost" ).toString().trimmed(); #ifdef Q_OS_LINUX if(st.setting()->value (sessionId+"/directrdp",false ).toBool()) { cbDirectRDP->setChecked(true); } if(st.setting()->value (sessionId+"/directxdmcp",false ).toBool()) { cbDirectRDP->setChecked(true); } #endif for ( int i=0; itransAppName ( appNames[i] ); if ( cmdCombo->findText ( app ) ==-1 ) cmdCombo->addItem ( app ); } if ( published ) { sessBox->setCurrentIndex( PUBLISHED ); cmdCombo->setDisabled(true); slot_changeCmd(PUBLISHED); } else if ( rootless ) { sessBox->setCurrentIndex ( APPLICATION ); QString app=mainWindow->transAppName ( command ); cmdCombo->lineEdit()->setText ( app ); slot_changeCmd ( APPLICATION ); } else { if ( command=="KDE" ) { sessBox->setCurrentIndex ( KDE ); cmd->setEnabled ( false ); } else if ( command=="GNOME" ) { sessBox->setCurrentIndex ( GNOME ); cmd->setEnabled ( false ); } else if ( command=="LXDE" ) { sessBox->setCurrentIndex ( LXDE ); cmd->setEnabled ( false ); } else if (command == "LXQt") { sessBox->setCurrentIndex (LXQt); cmd->setEnabled (false); } else if ( command=="UNITY" ) { sessBox->setCurrentIndex ( UNITY ); cmd->setEnabled ( false ); } else if ( command=="XFCE" ) { sessBox->setCurrentIndex ( XFCE ); cmd->setEnabled ( false ); } else if ( command=="SHADOW" ) { sessBox->setCurrentIndex ( SHADOW ); cmd->setEnabled ( false ); } else if ( command=="RDP" ) { leCmdIp->setText ( tr ( "Server:" ) ); sessBox->setCurrentIndex ( RDP ); cmd->setEnabled ( true ); cmd->setText ( rdpServer ); pbAdvanced->show(); #ifdef Q_OS_LINUX cbDirectRDP->show(); slot_rdpDirectClicked(); #endif } else if ( command=="XDMCP" ) { leCmdIp->setText ( tr ( "XDMCP server:" ) ); sessBox->setCurrentIndex ( XDMCP ); cmd->setEnabled ( true ); cmd->setText ( xdmcpServer ); #ifdef Q_OS_LINUX cbDirectRDP->show(); slot_rdpDirectClicked(); #endif } else { cmd->setText ( command ); sessBox->setCurrentIndex ( OTHER ); cmd->setEnabled ( true ); } } if ( sessName->text() ==tr ( "New session" ) ) { sessName->selectAll(); sessName->setFocus(); } cbKdrive->setChecked(st.setting()->value (sessionId+"/kdrive", false).toBool() ); #ifdef Q_OS_LINUX slot_rdpDirectClicked(); #endif slot_krbChecked(); } void SessionWidget::setDefaults() { cmd->setText ( "" ); sessBox->setCurrentIndex ( KDE ); cmdCombo->clear(); cmdCombo->addItem ( "" ); cbKdrive->setChecked(false); cmdCombo->addItems ( mainWindow->transApplicationsNames() ); cbAutoLogin->setChecked(false); cbKrbLogin->setChecked(false); cmdCombo->lineEdit()->setText ( tr ( "Path to executable" ) ); cmdCombo->lineEdit()->selectAll(); slot_changeCmd ( 0 ); cmd->setEnabled ( false ); sessIcon=parent->iconsPath("/128x128/x2gosession.png"); icon->setIcon ( QIcon ( sessIcon ) ); sshPort->setValue ( mainWindow->getDefaultSshPort().toInt() ); #ifdef Q_OS_LINUX rdpPort->setValue (3389); #endif cbProxy->setChecked(false); rbSshProxy->setChecked(true); proxyKey->setText(QString::null); proxyPort->setValue(22); cbProxySamePass->setChecked(false); cbProxySameUser->setChecked(false); cbProxyAutologin->setChecked(false); cbProxyKrbLogin->setChecked(false); QTimer::singleShot(1, this,SLOT(slot_proxySameLogin())); QTimer::singleShot(2, this,SLOT(slot_proxyType())); QTimer::singleShot(3, this,SLOT(slot_proxyOptions())); } void SessionWidget::saveSettings() { X2goSettings st ( "sessions" ); QString normPath=(lPath->text()+"/"+sessName->text()).split("/",QString::SkipEmptyParts).join("/"); st.setting()->setValue ( sessionId+"/name", ( QVariant ) normPath.trimmed() ); st.setting()->setValue ( sessionId+"/icon", ( QVariant ) sessIcon ); st.setting()->setValue ( sessionId+"/host", ( QVariant ) server->text().trimmed() ); st.setting()->setValue ( sessionId+"/user", ( QVariant ) uname->text().trimmed() ); st.setting()->setValue ( sessionId+"/key", ( QVariant ) key->text().trimmed() ); #ifdef Q_OS_LINUX st.setting()->setValue ( sessionId+"/rdpport", ( QVariant ) rdpPort->value() ); #endif st.setting()->setValue ( sessionId+"/sshport", ( QVariant ) sshPort->value() ); st.setting()->setValue(sessionId+"/autologin",( QVariant ) cbAutoLogin->isChecked()); st.setting()->setValue(sessionId+"/krblogin",( QVariant ) cbKrbLogin->isChecked()); st.setting()->setValue(sessionId+"/krbdelegation",( QVariant ) cbKrbDelegation->isChecked()); #ifdef Q_OS_LINUX st.setting()->setValue(sessionId+"/directrdp",( QVariant ) cbDirectRDP->isChecked()); st.setting()->setValue(sessionId+"/directxdmcp",( QVariant ) cbDirectRDP->isChecked()); #endif st.setting()->setValue(sessionId+"/kdrive",( QVariant ) cbKdrive->isChecked()); QString command; bool rootless=false; bool published=false; if ( sessBox->currentIndex() < OTHER ) command=sessBox->currentText(); else command=cmd->text().trimmed(); if ( sessBox->currentIndex() == RDP ) { command="RDP"; rdpServer=cmd->text().trimmed(); } if ( sessBox->currentIndex() == XDMCP ) { command="XDMCP"; xdmcpServer=cmd->text().trimmed(); } if ( sessBox->currentIndex() == SHADOW ) { command="SHADOW"; } QStringList appList; for ( int i=-1; icount(); ++i ) { QString app; if ( i==-1 ) app=mainWindow->internAppName ( cmdCombo->lineEdit()->text () ); else app=mainWindow->internAppName ( cmdCombo->itemText ( i ) ); if ( appList.indexOf ( app ) ==-1 && app!="" && app!=tr ( "Path to executable" ) ) { appList.append ( app ); } } if ( sessBox->currentIndex() ==APPLICATION ) { rootless=true; command=mainWindow->internAppName ( cmdCombo->lineEdit()->text().trimmed() ); } if ( sessBox->currentIndex() == PUBLISHED) published=true; st.setting()->setValue ( sessionId+"/rootless", ( QVariant ) rootless ); st.setting()->setValue ( sessionId+"/published", ( QVariant ) published ); st.setting()->setValue ( sessionId+"/applications", ( QVariant ) appList ); st.setting()->setValue ( sessionId+"/command", ( QVariant ) command ); st.setting()->setValue ( sessionId+"/rdpoptions", ( QVariant ) rdpOptions ); st.setting()->setValue ( sessionId+"/rdpserver", ( QVariant ) rdpServer ); st.setting()->setValue ( sessionId+"/xdmcpserver", ( QVariant ) xdmcpServer ); st.setting()->setValue ( sessionId+"/usesshproxy",cbProxy->isChecked()); if(rbHttpProxy->isChecked()) { st.setting()->setValue ( sessionId+"/sshproxytype","HTTP"); } else { st.setting()->setValue ( sessionId+"/sshproxytype","SSH"); } st.setting()->setValue (sessionId+"/sshproxyuser",proxyLogin->text().trimmed()); st.setting()->setValue (sessionId+"/sshproxykeyfile",proxyKey->text().trimmed()); st.setting()->setValue (sessionId+"/sshproxyhost",proxyHost->text().trimmed()); st.setting()->setValue (sessionId+"/sshproxyport",proxyPort->value()); st.setting()->setValue (sessionId+"/sshproxysamepass",cbProxySamePass->isChecked()); st.setting()->setValue (sessionId+"/sshproxysameuser",cbProxySameUser->isChecked()); st.setting()->setValue (sessionId+"/sshproxyautologin",cbProxyAutologin->isChecked()); st.setting()->setValue (sessionId+"/sshproxykrblogin",cbProxyKrbLogin->isChecked()); st.setting()->sync(); } QString SessionWidget::sessionName() { return sessName->text(); } #ifdef Q_OS_LINUX void SessionWidget::slot_emitSettings() { emit settingsChanged(server->text(), QString::number( rdpPort->value()), uname->text()); } #endif void SessionWidget::slot_krbChecked() { cbKrbDelegation->setEnabled(cbKrbLogin->isChecked()); } void SessionWidget::slot_openFolder() { FolderExplorer explorer(lPath->text(), parent->getSessionExplorer(), parent); if(explorer.exec()==QDialog::Accepted) { lPath->setText(explorer.getCurrentPath()); } } x2goclient-4.1.2.3/src/sessionwidget.h0000644000000000000000000000720014447111614014454 0ustar /************************************************************************** * Copyright (C) 2005-2020 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef SESSIONWIDGET_H #define SESSIONWIDGET_H #include "configwidget.h" /** @author Oleksandr Shneyder */ class QLineEdit; class QSpinBox; class QPushButton; class QComboBox; class QLabel; class QCheckBox; class QGroupBox; class QRadioButton; class SessionWidget : public ConfigWidget { Q_OBJECT public: SessionWidget ( bool newSession, QString id, ONMainWindow * mv, QWidget * parent = 0, Qt::WindowFlags f = 0 ); ~SessionWidget(); void setDefaults(); void saveSettings(); QString sessionName(); private slots: void slot_getIcon(); void slot_getKey(); void slot_changeCmd ( int var ); void slot_rdpOptions(); void slot_proxyOptions(); void slot_proxyType(); void slot_proxySameLogin(); void slot_proxyGetKey(); void slot_krbChecked(); void slot_openFolder(); public slots: #ifdef Q_OS_LINUX void slot_rdpDirectClicked(); void slot_emitSettings(); #endif private: enum {KDE,GNOME,LXDE, LXQt, XFCE,MATE,UNITY,CINNAMON,TRINITY,OPENBOX,ICEWM,RDP,XDMCP,SHADOW,OTHER,APPLICATION,PUBLISHED}; QLineEdit* sessName; QLineEdit* uname; QLineEdit* server; QSpinBox* sshPort; ONMainWindow* parent; bool newSession; #ifdef Q_OS_LINUX QSpinBox* rdpPort; #endif QLineEdit* key; QCheckBox* cbAutoLogin; QCheckBox* cbKrbLogin; QCheckBox* cbKrbDelegation; #ifdef Q_OS_LINUX QCheckBox* cbDirectRDP; #endif QString sessIcon; QPushButton* icon; QLineEdit* cmd; QComboBox* cmdCombo; QComboBox* sessBox; QLabel* leCmdIp; QLabel* lPort; QLabel* lKey; QLabel* lPath; QLabel* lLogin; QPushButton* pbAdvanced; QString rdpOptions; QString rdpServer; QString xdmcpServer; QPushButton* openKey; QGroupBox* proxyBox; QCheckBox* cbProxy; QRadioButton* rbSshProxy; QRadioButton* rbHttpProxy; QLineEdit* proxyHost; QSpinBox* proxyPort; QLineEdit* proxyLogin; QLabel* lProxyLogin; QCheckBox* cbProxySameUser; QCheckBox* cbProxySamePass; QCheckBox* cbProxyAutologin; QCheckBox* cbProxyKrbLogin; QCheckBox* cbKdrive; QLineEdit* proxyKey; QPushButton* pbOpenProxyKey; QLabel* proxyKeyLabel; private: void readConfig(); signals: void nameChanged ( const QString & ); #ifdef Q_OS_LINUX void directRDP(bool, bool); void settingsChanged(const QString &, const QString &, const QString &); #endif }; #endif x2goclient-4.1.2.3/src/settingswidget.cpp0000644000000000000000000006106614447111614015176 0ustar /************************************************************************** * Copyright (C) 2005-2020 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include "settingswidget.h" #include "onmainwindow.h" #include #include #include #include #include #include #include #include #include "x2gosettings.h" #include #include #include #include #include #include "x2gologdebug.h" #include SettingsWidget::SettingsWidget ( QString id, ONMainWindow * mw, QWidget * parent, Qt::WindowFlags f ) : ConfigWidget ( id,mw,parent,f ) { multiDisp=(QApplication::desktop()->screenCount()>1); QGroupBox *dgb=new QGroupBox ( tr ( "&Display" ),this ); clipGr=new QGroupBox ( tr ( "&Clipboard mode" ),this ); kgb=new QGroupBox ( tr ( "&Keyboard" ),this ); QVBoxLayout *dbLay = new QVBoxLayout ( dgb ); QVBoxLayout *cbLay=new QVBoxLayout ( clipGr ); QHBoxLayout* sLay=new QHBoxLayout ( ); QVBoxLayout* sLay_sys=new QVBoxLayout ( ); QVBoxLayout* sLay_opt=new QVBoxLayout ( ); sLay->addLayout ( sLay_sys ); sLay->addLayout ( sLay_opt ); QVBoxLayout* setLay=new QVBoxLayout ( this ); QButtonGroup* radio = new QButtonGroup ( dgb ); fs=new QRadioButton ( tr ( "Fullscreen" ),dgb ); custom=new QRadioButton ( tr ( "Custom" ),dgb ); display=new QRadioButton ( tr ( "Use whole display" ),dgb ); cbNoresize=new QCheckBox ( tr ( "Not resizable" ),dgb ); maxRes=new QRadioButton ( tr ( "Maximum available" ),dgb ); radio->addButton ( fs ); radio->addButton ( custom ); radio->setExclusive ( true ); radio->addButton(display); radio->addButton(maxRes); width=new QSpinBox ( dgb ); height=new QSpinBox ( dgb ); cbSetDPI=new QCheckBox ( tr ( "Set display DPI" ),dgb ); DPI=new QSpinBox ( dgb ); DPI->setRange ( 1,1000 ); cbXinerama= new QCheckBox(tr( "Xinerama extension (support for two or more physical displays)"),dgb); QHBoxLayout *dgLay =new QHBoxLayout(); QHBoxLayout *dwLay =new QHBoxLayout(); QHBoxLayout *ddLay =new QHBoxLayout(); QHBoxLayout *dispLay= new QHBoxLayout(); ddLay->addWidget ( cbSetDPI ); ddLay->addWidget ( DPI ); ddLay->addStretch(); ddLay->setSpacing ( 15 ); dgLay->addWidget ( fs ); dgLay->addStretch(); dwLay->addWidget ( custom ); dwLay->addSpacing ( 15 ); dwLay->addWidget ( widthLabel=new QLabel ( tr ( "Width:" ),dgb ) ); dwLay->addWidget ( width ); width->setRange ( 0,10000 ); dwLay->addWidget ( heightLabel=new QLabel ( tr ( "Height:" ),dgb ) ); dwLay->addWidget ( height ); height->setRange ( 0,10000 ); dwLay->addStretch(); dispLay->addWidget(display); dispLay->addWidget(maxRes); dispLay->addSpacing(15); dispLay->addWidget(lDisplay=new QLabel(tr("&Display:"),dgb)); dispLay->addWidget(displayNumber=new QSpinBox(dgb)); pbIdentDisp=new QPushButton(tr("&Identify all displays"), dgb); dispLay->addWidget(pbIdentDisp); dispLay->addStretch(); lDisplay->setBuddy(displayNumber); displayNumber->setMinimum(1); displayNumber->setMaximum(QApplication::desktop()->screenCount()); if ((!multiDisp) || (mainWindow->debugging)) { displayNumber->hide(); lDisplay->hide(); pbIdentDisp->hide(); display->hide(); } lDisplay->setEnabled ( false ); displayNumber->setEnabled ( false ); dbLay->addLayout ( dgLay ); dbLay->addLayout ( dwLay ); dbLay->addLayout(dispLay); dbLay->addWidget(cbNoresize); QFrame* dhl=new QFrame ( dgb ); hLine1=dhl; dhl->setFrameStyle ( QFrame::HLine | QFrame::Sunken ); dbLay->addWidget ( dhl ); dbLay->addLayout ( ddLay ); dhl=new QFrame ( dgb ); hLine2=dhl; dhl->setFrameStyle ( QFrame::HLine | QFrame::Sunken ); dbLay->addWidget ( dhl ); dbLay->addWidget ( cbXinerama ); #ifdef Q_OS_DARWIN kgb->hide(); #endif rbClipBoth=new QRadioButton(tr("Bidirectional copy and paste"), clipGr); rbClipClient=new QRadioButton(tr("Copy and paste from client to server"), clipGr); rbClipServer=new QRadioButton(tr("Copy and paste from server to client"), clipGr); rbClipNone=new QRadioButton(tr("Disable clipboard completely"), clipGr); cbLay->addWidget(rbClipBoth); cbLay->addWidget(rbClipClient); cbLay->addWidget(rbClipServer); cbLay->addWidget(rbClipNone); QButtonGroup* clipRadioGroup=new QButtonGroup(clipGr); clipRadioGroup->addButton(rbClipBoth); clipRadioGroup->addButton(rbClipClient); clipRadioGroup->addButton(rbClipServer); clipRadioGroup->addButton(rbClipNone); rbKbdAuto=new QRadioButton(tr("Auto-detect keyboard settings"),kgb); rbKbdNoSet=new QRadioButton(tr("Do not configure keyboard"),kgb); rbKbdSet=new QRadioButton(tr("Configure keyboard"),kgb); QButtonGroup* kbRadio=new QButtonGroup(kgb); kbRadio->addButton(rbKbdAuto); kbRadio->addButton(rbKbdNoSet); kbRadio->addButton(rbKbdSet); gbKbdString=new QGroupBox(kgb); gbKbdString->setFlat(true); QHBoxLayout* kbstrlay=new QHBoxLayout(gbKbdString); kbstrlay->addWidget(new QLabel(tr("Model: "), gbKbdString)); leModel=new QLineEdit(gbKbdString); kbstrlay->addWidget(leModel); kbstrlay->addWidget(new QLabel(tr("Layout: "), gbKbdString)); leLayout=new QLineEdit(gbKbdString); kbstrlay->addWidget(leLayout); kbstrlay->addWidget(new QLabel(tr("Variant: "), gbKbdString)); leVariant=new QLineEdit(gbKbdString); kbstrlay->addWidget(leVariant); QVBoxLayout *kbLay = new QVBoxLayout ( kgb ); kbLay->addWidget ( rbKbdAuto); kbLay->addWidget ( rbKbdNoSet); kbLay->addWidget ( rbKbdSet); kbLay->addWidget( gbKbdString ); setLay->addWidget ( dgb ); setLay->addWidget ( clipGr ); setLay->addWidget ( kgb ); #ifdef Q_OS_LINUX #ifdef CFGCLIENT rdpBox=new QGroupBox ( tr ( "RDP client" ),this ); setLay->addWidget ( rdpBox ); rRdesktop=new QRadioButton ("rdesktop",rdpBox ); rRdesktop->setChecked(true); rXfreeRDPOld=new QRadioButton ( tr( "FreeRDP/X11 (pre-2.x style options)" ),rdpBox); rXfreeRDPNew=new QRadioButton ( tr( "FreeRDP/X11 (2.x style options)" ),rdpBox); QButtonGroup* rClient=new QButtonGroup(rdpBox); rClient->addButton ( rRdesktop ); rClient->addButton ( rXfreeRDPOld ); rClient->addButton ( rXfreeRDPNew ); rClient->setExclusive ( true ); QGridLayout *rdpLay=new QGridLayout(rdpBox); rdpLay->addWidget(rRdesktop,0,0); rdpLay->addWidget(rXfreeRDPOld,1,0); rdpLay->addWidget(rXfreeRDPNew,2,0); rdpLay->addWidget(new QLabel(tr("Additional parameters:")),3,0); rdpLay->addWidget(new QLabel(tr("Command line:")),4,0); cmdLine=new QLineEdit(rdpBox); cmdLine->setReadOnly(true); params=new QLineEdit(rdpBox); rdpLay->addWidget(cmdLine,4,0,1,2); rdpLay->addWidget(params,3,1); connect (rClient, SIGNAL(buttonClicked(int)), this, SLOT(updateCmdLine())); connect (radio, SIGNAL(buttonClicked(int)), this, SLOT(updateCmdLine())); connect (params, SIGNAL(textChanged(QString)), this, SLOT(updateCmdLine())); connect (width, SIGNAL(valueChanged(int)), this, SLOT(updateCmdLine())); connect (height, SIGNAL(valueChanged(int)), this, SLOT(updateCmdLine())); xdmcpBox=new QGroupBox ( tr ( "XDMCP client" ),this ); setLay->addWidget ( xdmcpBox ); rXnest=new QRadioButton ("Xnest",xdmcpBox ); rXnest->setChecked(true); rXephyr=new QRadioButton ( "Xephyr",xdmcpBox); rX2goagent=new QRadioButton ( "x2goagent ",xdmcpBox); QButtonGroup* rXdmcpClient=new QButtonGroup(xdmcpBox); rXdmcpClient->addButton ( rXnest ); rXdmcpClient->addButton ( rXephyr ); rXdmcpClient->addButton ( rX2goagent ); rXdmcpClient->setExclusive ( true ); QGridLayout *xdmcpLay=new QGridLayout(xdmcpBox); xdmcpLay->addWidget(rXnest,0,0); xdmcpLay->addWidget(rXephyr,1,0); xdmcpLay->addWidget(rX2goagent,2,0); xdmcpLay->addWidget(new QLabel(tr("Additional parameters:")),3,0); xdmcpLay->addWidget(new QLabel(tr("Command line:")),4,0); xdmcpCmdLine=new QLineEdit(xdmcpBox); xdmcpCmdLine->setReadOnly(true); xdmcpParams=new QLineEdit(xdmcpBox); xdmcpLay->addWidget(xdmcpCmdLine,4,0,1,2); xdmcpLay->addWidget(xdmcpParams,3,1); connect (rXdmcpClient, SIGNAL(buttonClicked(int)), this, SLOT(updateCmdLine())); connect (xdmcpParams, SIGNAL(textChanged(QString)), this, SLOT(updateCmdLine())); #endif //CFGCLIENT #endif //Q_OS_LINUX setLay->addStretch(); connect ( custom,SIGNAL ( toggled ( bool ) ),width, SLOT ( setEnabled ( bool ) ) ); connect ( custom,SIGNAL ( toggled ( bool ) ),height, SLOT ( setEnabled ( bool ) ) ); connect ( custom,SIGNAL ( toggled ( bool ) ),widthLabel, SLOT ( setEnabled ( bool ) ) ); connect ( custom,SIGNAL ( toggled ( bool ) ),heightLabel, SLOT ( setEnabled ( bool ) ) ); connect ( display,SIGNAL ( toggled ( bool ) ),displayNumber, SLOT ( setEnabled ( bool ) ) ); connect ( display,SIGNAL ( toggled ( bool ) ),lDisplay, SLOT ( setEnabled ( bool ) ) ); connect(pbIdentDisp, SIGNAL(clicked()), this, SLOT (slot_identDisplays())); connect ( kbRadio, SIGNAL (buttonClicked(QAbstractButton*)), this, SLOT(slot_kbdClicked())); connect ( cbSetDPI,SIGNAL ( toggled ( bool ) ),DPI, SLOT ( setEnabled ( bool ) ) ); setDefaults(); custom->setChecked ( true ); readConfig(); } SettingsWidget::~SettingsWidget() { } void SettingsWidget::slot_kbdClicked() { gbKbdString->setVisible(rbKbdSet->isChecked()); } #ifdef Q_OS_LINUX void SettingsWidget::setDirectRdp(bool direct, bool isXDMCP) { clipGr->setVisible(!direct); kgb->setVisible(!direct); cbSetDPI->setVisible(!direct); cbXinerama->setVisible(!direct); maxRes->setVisible(direct); DPI->setVisible(!direct); bool whole_display_enable = ((!direct) && ((multiDisp) || (mainWindow->debugging))); display->setVisible(whole_display_enable); lDisplay->setVisible(whole_display_enable); displayNumber->setVisible(whole_display_enable); pbIdentDisp->setVisible(whole_display_enable); hLine1->setVisible(!direct); hLine2->setVisible(!direct); rdpBox->setVisible(direct && !isXDMCP); xdmcpBox->setVisible(direct && isXDMCP); if (direct) { if (display->isChecked()) { display->setChecked(false); custom->setChecked(true); } } else { if (maxRes->isChecked()) { maxRes->setChecked(false); custom->setChecked(true); } } updateCmdLine(); } #endif void SettingsWidget::slot_identDisplays() { pbIdentDisp->setEnabled(false); identWins.clear(); for (int i=0; iscreenCount(); ++i) { QMainWindow *mw=new QMainWindow( this, Qt::FramelessWindowHint|Qt::X11BypassWindowManagerHint|Qt::WindowStaysOnTopHint); mw->setFixedSize(150,200); QLabel* fr=new QLabel(QString::number(i+1), mw); QFont f=fr->font(); f.setBold(true); f.setPointSize(56); fr->setFont(f); fr->setAlignment(Qt::AlignCenter); mw->setCentralWidget(fr); fr->setFrameStyle(QFrame::Box); QRect geom=QApplication::desktop()->screenGeometry(i); int x_pos=geom.width()/2-75; int y_pos=geom.height()/2-100; x_pos=565; identWins<move(geom.x()+x_pos, geom.y()+y_pos); mw->show(); mw->raise(); } QTimer::singleShot(1200,this, SLOT(slot_hideIdentWins())); } void SettingsWidget::slot_hideIdentWins() { QMainWindow* mw; foreach(mw,identWins) { mw->close(); } pbIdentDisp->setEnabled(true); } void SettingsWidget::readConfig() { X2goSettings st ( "sessions" ); fs->setChecked ( st.setting()->value ( sessionId+"/fullscreen", ( QVariant ) mainWindow->getDefaultFullscreen() ).toBool() ); cbNoresize->setChecked ( st.setting()->value ( sessionId+"/noresize", ( QVariant ) false ).toBool() ); custom->setChecked ( ! st.setting()->value ( sessionId+"/fullscreen", ( QVariant ) mainWindow->getDefaultFullscreen() ).toBool() ); width->setValue ( st.setting()->value ( sessionId+"/width", ( QVariant ) mainWindow->getDefaultWidth() ).toInt() ); height->setValue ( st.setting()->value ( sessionId+"/height", ( QVariant ) mainWindow->getDefaultHeight() ).toInt() ); if ((multiDisp) || (mainWindow->debugging)) { bool md=st.setting()->value ( sessionId+"/multidisp", ( QVariant ) false).toBool(); if (md) display->setChecked(true); int disp=st.setting()->value ( sessionId+"/display", ( QVariant ) 1).toUInt(); if (disp<= displayNumber->maximum()) displayNumber->setValue(disp); else displayNumber->setValue(1); } #ifdef Q_OS_LINUX #ifdef CFGCLIENT maxRes->setChecked(st.setting()->value ( sessionId+"/maxdim", false).toBool()); QString client=st.setting()->value ( sessionId+"/rdpclient","rdesktop").toString(); if(client=="rdesktop") rRdesktop->setChecked(true); else if(client=="xfreerdpnew") rXfreeRDPNew->setChecked(true); else rXfreeRDPOld->setChecked(true); params->setText(st.setting()->value ( sessionId+"/directrdpsettings","").toString()); client=st.setting()->value ( sessionId+"/xdmcpclient","Xnest").toString(); if(client=="Xnest") rXnest->setChecked(true); else if(client=="x2goagent") rX2goagent->setChecked(true); else rXephyr->setChecked(true); xdmcpParams->setText(st.setting()->value ( sessionId+"/directxdmcpsettings","").toString()); #endif #endif cbSetDPI->setChecked ( st.setting()->value ( sessionId+"/setdpi", ( QVariant ) mainWindow->getDefaultSetDPI() ).toBool() ); cbXinerama->setChecked ( st.setting()->value ( sessionId+"/xinerama", ( QVariant ) false).toBool()); DPI->setEnabled ( cbSetDPI->isChecked() ); DPI->setValue ( st.setting()->value ( sessionId+"/dpi", ( QVariant ) mainWindow->getDefaultDPI() ).toUInt() ); QString clipboard=st.setting()->value ( sessionId+"/clipboard", ( QVariant ) mainWindow->getDefaultClipboardMode() ).toString(); if(clipboard =="both") { rbClipBoth->setChecked(true); } if(clipboard =="client") { rbClipClient->setChecked(true); } if(clipboard =="server") { rbClipServer->setChecked(true); } if(clipboard =="none") { rbClipNone->setChecked(true); } QString ktype=st.setting()->value ( sessionId+"/type", ( QVariant ) mainWindow->getDefaultKbdType() ).toString(); if(ktype=="auto") { rbKbdAuto->setChecked(true); } else { rbKbdSet->setChecked(true); ktype.replace("\\",""); QStringList str=ktype.split("/"); if(str.size()>0) { leModel->setText(str[0]); } if(str.size()>1) { str[1].replace(")",""); str=str[1].split("("); if(str.size()>0) { leLayout->setText(str[0]); } if(str.size()>1) { leVariant->setText(str[1]); } } } rbKbdNoSet->setChecked ( !st.setting()->value ( sessionId+"/usekbd", ( QVariant ) mainWindow->getDefaultSetKbd() ).toBool() ); slot_kbdClicked(); } void SettingsWidget::setDefaults() { fs->setChecked ( false ); display->setChecked ( false ); lDisplay->setEnabled ( false ); displayNumber->setEnabled ( false ); custom->setChecked ( true ); width->setValue ( 800 ); height->setValue ( 600 ); cbNoresize->setChecked( false ); cbSetDPI->setChecked ( mainWindow->getDefaultSetDPI() ); DPI->setValue ( mainWindow->getDefaultDPI() ); DPI->setEnabled ( mainWindow->getDefaultSetDPI() ); rbClipBoth->setChecked(true); rbKbdAuto->setChecked ( mainWindow->getDefaultSetKbd() ); rbKbdNoSet->setChecked ( !mainWindow->getDefaultSetKbd() ); rbKbdSet->setChecked (false ); leLayout->setText ( tr ( "us" ) ); leModel->setText ( "pc105" ); leVariant->setText(""); slot_kbdClicked(); cbXinerama->setChecked ( false ); } void SettingsWidget::saveSettings() { X2goSettings st ( "sessions" ); st.setting()->setValue ( sessionId+"/fullscreen", ( QVariant ) fs->isChecked() ); st.setting()->setValue ( sessionId+"/noresize", ( QVariant ) cbNoresize->isChecked() ); st.setting()->setValue ( sessionId+"/multidisp", ( QVariant ) display->isChecked() ); st.setting()->setValue ( sessionId+"/display", ( QVariant ) displayNumber->value() ); #ifdef Q_OS_LINUX #ifdef CFGCLIENT st.setting()->setValue ( sessionId+"/maxdim", ( QVariant ) maxRes->isChecked() ); if (rXfreeRDPOld->isChecked()) { st.setting()->setValue ( sessionId+"/rdpclient", ( QVariant ) "xfreerdp" ); } else if (rXfreeRDPNew->isChecked()) { st.setting()->setValue ( sessionId+"/rdpclient", ( QVariant ) "xfreerdpnew" ); } else { st.setting()->setValue ( sessionId+"/rdpclient", ( QVariant ) "rdesktop" ); } st.setting()->setValue ( sessionId+"/directrdpsettings", ( QVariant ) params->text()); if (rXnest->isChecked()) { st.setting()->setValue ( sessionId+"/xdmcpclient", ( QVariant ) "Xnest" ); } else if (rXephyr->isChecked()) { st.setting()->setValue ( sessionId+"/xdmcpclient", ( QVariant ) "Xephyr" ); } else { st.setting()->setValue ( sessionId+"/xdmcpclient", ( QVariant ) "x2goagent" ); } st.setting()->setValue ( sessionId+"/directxdmcpsettings", ( QVariant ) xdmcpParams->text()); #endif #endif st.setting()->setValue ( sessionId+"/width", ( QVariant ) width->value() ); st.setting()->setValue ( sessionId+"/height", ( QVariant ) height->value() ); //if maxRes is checked width and height are setted to max area available if (maxRes->isChecked() || st.setting()->value(sessionId + "/multidisp", (QVariant) false).toBool() || st.setting()->value(sessionId + "/maxdim", (QVariant) false).toBool()) { //get screen number int selectedScreen = st.setting()->value(sessionId + "/display", (QVariant) -1).toInt(); //get max available desktop area for selected screen int height = QApplication::desktop()->availableGeometry(selectedScreen).height(); int width = QApplication::desktop()->availableGeometry(selectedScreen).width(); //save max resolution st.setting()->setValue (sessionId + "/width", (QVariant) width); st.setting()->setValue (sessionId + "/height", (QVariant) height); } st.setting()->setValue ( sessionId+"/dpi", ( QVariant ) DPI->value() ); st.setting()->setValue ( sessionId+"/setdpi", ( QVariant ) cbSetDPI->isChecked() ); st.setting()->setValue ( sessionId+"/xinerama", ( QVariant ) cbXinerama->isChecked() ); QString clipMode; if(rbClipBoth->isChecked()) clipMode="both"; if(rbClipClient->isChecked()) clipMode="client"; if(rbClipServer->isChecked()) clipMode="server"; if(rbClipNone->isChecked()) clipMode="none"; st.setting()->setValue ( sessionId+"/clipboard", ( QVariant ) clipMode ); st.setting()->setValue ( sessionId+"/usekbd", ( QVariant ) !rbKbdNoSet->isChecked() ); QString ktype; if(rbKbdAuto->isChecked()) { ktype="auto"; } else { ktype=leModel->text()+"/"+leLayout->text(); if(leVariant->text().length()>0) { ktype+="\\("+leVariant->text()+"\\)"; } } st.setting()->setValue ( sessionId+"/type", ( QVariant ) ktype ); st.setting()->sync(); } #ifdef Q_OS_LINUX void SettingsWidget::setServerSettings(QString server, QString port, QString user) { this->server=server; this->port=port; this->user=user; updateCmdLine(); } void SettingsWidget::updateCmdLine() { #ifdef CFGCLIENT QString client="xfreerdp"; QString userOpt; if (user.length()>0) { userOpt=" -u "; userOpt+=user; } if (rRdesktop->isChecked()) { client="rdesktop"; } QString grOpt; if(!rXfreeRDPNew->isChecked()) { if (fs->isChecked()) { grOpt=" -f "; } if (maxRes->isChecked()) { grOpt=" -D -g x"; } if (custom->isChecked()) { grOpt=" -g "+QString::number(width->value())+"x"+QString::number(height->value()); } cmdLine->setText(client +" "+params->text()+ grOpt +userOpt+" -p <"+tr("password")+"> "+ server+":"+port ); } else { if (user.length()>0) { userOpt=" /u:"; userOpt+=user; } if (fs->isChecked()) { grOpt=" /f "; } if (maxRes->isChecked()) { grOpt=" /w: /h:"; } if (custom->isChecked()) { grOpt=" /w:"+QString::number(width->value())+" /h:"+QString::number(height->value()); } cmdLine->setText(client +" "+params->text()+ grOpt +userOpt+" /p:<"+tr("password")+"> /v:"+ server+":"+port ); } fs->setEnabled(true); if(!rXephyr->isChecked() && !xdmcpBox->isHidden()) { fs->setEnabled(false); if(fs->isChecked()) { custom->setChecked(true); } } if(rX2goagent->isChecked()) { client="x2goagent"; } else { client="Xnest"; } if (maxRes->isChecked()) { grOpt=" -geometry x"; } if (custom->isChecked()) { grOpt=" -geometry "+QString::number(width->value())+"x"+QString::number(height->value()); } if(rXephyr->isChecked()) { client="Xephyr"; if (fs->isChecked()) { grOpt=" -fullscreen "; } if (maxRes->isChecked()) { grOpt=" -screen x"; } if (custom->isChecked()) { grOpt=" -screen "+QString::number(width->value())+"x"+QString::number(height->value()); } } xdmcpCmdLine->setText(client +" "+xdmcpParams->text()+ grOpt +" -query "+ server+ " :"); #endif } #endif x2goclient-4.1.2.3/src/settingswidget.h0000644000000000000000000000652314447111614014640 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef SETTINGSWIDGET_H #define SETTINGSWIDGET_H #include /** @author Oleksandr Shneyder */ class QSpinBox; class QRadioButton; class QCheckBox; class QLineEdit; class QSpinBox; class QLabel; class QPushButton; class QMainWindow; class QGroupBox; class SettingsWidget : public ConfigWidget { Q_OBJECT public: SettingsWidget ( QString id, ONMainWindow * mw, QWidget * parent=0, Qt::WindowFlags f=0 ); ~SettingsWidget(); void setDefaults(); void saveSettings(); #ifdef Q_OS_LINUX void setDirectRdp(bool direct, bool isXDMCP); public slots: void setServerSettings(QString server, QString port, QString user); void updateCmdLine(); #endif private slots: void slot_identDisplays(); void slot_hideIdentWins(); void slot_kbdClicked(); private: QSpinBox* width; QSpinBox* height; QSpinBox* displayNumber; QRadioButton* fs; QRadioButton* custom; QRadioButton* display; QRadioButton* maxRes; QRadioButton* rbKbdAuto; QRadioButton* rbKbdNoSet; QRadioButton* rbKbdSet; QGroupBox* gbKbdString; QLineEdit* leModel; QLineEdit* leLayout; QLineEdit* leVariant; QCheckBox* cbSetDPI; QCheckBox* cbXinerama; QCheckBox* cbNoresize; QSpinBox* DPI; QLabel* widthLabel; QLabel* heightLabel; QLabel* layoutLabel; QLabel* typeLabel; QLabel* lDisplay; bool multiDisp; QPushButton* pbIdentDisp; QList identWins; QGroupBox *kgb; QGroupBox *clipGr; QRadioButton *rbClipBoth; QRadioButton *rbClipServer; QRadioButton *rbClipClient; QRadioButton *rbClipNone; #ifdef Q_OS_LINUX QGroupBox *rdpBox; QRadioButton* rRdesktop; QRadioButton* rXfreeRDPOld; QRadioButton* rXfreeRDPNew; QLineEdit* cmdLine; QLineEdit* params; QString server; QString user; QString port; QGroupBox *xdmcpBox; QRadioButton* rXnest; QRadioButton* rXephyr; QRadioButton* rX2goagent; QLineEdit* xdmcpCmdLine; QLineEdit* xdmcpParams; #endif QFrame* hLine1; QFrame* hLine2; private: void readConfig(); }; #endif x2goclient-4.1.2.3/src/sharewidget.cpp0000644000000000000000000002523714447111614014440 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include "sharewidget.h" #include "onmainwindow.h" #include #include #include #include #include #include #include #include #include #include #include #include "x2gologdebug.h" #include #include #include "x2gosettings.h" ShareWidget::ShareWidget ( QString id, ONMainWindow * mw, QWidget * parent, Qt::WindowFlags f ) : ConfigWidget ( id,mw,parent,f ) { QGroupBox *egb=new QGroupBox ( tr ( "&Folders" ),this ); expTv=new QTreeView ( egb ); expTv->setItemsExpandable ( false ); expTv->setRootIsDecorated ( false ); model=new QStandardItemModel ( 0,2 ); ldir=new QLabel ( egb ); model->setHeaderData ( 0,Qt::Horizontal,QVariant ( ( QString ) tr ( "Path" ) ) ); model->setHeaderData ( 1,Qt::Horizontal,QVariant ( ( QString ) tr ( "Automount" ) ) ); expTv->setEditTriggers ( QAbstractItemView::NoEditTriggers ); QPushButton* openDir=new QPushButton ( QIcon ( mainWindow->iconsPath ( "/16x16/file-open.png" ) ), QString::null,egb ); QPushButton* addDir=new QPushButton ( tr ( "Add" ),egb ); QPushButton* delDir=new QPushButton ( tr ( "Delete" ),egb ); QLabel *dirPrompt=new QLabel ( tr ( "Path:" ),egb ); dirPrompt->setFixedSize ( dirPrompt->sizeHint() ); openDir->setFixedSize ( openDir->sizeHint() ); ldir->setFrameStyle ( QFrame::StyledPanel|QFrame::Sunken ); cbFsConv=new QCheckBox ( tr ( "Filename encoding" ),egb ); QHBoxLayout* enclay=new QHBoxLayout; cbFrom=new QComboBox ( egb ); cbTo=new QComboBox ( egb ); lFrom=new QLabel ( tr ( "local:" ),egb ); lTo=new QLabel ( tr ( "remote:" ),egb ); enclay->addWidget ( cbFsConv ); enclay->addWidget ( lFrom ); enclay->addWidget ( cbFrom ); enclay->addWidget ( lTo ); enclay->addWidget ( cbTo ); enclay->addStretch(); loadEnc ( cbFrom ); loadEnc ( cbTo ); cbFsSshTun=new QCheckBox ( tr ( "Use SSH port forwarding to tunnel file system " "connections through firewalls" ),egb ); QVBoxLayout* expLay=new QVBoxLayout ( this ); expLay->addWidget ( egb ); QHBoxLayout *tvLay=new QHBoxLayout ( egb ); QHBoxLayout *dirLAy=new QHBoxLayout(); dirLAy->addWidget ( dirPrompt ); dirLAy->addWidget ( ldir ); dirLAy->addWidget ( openDir ); QVBoxLayout* leftLay=new QVBoxLayout(); leftLay->addLayout ( dirLAy ); leftLay->addSpacing ( 10 ); leftLay->addWidget ( expTv ); expLay->addLayout ( enclay ); expLay->addWidget ( cbFsSshTun ); QVBoxLayout* rightLay=new QVBoxLayout(); rightLay->addWidget ( addDir ); rightLay->addStretch(); rightLay->addWidget ( delDir ); rightLay->addStretch(); tvLay->addLayout ( leftLay ); tvLay->addSpacing ( 10 ); tvLay->addLayout ( rightLay ); expTv->setModel ( ( QAbstractItemModel* ) model ); QFontMetrics fm1 ( expTv->font() ); expTv->header()->resizeSection ( 1, fm1.width ( tr ( "Automount" ) ) +10 ); connect ( openDir,SIGNAL ( clicked() ),this,SLOT ( slot_openDir() ) ); connect ( addDir,SIGNAL ( clicked() ),this,SLOT ( slot_addDir() ) ); connect ( delDir,SIGNAL ( clicked() ),this,SLOT ( slot_delDir() ) ); connect ( cbFsConv,SIGNAL ( clicked() ),this ,SLOT ( slot_convClicked() ) ); readConfig(); } ShareWidget::~ShareWidget() { } void ShareWidget::slot_openDir() { QString startDir=ONMainWindow::getHomeDirectory(); #ifdef Q_OS_WIN if ( ONMainWindow::getPortable() && ONMainWindow::U3DevicePath().length() >0 ) { startDir=ONMainWindow::U3DevicePath() +"/"; } #endif QString path= QFileDialog::getExistingDirectory ( this, tr ( "Select folder" ), startDir ); if ( path!=QString::null ) { #ifdef Q_OS_WIN if ( ONMainWindow::getPortable() && ONMainWindow::U3DevicePath().length() >0 ) { if ( path.indexOf ( ONMainWindow::U3DevicePath() ) !=0 ) { QMessageBox::critical ( 0l,tr ( "Error" ), tr ( "X2Go Client is running in " "portable mode. You should " "use a path on your USB device " "to be able to access your data " "wherever you are." ), QMessageBox::Ok,QMessageBox::NoButton ); slot_openDir(); return; } path.replace ( ONMainWindow::U3DevicePath(), "(U3)" ); } #endif ldir->setText ( path ); } } void ShareWidget::slot_addDir() { QString path=ldir->text(); if ( path.length() <1 ) return; for ( int i=0; irowCount(); ++i ) if ( model->index ( i,0 ).data().toString() ==path ) return; QStandardItem *item; item= new QStandardItem ( path ); model->setItem ( model->rowCount(),0,item ); item= new QStandardItem(); item->setCheckable ( true ); model->setItem ( model->rowCount()-1,1,item ); ldir->setText ( QString::null ); } void ShareWidget::slot_delDir() { model->removeRow ( expTv->currentIndex().row() ); } void ShareWidget::readConfig() { X2goSettings st ( "sessions" ); QString exportDir=st.setting()->value ( sessionId+"/export", ( QVariant ) QString::null ).toString(); cbFsSshTun->setChecked ( st.setting()->value ( sessionId+"/fstunnel", true ).toBool() ); QStringList lst=exportDir.split ( ";",QString::SkipEmptyParts ); QString toCode=st.setting()->value ( sessionId+"/iconvto", ( QVariant ) "UTF-8" ).toString(); #ifdef Q_OS_WIN QString fromCode=st.setting()->value ( sessionId+"/iconvfrom", ( QVariant ) tr ( "WINDOWS-1252" ) ).toString(); #endif #ifdef Q_OS_DARWIN QString fromCode=st.setting()->value ( sessionId+"/iconvfrom", ( QVariant ) "UTF-8" ).toString(); #endif #ifdef Q_OS_LINUX QString fromCode=st.setting()->value ( sessionId+"/iconvfrom", ( QVariant ) tr ( "ISO8859-1" ) ).toString(); #endif cbFsConv->setChecked ( st.setting()->value ( sessionId+"/useiconv", ( QVariant ) false ).toBool() ); slot_convClicked(); int ind=cbFrom->findText ( fromCode ); if ( ind !=-1 ) cbFrom->setCurrentIndex ( ind ); ind=cbTo->findText ( toCode ); if ( ind !=-1 ) cbTo->setCurrentIndex ( ind ); for ( int i=0; isetItem ( model->rowCount(),0,item ); item= new QStandardItem(); item->setCheckable ( true ); if ( tails[1]=="1" ) item->setCheckState ( Qt::Checked ); model->setItem ( model->rowCount()-1,1,item ); } } void ShareWidget::setDefaults() { cbFsSshTun->setChecked ( true ); QString toCode="UTF-8"; #ifdef Q_OS_WIN QString fromCode=tr ( "WINDOWS-1252" ); #elif defined (Q_OS_DARWIN) QString fromCode="UTF-8"; #else QString fromCode=tr ( "ISO8859-1" ); #endif cbFsConv->setChecked ( false ); slot_convClicked(); int ind=cbFrom->findText ( fromCode ); if ( ind !=-1 ) cbFrom->setCurrentIndex ( ind ); ind=cbTo->findText ( toCode ); if ( ind !=-1 ) cbTo->setCurrentIndex ( ind ); } void ShareWidget::saveSettings() { X2goSettings st ( "sessions" ); st.setting()->setValue ( sessionId+"/fstunnel", ( QVariant ) cbFsSshTun->isChecked() ); QString exportDirs; for ( int i=0; irowCount(); ++i ) { #ifndef Q_OS_WIN exportDirs+=model->index ( i,0 ).data().toString() +":"; #else exportDirs+=model->index ( i,0 ).data().toString() +"#"; #endif if ( model->item ( i,1 )->checkState() ==Qt::Checked ) exportDirs+="1;"; else exportDirs+="0;"; } st.setting()->setValue ( sessionId+"/export", ( QVariant ) exportDirs ); st.setting()->setValue ( sessionId+"/iconvto",cbTo->currentText() ); st.setting()->setValue ( sessionId+"/iconvfrom",cbFrom->currentText() ); st.setting()->setValue ( sessionId+"/useiconv",cbFsConv->isChecked() ); st.setting()->sync(); } void ShareWidget::loadEnc ( QComboBox* cb ) { QFile file ( ":/txt/encodings" ); if ( !file.open ( QIODevice::ReadOnly | QIODevice::Text ) ) return; QTextStream in ( &file ); while ( !in.atEnd() ) { QString line = in.readLine(); line=line.replace ( "//","" ); cb->addItem ( line ); } } void ShareWidget::slot_convClicked() { bool val=cbFsConv->isChecked(); cbTo->setEnabled ( val ); cbFrom->setEnabled ( val ); lTo->setEnabled ( val ); lFrom->setEnabled ( val ); } x2goclient-4.1.2.3/src/sharewidget.h0000644000000000000000000000402714447111614014077 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef SHAREWIDGET_H #define SHAREWIDGET_H #include /** @author Oleksandr Shneyder */ class QTreeView; class QStandardItemModel; class QLabel; class QCheckBox; class QComboBox; class ShareWidget : public ConfigWidget { Q_OBJECT public: ShareWidget ( QString id, ONMainWindow * mw, QWidget * parent=0, Qt::WindowFlags f=0 ); ~ShareWidget(); void setDefaults(); void saveSettings(); private slots: void slot_openDir(); void slot_addDir(); void slot_delDir(); void slot_convClicked(); private: QTreeView* expTv; QStandardItemModel* model; QLabel *ldir; QCheckBox* cbFsSshTun; QCheckBox* cbFsConv; QComboBox* cbFrom; QComboBox* cbTo; QLabel* lFrom; QLabel* lTo; private: void readConfig(); void loadEnc ( QComboBox* cb ); }; #endif x2goclient-4.1.2.3/src/sshmasterconnection.cpp0000644000000000000000000022105114447111614016213 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include "x2goclientconfig.h" #include "x2gologdebug.h" #include "sshmasterconnection.h" #include #include #include #include "sshprocess.h" #include #include #include #include #ifndef Q_OS_WIN #include #endif #include #include #ifndef Q_OS_WIN #include /* for socket(), connect(), send(), and recv() */ #include /* for sockaddr_in and inet_addr() */ #include #include #include #endif #include "onmainwindow.h" #define PROXYTUNNELPORT 44444 const QString SshMasterConnection::challenge_auth_code_prompts_[] = { "Verification code:", // GA (http://github.com/google/google-authenticator) "One-time password (OATH) for", // OATH (http://www.nongnu.org/oath-toolkit/pam_oath.html) "passcode:", // MOTP (http://motp.sourceforge.net) "Enter PASSCODE:", // SecurID "YubiKey for" // YubiKey (https://en.wikipedia.org/wiki/YubiKey) }; #ifdef Q_OS_WIN #include // parse known_hosts file from libssh and export keys in registry to use with plink.exe void SshMasterConnection::parseKnownHosts() { QFile fl(mainWnd->getHomeDirectory()+"/ssh/known_hosts"); if (!fl.open(QFile::ReadOnly)) return; QSettings settings("HKEY_CURRENT_USER\\Software\\SimonTatham\\PuTTY\\SshHostKeys", QSettings::NativeFormat); while (!fl.atEnd()) { QString line=fl.readLine(); QStringList parts=line.split(' ',QString::SkipEmptyParts); if (parts.count()!=3) continue; //lines in known_hosts have format: //[host]:port //we proceeding only lines from libssh - no hashed hostnames //or patterns are allowed QString type="unknown"; QString port="22"; if (parts[1]=="ssh-dss") type="dss"; if (parts[1]=="ssh-rsa") type="rsa2"; QStringList hostParts=parts[0].split(":",QString::SkipEmptyParts); if (hostParts.count()>1) port=hostParts[1]; hostParts[0].replace("[",""); hostParts[0].replace("]",""); QString keyName=type+"@"+port+":"+hostParts[0]; QByteArray bytes=QByteArray::fromBase64(parts[2].toLatin1()); QStringList fields; //key is a set of data fields: //[size][data][size][data].....[size][data] for (int i=0; ihost=host; // If the hostname starts with "!" do not perform loginCheck() for this connection if (this->host.indexOf("!") == 0) { this->loginCheck=false; this->host.remove(0, 1); } else { this->loginCheck=true; } this->port=port; this->user=user; this->pass=pass; this->key=key; this->autologin=autologin; this->acceptUnknownServers=acceptUnknownServers; this->useproxy=useproxy; this->proxytype=type; this->proxyautologin=proxyautologin; this->proxykey=proxykey; this->proxyserver=proxyserver; this->proxyport=proxyport; this->proxylogin=proxylogin; this->proxypassword=proxypassword; this->proxyKrbLogin=proxyKrbLogin; mainWnd=(ONMainWindow*) parent; kerberos=krblogin; challengeAuthVerificationCode=QString::null; #if LIBSSH_VERSION_INT >= SSH_VERSION_INT (0, 6, 0) if (this->user.isEmpty ()) { /* We might have a config file request pending, honor this. */ ssh_session tmp_session = ssh_new (); if (!tmp_session) { QString error_msg = tr ("Cannot create SSH session."); error_msg += " " + tr ("Using environment-provided username."); x2goDebug << error_msg; } else { QByteArray tmp_BA; tmp_BA = this->host.toLocal8Bit (); ssh_options_set (tmp_session, SSH_OPTIONS_HOST, tmp_BA.data ()); if (ssh_options_parse_config (tmp_session, NULL) < 0) { x2goDebug << "Warning: unable to parse the SSH config file."; } char *inferred_username = NULL; ssh_options_get (tmp_session, SSH_OPTIONS_USER, &inferred_username); x2goDebug << "Temporary session user name after config file parse: " << inferred_username; this->user = QString::fromLocal8Bit (inferred_username); ssh_string_free_char (inferred_username); ssh_free (tmp_session); } } #endif if (this->user.isEmpty ()) { #ifdef Q_OS_WIN this->user = getenv ("USERNAME"); #else this->user = getenv ("USER"); #endif } if (kerberos) { x2goDebug<<"Starting SSH connection with Kerberos authentication."; } else { x2goDebug<<"Starting SSH connection without Kerberos authentication."; } x2goDebug<<"SshMasterConnection, instance "<startTunnel ( host, port, "127.0.0.1",localProxyPort,false,this, SLOT ( slotSshProxyTunnelOk(int)), SLOT ( slotSshProxyTunnelFailed(bool,QString,int))); } int SshMasterConnection::copyFile(const QString& src, const QString dst, QObject* receiver, const char* slotFinished) { SshProcess* proc=new SshProcess(this, nextPid++); if(receiver && slotFinished) { connect(proc, SIGNAL(sshFinished(bool,QString,int)), receiver, slotFinished); } proc->start_cp(src,dst); processes<pid; } int SshMasterConnection::executeCommand(const QString& command, QObject* receiver, const char* slotFinished, bool overridePath) { SshProcess* proc=new SshProcess(this, nextPid++); if(receiver && slotFinished) { connect(proc, SIGNAL(sshFinished(bool,QString,int)), receiver, slotFinished); } proc->startNormal(command, overridePath); processes<pid; } QString SshMasterConnection::getSourceFile(int pid) { foreach (SshProcess* proc, processes) { if(proc->pid==pid) return proc->getSource(); } return QString ::null; } void SshMasterConnection::addReverseTunnelConnections() { reverseTunnelRequestMutex.lock(); for(int i=0; i= SSH_VERSION_INT (0, 7, 0) /* Non-blocking mode may return SSH_AGAIN, so try again if neceassary. */ while (SSH_AGAIN == rc) { rc = ssh_channel_listen_forward(my_ssh_session, NULL, reverseTunnelRequest[i].forwardPort, NULL); #else { rc = ssh_forward_listen(my_ssh_session, NULL, reverseTunnelRequest[i].forwardPort, NULL); #endif if(rc==SSH_OK) { emit reverseTunnelOk(reverseTunnelRequest[i].creator); x2goDebug<<"Listening for TCP/IP connections on "< (req.forwardPort) == port) { x2goDebug<<"Creating new channel for reverse tunnel "<startTunnel(forwardHost, forwardPort, localHost, localPort, reverse); if(reverse && !kerberos) { connect(this, SIGNAL(reverseTunnelOk(SshProcess*)), proc, SLOT(slotReverseTunnelOk(SshProcess*))); connect(this, SIGNAL(reverseTunnelFailed(SshProcess*,QString)), proc, SLOT(slotReverseTunnelFailed(SshProcess*,QString))); ReverseTunnelRequest req; req.creator=proc; req.localPort=localPort; req.localHost=localHost; req.forwardPort=forwardPort; req.listen=false; x2goDebug<<"Requesting reverse tunnel from port "<pid; } void SshMasterConnection::slotSshProxyInteractionFinish (SshMasterConnection* connection /* unused */) { x2goDebug<<"SSH proxy interaction finished"; slotSshProxyUserAuthError("NO_ERROR"); } void SshMasterConnection::slotSshProxyInteractionStart (SshMasterConnection* connection /* unused */, QString prompt) { emit startInteraction(this, prompt); } void SshMasterConnection::slotSshProxyInteractionUpdate (SshMasterConnection* connection /* unused */, QString output) { emit updateInteraction(this, output); } void SshMasterConnection::slotSshProxyConnectionError(QString err1, QString err2) { breakLoop=true; emit connectionError(tr("SSH proxy connection error."),err1+" "+err2); } void SshMasterConnection::slotSshProxyServerAuthError(int errCode, QString err, SshMasterConnection* con) { emit serverAuthError(errCode, tr("SSH proxy connection error: ")+err, con); } void SshMasterConnection::slotSshProxyUserAuthError(QString err) { breakLoop=true; if(err=="NO_ERROR" || err=="NO_PROXY_ERROR") emit userAuthError(err); else emit userAuthError(tr("SSH proxy connection error: ")+err); } void SshMasterConnection::slotSshProxyTunnelOk(int) { x2goDebug<<"SSH proxy tunnel established."; sshProxyReady=true; } void SshMasterConnection::slotSshProxyTunnelFailed(bool , QString output, int) { breakLoop=true; emit connectionError(tr("Failed to create SSH proxy tunnel."), output); } void SshMasterConnection::slotSshProxyServerAuthAborted() { breakLoop=true; } void SshMasterConnection::run() { x2goDebug<<"SshMasterConnection, instance "< ("SshMasterConnection::passphrase_types"); connect ( sshProxy, SIGNAL ( connectionOk(QString) ), this, SLOT ( slotSshProxyConnectionOk() ) ); connect ( sshProxy, SIGNAL ( serverAuthError ( int,QString,SshMasterConnection* ) ),this, SLOT ( slotSshProxyServerAuthError ( int,QString, SshMasterConnection* ) ) ); connect ( sshProxy, SIGNAL ( needPassPhrase(SshMasterConnection*, SshMasterConnection::passphrase_types)),this, SIGNAL ( needPassPhrase(SshMasterConnection*, SshMasterConnection::passphrase_types)) ); connect ( sshProxy, SIGNAL ( serverAuthAborted()),this, SLOT ( slotSshProxyServerAuthAborted()) ); connect ( sshProxy, SIGNAL ( userAuthError ( QString ) ),this,SLOT ( slotSshProxyUserAuthError ( QString ) ) ); connect ( sshProxy, SIGNAL ( connectionError ( QString,QString ) ), this, SLOT ( slotSshProxyConnectionError ( QString,QString ) ) ); connect ( sshProxy, SIGNAL(startInteraction(SshMasterConnection*,QString)),this, SLOT(slotSshProxyInteractionStart(SshMasterConnection*,QString)) ); connect ( sshProxy, SIGNAL(updateInteraction(SshMasterConnection*,QString)),this, SLOT(slotSshProxyInteractionUpdate(SshMasterConnection*,QString)) ); connect ( sshProxy, SIGNAL(finishInteraction(SshMasterConnection*)),this, SLOT(slotSshProxyInteractionFinish(SshMasterConnection*))); // connect ( interDlg, SIGNAL(textEntered(QString)), con, SLOT(interactionTextEnter(QString))); // connect ( interDlg, SIGNAL(interrupt()), con, SLOT(interactionInterruptSlot())); sshProxyReady=false; sshProxy->start(); while(! sshProxyReady) { if(breakLoop) { quit(); return; } this->usleep(200); } } disconnectSessionFlag=false; int verbosity = SSH_LOG_NOLOG; if (ONMainWindow::libssh_debugging) { #if LIBSSH_VERSION_INT >= SSH_VERSION_INT (0, 6, 0) verbosity = SSH_LOG_INFO; #else verbosity = SSH_LOG_PROTOCOL; #endif } if (ONMainWindow::libssh_packetlog) { #if LIBSSH_VERSION_INT >= SSH_VERSION_INT (0, 6, 0) verbosity = SSH_LOG_DEBUG; #else verbosity = SSH_LOG_PACKET; #endif } /* Set time-out to 1 min. */ long timeout = 60; my_ssh_session = ssh_new(); if ( my_ssh_session == NULL ) { QString err=tr ( "Cannot create SSH session." ); x2goDebug<getHomeDirectory () + "/ssh").toLocal8Bit (); ssh_options_set ( my_ssh_session, SSH_OPTIONS_SSH_DIR, tmp_BA.data ()); x2goDebug << "Setting SSH directory to " << tmp_BA.data (); if (kerberos) { parseKnownHosts(); } } #endif ssh_options_set(my_ssh_session, SSH_OPTIONS_LOG_VERBOSITY, &verbosity); ssh_options_set(my_ssh_session, SSH_OPTIONS_TIMEOUT, &timeout); if (useproxy && proxytype == PROXYHTTP) { socket_t proxysocket = SSH_INVALID_SOCKET; tcpNetworkProxy = new QNetworkProxy( QNetworkProxy::HttpProxy, proxyserver, proxyport, proxylogin, proxypassword); tcpProxySocket = new QTcpSocket(); tcpProxySocket->setProxy( *tcpNetworkProxy ); tcpProxySocket->connectToHost(host, port); if (!tcpProxySocket->waitForConnected(30000)) { QString message=tr ( "Cannot connect to proxy server." ); x2goDebug<socketDescriptor(); x2goDebug << "Created HTTP proxy socket: " << proxysocket << endl; ssh_options_set( my_ssh_session, SSH_OPTIONS_FD, &proxysocket); ssh_set_fd_toread( my_ssh_session); x2goDebug<<"Connected to HTTP proxy server: " << proxyserver << ":" << proxyport <usleep(100); writeHostKeyMutex.lock(); if(writeHostKeyReady) { if(writeHostKey) ssh_write_knownhost(my_ssh_session); writeHostKeyMutex.unlock(); break; } writeHostKeyMutex.unlock(); } ssh_disconnect ( my_ssh_session ); ssh_free ( my_ssh_session ); return; } if(disconnectSessionFlag) { x2goDebug<<"Session is already disconnected, exiting."<getHomeDirectory () + "/ssh").toLocal8Bit (); ssh_options_set ( my_ssh_session, SSH_OPTIONS_SSH_DIR, tmp_BA.data () ); x2goDebug << "Setting SSH directory to " << tmp_BA.data (); } #endif if ( userAuth() ) { if(disconnectSessionFlag) { x2goDebug<<"Session is already disconnected, exiting."<loginCheck == false) { x2goDebug<<"Skipping Login Check as requested by configuration"; emit connectionOk(host); } else { if(checkLogin()) { x2goDebug<<"Login Check - OK"; emit connectionOk(host); } else { x2goDebug<<"Login Check - Failed"; // if(!interactionInterrupt) { emit finishInteraction(this); } ssh_disconnect ( my_ssh_session ); ssh_free ( my_ssh_session ); quit(); return; } } } else { if(disconnectSessionFlag) { x2goDebug<<"Session is already disconnected, exiting."<=0; --i) { delete processes[i]; } x2goDebug<<"SshMasterConnection, instance "<= SSH_VERSION_INT (0, 6, 0) unsigned int cur_port = 0; ssh_options_get_port (my_ssh_session, &cur_port); x2goDebug << "Session port before config file parse: " << cur_port; #endif /* Parse ~/.ssh/config. */ if (ssh_options_parse_config (my_ssh_session, NULL) < 0) { x2goDebug << "Warning: unable to parse the SSH config file."; } #if LIBSSH_VERSION_INT >= SSH_VERSION_INT (0, 6, 0) ssh_options_get_port (my_ssh_session, &cur_port); x2goDebug << "Session port after config file parse: " << cur_port; #endif rc = ssh_connect ( my_ssh_session ); if ( rc != SSH_OK ) { return false; } //set values for remote host for proper server authentication if(useproxy && proxytype==PROXYSSH) { x2goDebug << "Connected via proxy, resetting connection values on session to " << tmpBA.data() << ":" << port; ssh_options_set ( my_ssh_session, SSH_OPTIONS_HOST, tmpBA.data() ); /* * The SSH port might be 0, which indicates to use the default port * or a custom one specified in the config file. * We need to fetch the latter and then set the port unconditionally. * * The tricky part is that we already set a port before (in this case our proxy port.) * There's no way to reset the port for this session to its default value of 0 again, * so we'll need to create a new session, set the hostname * and fetch the inferred port value from there. * * Failure to do so will trigger funny bugs like connecting to the correct remote host, * but at a proxied port value. */ int work_port = port; /* Oh, yeah, and we don't really support port values of 0 for pre-0.6.0 libssh. Sorry. */ #if LIBSSH_VERSION_INT >= SSH_VERSION_INT (0, 6, 0) if (!work_port) { ssh_session tmp_session = ssh_new (); if (!tmp_session) { QString error_msg = tr ("Cannot create SSH session."); x2goDebug << error_msg; return (false); } else { ssh_options_set (tmp_session, SSH_OPTIONS_HOST, tmpBA.data ()); /* Parse ~/.ssh/config. */ if (ssh_options_parse_config (tmp_session, NULL) < 0) { x2goDebug << "Warning: unable to parse the SSH config file."; } unsigned int inferred_port = 0; ssh_options_get_port (tmp_session, &inferred_port); x2goDebug << "Fetched inferred session port: " << inferred_port; work_port = inferred_port & 0xFFFF; ssh_disconnect (tmp_session); ssh_free (tmp_session); } } #endif ssh_options_set ( my_ssh_session, SSH_OPTIONS_PORT, &work_port ); } #if LIBSSH_VERSION_INT >= SSH_VERSION_INT (0, 6, 0) ssh_options_get_port (my_ssh_session, &cur_port); x2goDebug << "Session port before config file parse (part 2): " << cur_port; #endif /* Parse ~/.ssh/config. */ if (ssh_options_parse_config (my_ssh_session, NULL) < 0) { x2goDebug << "Warning: unable to parse the SSH config file."; } #if LIBSSH_VERSION_INT >= SSH_VERSION_INT (0, 6, 0) ssh_options_get_port (my_ssh_session, &cur_port); x2goDebug << "Session port after config file parse (part 2): " << cur_port; #endif return true; } void SshMasterConnection::writeKnownHosts(bool write) { writeHostKeyMutex.lock(); writeHostKeyReady=true; writeHostKey=write; if(!write) { breakLoop=true; emit serverAuthAborted(); } writeHostKeyMutex.unlock(); } int SshMasterConnection::serverAuth ( QString& errorMsg ) { x2goDebug<<"cserverAuth"; int state = SSH_SERVER_ERROR; unsigned char *hash = NULL; char *hexa = NULL; #if LIBSSH_VERSION_INT >= SSH_VERSION_INT (0, 6, 0) ssh_key srv_pubkey = { 0 }; int rc = SSH_ERROR; size_t hlen = 0; #else int hlen = 0; #endif state = ssh_is_server_known ( my_ssh_session ); #if LIBSSH_VERSION_INT >= SSH_VERSION_INT (0, 6, 0) #if LIBSSH_VERSION_INT >= SSH_VERSION_INT (0, 8, 0) rc = ssh_get_server_publickey (my_ssh_session, &srv_pubkey); #else /* LIBSSH_VERSION_INT >= SSH_VERSION_INT (0, 8, 0) */ rc = ssh_get_publickey (my_ssh_session, &srv_pubkey); #endif /* LIBSSH_VERSION_INT >= SSH_VERSION_INT (0, 8, 0) */ if (SSH_OK != rc) { return (SSH_SERVER_ERROR); } rc = ssh_get_publickey_hash (srv_pubkey, SSH_PUBLICKEY_HASH_SHA1, &hash, &hlen); ssh_key_free (srv_pubkey); if (0 != rc) { return (SSH_SERVER_ERROR); } #else hlen = ssh_get_pubkey_hash ( my_ssh_session, &hash ); #endif if ( 0 >= hlen ) return SSH_SERVER_ERROR; x2goDebug<<"state: "<0) emit updateInteraction(this, ssh_userauth_kbdint_getprompt(my_ssh_session,0,NULL)); QString name= ssh_userauth_kbdint_getname(my_ssh_session); instruction = ssh_userauth_kbdint_getinstruction(my_ssh_session); x2goDebug<<"Have prompts: "<0) { while(true) { bool interrupt; interactionInputMutex.lock(); interrupt=interactionInterrupt; QString textToSend=interactionInputText; interactionInputText=QString::null; interactionInputMutex.unlock(); if(textToSend.length()>0) { x2goDebug<<"SEND Input to SERVER"; textToSend.replace("\n",""); ssh_userauth_kbdint_setanswer(my_ssh_session,0,textToSend.toLocal8Bit()); break; } if(interrupt) { x2goDebug<<"Keyboard authentication failed"; // QString err=ssh_get_error ( my_ssh_session ); authErrors<<"NO_ERROR"; emit finishInteraction(this); return false; } this->usleep(30); } } rez=ssh_userauth_kbdint(my_ssh_session, NULL, NULL); } if(rez==SSH_AUTH_SUCCESS) { x2goDebug<<"Keyboard authentication successful"; emit finishInteraction(this); return true; } if(rez==SSH_AUTH_DENIED) { x2goDebug<<"Keyboard authentication failed"; QString err=ssh_get_error ( my_ssh_session ); if(instruction.length()>0) { authErrors<usleep(200); keyPhraseMutex.lock(); if(keyPhraseReady) ready=true; keyPhraseMutex.unlock(); if(ready) break; } challengeAuthVerificationCode=keyPhrase; if(challengeAuthVerificationCode==QString::null) { authErrors<usleep (200); keyPhraseMutex.lock (); ready = keyPhraseReady; keyPhraseMutex.unlock (); } if (keyPhrase.isNull ()) { authErrors << "No password provided."; return (ret); } else { auth_password = keyPhrase; } } int rc = ssh_userauth_password (my_ssh_session, NULL, auth_password.toLatin1 ()); if ( rc != SSH_AUTH_SUCCESS ) { QString err=ssh_get_error ( my_ssh_session ); authErrors<usleep(200); keyPhraseMutex.lock(); if(keyPhraseReady) ready=true; keyPhraseMutex.unlock(); if(ready) break; } if(keyPhrase==QString::null) break; rc = ssh_userauth_autopubkey ( my_ssh_session, keyPhrase.toLatin1() ); if(i++==2) { break; } } if ( rc != SSH_AUTH_SUCCESS ) { QString err=ssh_get_error ( my_ssh_session ); authErrors<getHomeDirectory() +"/.x2go/ssh/gen"; dr.mkpath ( keyPath ); QTemporaryFile fl ( keyPath+"/key" ); fl.open(); keyName=fl.fileName(); fl.setAutoRemove ( false ); QTextStream out ( &fl ); out<= SSH_VERSION_INT (0, 6, 0) ssh_key priv_key = { 0 }; /* * Passing an empty string as a passphrase parameter is a workaround for inconsistent * behavior in libssh: * - compiled with OpenSSL, libssh lets OpenSSL query the passphrase if the * application has a controlling terminal connected * - compiled with libgcrypt, this never happens * * We do not want to break user experience by having libssh/OpenSSL query for the * passphrase on a terminal (and the client not reacting to any input while this * happens), so work around this inconsistency by providing an empty passphrase. */ int rc = ssh_pki_import_privkey_file (tmp_ba.data (), "", NULL, NULL, &priv_key); if (SSH_EOF == rc) { x2goDebug << "Failed to get private key from " << keyName << "; file does not exist."; ssh_key_free (priv_key); return (false); } else if (SSH_OK != rc) { x2goDebug << "Failed to get private key from " << keyName << "; trying to query passphrase."; ssh_key_free (priv_key); priv_key = NULL; } #else /* This is TOCTU, but forced upon us by libssh's legacy function. */ { QFile tmp_file (keyName); if (tmp_file.open (QIODevice::ReadOnly)) { tmp_file.close (); } else { /* Don't pass invalid files to privatekey_from_file () - it crashes in this case. */ return (false); } } ssh_private_key priv_key = privatekey_from_file (my_ssh_session, tmp_ba.data (), 0, NULL); #endif int i=0; #if LIBSSH_VERSION_INT >= SSH_VERSION_INT (0, 6, 0) while (SSH_OK != rc) #else while (!priv_key) #endif { keyPhraseReady=false; emit needPassPhrase(this, PASSPHRASE_PRIVKEY); for(;;) { bool ready=false; this->usleep(200); keyPhraseMutex.lock(); if(keyPhraseReady) ready=true; keyPhraseMutex.unlock(); if(ready) break; } if(keyPhrase==QString::null) break; QByteArray tmp_ba_passphrase = keyPhrase.toLocal8Bit (); #if LIBSSH_VERSION_INT >= SSH_VERSION_INT (0, 6, 0) rc = ssh_pki_import_privkey_file (tmp_ba.data (), tmp_ba_passphrase.data (), NULL, NULL, &priv_key); if (SSH_OK != rc) { ssh_key_free (priv_key); priv_key = NULL; } #else priv_key = privatekey_from_file (my_ssh_session, tmp_ba.data (), 0, tmp_ba_passphrase.data ()); #endif if(i++==2) { break; } } #if LIBSSH_VERSION_INT >= SSH_VERSION_INT (0, 6, 0) if (SSH_OK != rc) #else if (!priv_key) #endif { x2goDebug<<"Failed to get private key from "<= SSH_VERSION_INT (0, 6, 0) ssh_key pub_key = { 0 }; rc = ssh_pki_export_privkey_to_pubkey (priv_key, &pub_key); #else ssh_public_key pub_key = publickey_from_privatekey (priv_key); #endif #if LIBSSH_VERSION_INT >= SSH_VERSION_INT (0, 6, 0) if (SSH_OK != rc) #else if (!pub_key) #endif { x2goDebug<<"Failed to get public key from private key."; #if LIBSSH_VERSION_INT >= SSH_VERSION_INT (0, 6, 0) ssh_key_free (priv_key); priv_key = NULL; ssh_key_free (pub_key); pub_key = NULL; #else privatekey_free(priv_key); #endif if ( autoRemove ) QFile::remove ( keyName ); return false; } #if LIBSSH_VERSION_INT >= SSH_VERSION_INT (0, 6, 0) do { rc = ssh_userauth_try_publickey (my_ssh_session, NULL, pub_key); } while (SSH_AUTH_AGAIN == rc); ssh_key_free (pub_key); pub_key = NULL; /* FIXME: handle SSH_AUTH_PARTIAL correctly! */ if (SSH_AUTH_SUCCESS != rc) { x2goDebug << "Unable to authenticate with public key."; ssh_key_free (priv_key); priv_key = NULL; if (autoRemove) { QFile::remove (keyName); } return (false); } do { rc = ssh_userauth_publickey (my_ssh_session, NULL, priv_key); } while (SSH_AUTH_AGAIN == rc); ssh_key_free (priv_key); priv_key = NULL; #else ssh_string pubkeyStr=publickey_to_string(pub_key); publickey_free(pub_key); int rc=ssh_userauth_pubkey(my_ssh_session, NULL, pubkeyStr, priv_key); privatekey_free(priv_key); ssh_string_free(pubkeyStr); #endif x2goDebug<<"Authenticating with key: "<interactionTextEnter(text); return; } interactionInputMutex.lock(); interactionInputText=text; interactionInputMutex.unlock(); } void SshMasterConnection::interactionInterruptSlot() { if(sshProxy && ! sshProxyReady) { sshProxy->interactionInterruptSlot(); return; } interactionInputMutex.lock(); interactionInterrupt=true; interactionInputMutex.unlock(); } bool SshMasterConnection::checkLogin() { interactionInterrupt=false; interactionInputText=QString::null; ssh_channel channel = ssh_channel_new ( my_ssh_session ); if (!channel) { QString err = ssh_get_error (my_ssh_session); QString error_msg = tr ("%1 failed.").arg ("ssh_channel_new"); x2goDebug << error_msg.left (error_msg.size () - 1) << ": " << err << endl; return false; } if ( ssh_channel_open_session ( channel ) !=SSH_OK ) { QString err=ssh_get_error ( my_ssh_session ); QString errorMsg=tr ( "%1 failed." ).arg ("ssh_channel_open_session"); x2goDebug< 0) { QString inf=QByteArray ( buffer,nbytes ); x2goDebug<<"LOGIN CHECK:"<0) { // x2goDebug<<"SEND Input to SERVER"; ssh_channel_write(channel, textToSend.toLocal8Bit().constData(), textToSend.length()); } if(interrupt) { break; } this->usleep(30); } x2goDebug<<"LOOP FINISHED"; bool retVal=false; if(!hasInterraction) { x2goDebug<<"No interaction needed, continue session"; retVal=true; } else { sshProcErrString=tr("Reconnect session"); x2goDebug<<"Reconnect session"; } ssh_channel_send_eof(channel); ssh_channel_close(channel); ssh_channel_free(channel); return retVal; } return false; } bool SshMasterConnection::userAuth() { if (kerberos) return userAuthKrb(); if ( autologin && key=="" ) if ( userAuthAuto() ) return true; if ( key!="" ) { if ( userAuthWithKey() ) return true; } return userAuthWithPass(); } void SshMasterConnection::addChannelConnection ( SshProcess* creator, int sock, QString forwardHost, int forwardPort, QString localHost, int localPort, void* channel ) { ChannelConnection con; con.channel= ( ssh_channel ) channel; con.sock=sock; con.creator=creator; con.forwardHost=forwardHost; con.forwardPort=forwardPort; con.localHost=localHost; con.localPort=localPort; channelConnectionsMutex.lock(); channelConnections<=0; --i ) { QStringList lst=copyRequests[i].dst.split ( "/" ); QString dstFile=lst.last(); lst.removeLast(); QString dstPath=lst.join ( "/" ); x2goDebug<<"SSH Master Connection copy - dst path:"< "<0 ) copy(); copyRequestMutex.unlock(); char buffer[1024*512]; //512K buffer int nbytes; fd_set rfds; struct timeval tv; tv.tv_sec = 0; tv.tv_usec = 500000; int retval; int maxsock=-1; channelConnectionsMutex.lock(); if ( channelConnections.size() <=0 ) { // x2goDebug<<"no channel connections, waiting\n"; channelConnectionsMutex.unlock(); usleep ( 500 ); continue; } ssh_channel* read_chan=new ssh_channel[channelConnections.size() +1]; ssh_channel* out_chan=new ssh_channel[channelConnections.size() +1]; read_chan[channelConnections.size() ]=NULL; FD_ZERO ( &rfds ); for ( int i=0; i=0; --i ) { int tcpSocket=channelConnections.at ( i ).sock; ssh_channel channel=channelConnections.at ( i ).channel; if ( channel==0l ) continue; if ( ssh_channel_poll ( channel,1 ) > 0 ) { // x2goDebug<<"read err data from channel\n"; nbytes = ssh_channel_read ( channel, buffer, sizeof ( buffer )-1, 1 ); emit stdErr ( channelConnections[i].creator, QByteArray ( buffer,nbytes ) ); // x2goDebug<pid; //////Finished//////// finalize ( i ); continue; } if ( rez>0 ) { // x2goDebug<<"read data from channel "< 0 ) { if ( tcpSocket>0 ) { if ( send ( tcpSocket,buffer, nbytes,0 ) != nbytes ) { QString errMsg=tr ( "Error writing to socket." ); x2goDebug<<"Error writing "<pid; //////Finished//////// finalize ( i ); continue; } } if ( tcpSocket<=0 ) { continue; } if ( FD_ISSET ( tcpSocket,&rfds ) ) { nbytes = recv ( tcpSocket, buffer, sizeof ( buffer )-1,0 ); // x2goDebug< 0 ) { if ( ssh_channel_write ( channel, buffer, nbytes ) !=nbytes ) { QString err=ssh_get_error ( my_ssh_session ); QString errorMsg=tr ( "%1 failed." ).arg ("ssh_channel_write"); emit ioErr ( channelConnections[i].creator, errorMsg, err ); x2goDebug<0 ) FD_SET ( tcpSocket, &rfds ); if ( channelConnections.at ( i ).channel==0l ) { x2goDebug<<"Creating new channel."<0 ) { x2goDebug << "Forwarding parameters: from remote (" << channelConnections.at (i).forwardHost << ":" << channelConnections.at (i).forwardPort << ") to local (" << channelConnections.at (i).localHost << ":" << channelConnections.at (i).localPort << ")"; /* * Cannot support config file parsing here with pre-0.6.0 libssh versions. * There's just no way to get the inferred host and port values. */ #if LIBSSH_VERSION_INT >= SSH_VERSION_INT (0, 6, 0) ssh_session tmp_session = ssh_new (); if (!tmp_session) { QString error_msg = tr ("Cannot create SSH session."); x2goDebug << error_msg; emit ioErr (channelConnections[i].creator, error_msg, ""); } else { QByteArray tmp_BA = channelConnections.at (i).forwardHost.toLocal8Bit (); const int tmp_port = channelConnections.at (i).forwardPort; ssh_options_set (tmp_session, SSH_OPTIONS_HOST, tmp_BA.data ()); if (tmp_port) { ssh_options_set (tmp_session, SSH_OPTIONS_PORT, &tmp_port); } /* The host and port might be a shorthand and zero, so fetch the actual data. */ if (ssh_options_parse_config (tmp_session, NULL) < 0) { x2goDebug << "Warning: unable to parse the SSH config file."; } unsigned int inferred_port = 0; ssh_options_get_port (tmp_session, &inferred_port); x2goDebug << "Temporary session port after config file parse: " << inferred_port; char *inferred_host = NULL; ssh_options_get (tmp_session, SSH_OPTIONS_HOST, &inferred_host); x2goDebug << "Temporary session host after config file parse: " << inferred_host; channelConnections[i].forwardHost = QString (inferred_host); channelConnections[i].forwardPort = static_cast (inferred_port); ssh_string_free_char (inferred_host); ssh_free (tmp_session); } #endif { QByteArray tmp_BA_forward = channelConnections.at (i).forwardHost.toLocal8Bit (); QByteArray tmp_BA_local = channelConnections.at (i).localHost.toLocal8Bit (); if ( ssh_channel_open_forward ( channel, tmp_BA_forward.data (), channelConnections.at ( i ).forwardPort, tmp_BA_local.data (), channelConnections.at ( i ).localPort ) != SSH_OK ) { QString err=ssh_get_error ( my_ssh_session ); QString errorMsg=tr ( "%1 failed." ).arg ("ssh_channel_open_forward"); emit ioErr ( channelConnections[i].creator, errorMsg, err ); x2goDebug<maxsock ) maxsock=tcpSocket; return (true); } void SshMasterConnection::finalize ( int item ) { int tcpSocket=channelConnections.at ( item ).sock; ssh_channel channel=channelConnections.at ( item ).channel; if ( channel ) { ssh_channel_send_eof ( channel ); x2goDebug<<"EOF sent."; ssh_channel_close ( channel ); x2goDebug<<"Channel closed."; ssh_channel_free ( channel ); } if ( tcpSocket>0 ) { #ifndef Q_OS_WIN shutdown(tcpSocket, SHUT_RDWR); close ( tcpSocket ); #else shutdown(tcpSocket, SD_BOTH); closesocket ( tcpSocket ); #endif } SshProcess* proc=channelConnections[item].creator; QString uuid=channelConnections[item].uuid; channelConnections.removeAt ( item ); emit channelClosed ( proc, uuid ); } x2goclient-4.1.2.3/src/sshmasterconnection.h0000644000000000000000000002013114447111614015654 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef SSHMASTERCONNECTION_H #define SSHMASTERCONNECTION_H #include #include #include #include #include #include #include #include #define PROPERTY(TYPE,NAME) private: TYPE NAME; \ public: TYPE get_##NAME(){return NAME;} \ void set_##NAME(TYPE VAL){NAME=VAL;} class ONMainWindow; class SshProcess; struct ChannelConnection { ssh_channel channel; int sock; SshProcess* creator; int forwardPort; int localPort; QString forwardHost; QString localHost; QString command; QString uuid; bool operator==(ChannelConnection& t) { return (channel==t.channel); } }; struct ReverseTunnelRequest { uint localPort; uint forwardPort; QString localHost; SshProcess* creator; bool listen; }; struct CopyRequest { SshProcess* creator; QString src; QString dst; }; class SshMasterConnection: public QThread { Q_OBJECT PROPERTY(bool, kerberosDelegation) public: enum ProxyType {PROXYSSH, PROXYHTTP}; enum passphrase_types { PASSPHRASE_PRIVKEY, PASSPHRASE_CHALLENGE, PASSPHRASE_PASSWORD, PASSPHRASE_UNKNOWN }; void run(); SshMasterConnection(QObject* parent, QString host, int port, bool acceptUnknownServers, QString user, QString pass, QString key, bool autologin, bool krblogin=false, bool useproxy=false, ProxyType type=PROXYSSH, QString proxyserver=QString::null, quint16 proxyport=0, QString proxylogin=QString::null, QString proxypassword=QString::null, QString proxyKey=QString::null, bool proxyAutologin=false, bool proxyKrbLogin=false); ~SshMasterConnection(); void addChannelConnection(SshProcess* creator, int sock, QString forwardHost, int forwardPort, QString localHost, int localPort, void* channel=0l); void addChannelConnection(SshProcess* creator, QString uuid, QString cmd); void addCopyRequest(SshProcess* creator, QString src, QString dst); void writeKnownHosts(bool); void setKeyPhrase(QString); int executeCommand(const QString& command, QObject* receiver=0, const char* slotFinished=0, bool overridePath=true); int startTunnel(const QString& forwardHost, uint forwardPort, const QString& localHost, uint localPort, bool reverse=false, QObject* receiver=0, const char* slotTunnelOk=0, const char* slotFinished=0); int copyFile(const QString& src, const QString dst, QObject* receiver=0, const char* slotFinished=0); QString getSourceFile(int pid); void setAcceptUnknownServers(bool accept) { acceptUnknownServers=accept; } QString getHost() { return host; } QString getUser() { return user; } int getPort() { return port; } bool useKerberos() { return kerberos; }; private: bool sshConnect(); bool userAuthWithPass(); bool userAuthAuto(); bool userAuthWithKey(); bool userChallengeAuth(); bool checkLogin(); bool userAuth(); bool userAuthKrb(); bool userAuthKeyboardInteractive(QString prompt); void channelLoop(); bool createChannelConnection (int i, int &maxsock, fd_set &rfds, ssh_channel *read_chan); void finalize(int arg1); void copy(); int serverAuth(QString& errorMsg); void setVerficationCode(QString code); void checkReverseTunnelConnections(); void addReverseTunnelConnections(); #ifdef Q_OS_WIN void parseKnownHosts(); #endif private slots: void slotSshProxyServerAuthError ( int,QString, SshMasterConnection* ); void slotSshProxyServerAuthAborted (); void slotSshProxyUserAuthError ( QString ); void slotSshProxyConnectionError ( QString,QString ); void slotSshProxyConnectionOk(); void slotSshProxyTunnelOk(int); void slotSshProxyTunnelFailed(bool result, QString output, int); void slotSshProxyInteractionStart ( SshMasterConnection* connection, QString prompt ); void slotSshProxyInteractionUpdate ( SshMasterConnection* connection, QString output ); void slotSshProxyInteractionFinish ( SshMasterConnection* connection); public slots: void interactionTextEnter(QString text); void interactionInterruptSlot(); private: ssh_session my_ssh_session; QList channelConnections; QList copyRequests; QList reverseTunnelRequest; QMutex channelConnectionsMutex; QMutex copyRequestMutex; QMutex disconnectFlagMutex; QMutex writeHostKeyMutex; QMutex reverseTunnelRequestMutex; QMutex interactionInputMutex; QString interactionInputText; bool interactionInterrupt; bool writeHostKey; bool writeHostKeyReady; int nextPid; QList processes; QString keyPhrase; bool keyPhraseReady; QMutex keyPhraseMutex; QString host; int port; QString user; QString pass; QString key; bool useproxy; QString proxyserver; quint16 proxyport; QString proxylogin; QString proxypassword; ProxyType proxytype; bool proxyautologin; bool proxyKrbLogin; QString proxykey; QStringList authErrors; bool autologin; bool disconnectSessionFlag; int localProxyPort; bool acceptUnknownServers; ONMainWindow* mainWnd; bool kerberos; QString sshProcErrString; QTcpSocket *tcpProxySocket; QNetworkProxy *tcpNetworkProxy; SshMasterConnection* sshProxy; bool sshProxyReady; bool breakLoop; bool loginCheck; bool challengeAuthPasswordAccepted; QString challengeAuthVerificationCode; static const QString challenge_auth_code_prompts_[]; signals: void stdErr(SshProcess* caller, QByteArray data); void stdOut(SshProcess* caller, QByteArray data); void ioErr(SshProcess* caller, QString error, QString lastSessionError); void copyErr(SshProcess* caller, QString error, QString lastSessionError); void copyOk(SshProcess* caller); void channelClosed(SshProcess* caller, QString uuid); void reverseTunnelOk(SshProcess* caller); void reverseTunnelFailed(SshProcess* caller, QString error); void connectionError(QString message, QString lastSessionError); void serverAuthError(int errCode, QString lastSessionError, SshMasterConnection*); void serverAuthAborted(); void userAuthError(QString error); void connectionOk( QString host); void needPassPhrase(SshMasterConnection*, SshMasterConnection::passphrase_types); void needChallengeResponse(SshMasterConnection*, QString Challenge); void startInteraction(SshMasterConnection*, QString prompt); void finishInteraction(SshMasterConnection*); void updateInteraction(SshMasterConnection*, QString output); }; Q_DECLARE_METATYPE (SshMasterConnection::passphrase_types) #endif // SSHMASTERCONNECTION_H x2goclient-4.1.2.3/src/sshprocess.cpp0000644000000000000000000004243514447111614014325 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include "x2goclientconfig.h" #include "x2gologdebug.h" #include "sshmasterconnection.h" #include "sshprocess.h" #include #include #include #ifndef Q_OS_WIN #include #include #endif // #undef DEBUG #define DEBUG #define KEEPALIVE_OPTION " -o ServerAliveInterval=60 " SshProcess::SshProcess(SshMasterConnection* master, int pid): QObject(0) { masterCon=master; serverSocket=0; connect(master,SIGNAL(stdErr(SshProcess*,QByteArray)),this,SLOT(slotStdErr(SshProcess*,QByteArray))); connect(master,SIGNAL(ioErr(SshProcess*,QString,QString)),this,SLOT(slotIOerr(SshProcess*,QString,QString))); tunnel=false; normalExited=true; this->pid=pid; proc=0l; execProcess=false; } SshProcess::~SshProcess() { #ifdef DEBUG x2goDebug<<"SshProcess destructor called."; #endif if (proc) { if (tunnel) { disconnect(proc,SIGNAL(finished(int,QProcess::ExitStatus)),this, SLOT(slotSshProcFinished(int,QProcess::ExitStatus))); disconnect(proc,SIGNAL(readyReadStandardError()),this,SLOT(slotSshProcStdErr())); disconnect(proc,SIGNAL(readyReadStandardOutput()),this,SLOT(slotSshProcStdOut())); } if (proc->state()==QProcess::Running && execProcess) { if(!proc->waitForFinished(3000)) { proc->terminate(); } } if (proc->state()==QProcess::Running) { proc->kill(); } if(proc->state()!=QProcess::Running) { delete proc; } proc=0; } if (serverSocket>0) { #ifdef Q_OS_WIN closesocket(serverSocket); WSACleanup(); #else close(serverSocket); #endif } } void SshProcess::slotCheckNewConnection() { fd_set rfds; struct timeval tv; tv.tv_sec = 0; tv.tv_usec = 0; FD_ZERO(&rfds); FD_SET(serverSocket, &rfds); if (select(serverSocket+1,&rfds,NULL,NULL,&tv)<=0) return; #ifdef DEBUG x2goDebug<<"New TCP connection."; #endif int tcpSocket=accept(serverSocket, (struct sockaddr*)&address,&addrlen); #ifdef DEBUG x2goDebug<<"New socket: "<addChannelConnection(this, tcpSocket, forwardHost, forwardPort, localHost, ntohs(address.sin_port)); } void SshProcess::tunnelLoop() { serverSocket=socket(AF_INET, SOCK_STREAM, 0); if (serverSocket<=0) { QString err=tr("Error creating socket."); x2goDebug<start(100); emit sshTunnelOk(pid); #ifdef DEBUG x2goDebug<<"Direct tunnel: waiting for connections on "< void SshProcess::addPuttyReg(QString host, QString uuidStr) { QSettings st("HKEY_CURRENT_USER\\Software\\SimonTatham\\PuTTY\\Sessions\\"+uuidStr, QSettings::NativeFormat); st.setValue("HostName", host); st.setValue("GssapiFwd", (uint) 1); st.sync(); } void SshProcess::rmPuttyReg(QString uuidStr) { if (uuidStr.isEmpty()) { #ifdef DEBUG x2goDebug<<"uuidStr is empty. No PuTTY session reg key to delete."; #endif return; } #ifdef DEBUG x2goDebug<<"Deleting key in registry: HKEY_CURRENT_USER\\Software\\SimonTatham\\PuTTY\\Sessions\\"+uuidStr; #endif QSettings st("HKEY_CURRENT_USER\\Software\\SimonTatham\\PuTTY\\Sessions", QSettings::NativeFormat); st.remove(uuidStr); st.sync(); } #endif void SshProcess::startNormal(const QString& cmd, bool overridePath) { QUuid uuid = QUuid::createUuid(); QString uuidStr = uuid.toString().mid(1, 36).toLower(); execProcess=true; //#ifdef DEBUG // ONLY UNCOMMENT FOR TESTING, MIGHT REVEAL PASSWORD WHEN command=RDP x2goDebug<<"Executing remote command via SshProcess object "<useKerberos()) { QString shcmd = "bash -l -c 'echo \"X2GODATABEGIN:" + uuidStr + "\"; " + pathString + "export TERM=\"dumb\"; "+cmd+"; echo \"X2GODATAEND:" + uuidStr + "\";'"; x2goDebug << "this="<addChannelConnection(this, '" << uuidStr << "', '" << shcmd.left (200) << "');"; masterCon->addChannelConnection(this, uuidStr, shcmd); connect(masterCon,SIGNAL(stdOut(SshProcess*,QByteArray)),this,SLOT(slotStdOut(SshProcess*,QByteArray))); connect(masterCon,SIGNAL(channelClosed(SshProcess*,QString)), this,SLOT(slotChannelClosed(SshProcess*,QString))); } else { QString host=masterCon->getHost(); QString shcmd = ""; /* On Windows, arguments are automatically wrapped in double quotes. * Additionally, QProcess automatically doubles escape characters before * double quotes and inserts an escape character before any non-escaped * double quotes. * Thus, we don't escape double quotes here and let Qt handle this stuff. * * On UNIX-like platforms, likewise, we MUST NOT escape double quotes, * as there is no preceding "outer double quote" the whole argument * is wrapped in. */ shcmd = "bash -l -c 'echo \"X2GODATABEGIN:" + uuidStr + "\";" + pathString + "export TERM=\"dumb\"; "+cmd+"; echo \"X2GODATAEND:" + uuidStr + "\";'"; proc=new QProcess(this); QString local_cmd = ""; QStringList local_args; #ifdef Q_OS_WIN if(masterCon->get_kerberosDelegation()) { addPuttyReg(host, uuidStr); host = uuidStr; } local_cmd = "plink"; /* General options. */ local_args << "-batch"; /* Port option. Must be the last one added! */ local_args << "-P"; #else local_cmd = "ssh"; /* General options. */ local_args << QString (KEEPALIVE_OPTION).trimmed ().split (" "); /* Kerberos options. */ local_args << "-k"; if(masterCon->get_kerberosDelegation()) { local_args << "-K"; } /* Authentication options. */ local_args << "-o" << "GSSApiAuthentication=yes" << "-o" << "PasswordAuthentication=no" << "-o" << "PubkeyAuthentication=no"; /* Port option. Must be the last one added! */ local_args << "-p"; #endif local_args << QString::number (masterCon->getPort ()) << "-l" << masterCon->getUser () << host; /* On Windows, arguments are automatically wrapped in double quotes. * This means we do not have to wrap shcmd ourselves. * * On UNIX-like platforms, we likewise MUST NOT wrap the command in * double quotes, as each entry in the arguments list is passed as * one entry in argv. */ local_args << shcmd; x2goDebug << "Invoking SSH command via SshProcess object " << pid << ": " << local_cmd << " " << local_args.join (" "); procUuid=uuidStr; proc->start (local_cmd, local_args); if (!proc->waitForStarted(15000)) { stdErrString=proc->errorString(); #ifdef DEBUG //x2goDebug<<"ssh start failed:" < "<getUser()+"/"); dst.remove("~"+masterCon->getUser() ); dst.remove("~/"); dst.remove("~" ); dst.remove("${HOME}/"); dst.remove("${HOME}"); dst.remove("$HOME/"); dst.remove("$HOME"); if(!masterCon->useKerberos()) { connect(masterCon, SIGNAL(copyErr(SshProcess*,QString,QString)), this, SLOT(slotCopyErr(SshProcess*,QString,QString))); connect(masterCon, SIGNAL(copyOk(SshProcess*)), this,SLOT(slotCopyOk(SshProcess*))); masterCon->addCopyRequest(this,src,dst); } else { proc=new QProcess(this); #ifdef Q_OS_WIN QString sshString="pscp -batch -P "+ #else QString sshString="scp -o GSSApiAuthentication=yes -o PasswordAuthentication=no -o PubkeyAuthentication=no -P "+ #endif QString::number(masterCon->getPort())+" "+src+" "+ masterCon->getUser()+"@"+ masterCon->getHost()+":"+dst; #ifdef DEBUG x2goDebug<<"Running scp:" <start(sshString); if (!proc->waitForStarted(15000)) { stdErrString=proc->errorString(); #ifdef DEBUG x2goDebug<<"SSH start failed:" < "<useKerberos()) { this->forwardHost=forwardHost; this->forwardPort=forwardPort; this->localHost=localHost; this->localPort=localPort; if (!reverse) tunnelLoop(); } else { proc=new QProcess(0); #ifdef Q_OS_WIN QString sshString="plink -batch -P "+ #else QString sshString=QString::null+"ssh"+ KEEPALIVE_OPTION +"-o GSSApiAuthentication=yes -o PasswordAuthentication=no -o PubkeyAuthentication=no -p "+ #endif QString::number(masterCon->getPort())+" "+ masterCon->getUser()+"@"+ masterCon->getHost() + " -N -v "; if (!reverse) sshString+=" -L " + QString::number(localPort)+":"+forwardHost+":"+QString::number(forwardPort); else sshString+=" -R "+ QString::number(forwardPort)+":"+forwardHost+":"+QString::number(localPort); #ifdef DEBUG x2goDebug<<"Tunnel: running ssh:" <start(sshString); if (!proc->waitForStarted(5000)) { stdErrString=proc->errorString(); #ifdef DEBUG x2goDebug<<"SSH start failed:" <0 ) { normalExited=false; output=stdErrString; #ifdef DEBUG x2goDebug<<"Have stderr only, something must be wrong."; #endif } } #ifdef DEBUG x2goDebug<<"SSH finished: "<useKerberos()) { rmPuttyReg(procUuid); } #endif slotChannelClosed(this,procUuid); } void SshProcess::slotSshProcStdErr() { slotStdErr(this, proc->readAllStandardError()); } void SshProcess::slotSshProcStdOut() { slotStdOut(this, proc->readAllStandardOutput()); } x2goclient-4.1.2.3/src/sshprocess.h0000644000000000000000000000671214447111614013770 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef SSHPROCESS_H #define SSHPROCESS_H #include #include #include #ifndef Q_OS_WIN #include #endif #include "sshmasterconnection.h" class SshProcess : public QObject { Q_OBJECT friend class SshMasterConnection; private: SshProcess(SshMasterConnection* master, int pid); ~SshProcess(); void startNormal(const QString& cmd, bool overridePath); void startTunnel(const QString& forwardHost, uint forwardPort, const QString& localHost, uint localPort, bool reverse=false); void start_cp(QString src, QString dst); QString getSource() { return scpSource; } void tunnelLoop(); #ifdef Q_OS_WIN void addPuttyReg(QString host, QString uuidStr); void rmPuttyReg(QString uuidStr); #endif private: SshMasterConnection* masterCon; SshMasterConnection* tunnelConnection; int pid; QString forwardHost; QString localHost; QString command; QString scpSource; quint16 forwardPort; quint16 localPort; uint serverSocket; struct sockaddr_in address; #ifndef Q_OS_WIN socklen_t addrlen; #else int addrlen; #endif QString stdOutString; QString stdErrString; QString abortString; bool tunnel; bool normalExited; //only to use with krb (until no GSSAPI support in libssh) QProcess* proc; QString procUuid; bool execProcess; bool tunnelOkEmited; private slots: void slotCheckNewConnection(); void slotStdErr(SshProcess* creator, QByteArray data); void slotStdOut(SshProcess* creator, QByteArray data); void slotIOerr(SshProcess* creator,QString message, QString sshSessionErr); void slotChannelClosed(SshProcess* creator, QString uuid); void slotReverseTunnelOk(SshProcess* creator); void slotReverseTunnelFailed(SshProcess* creator, QString error); void slotCopyOk(SshProcess* creator); void slotCopyErr(SshProcess* creator,QString message, QString sshSessionErr); //krb stuff void slotSshProcFinished( int exitCode, QProcess::ExitStatus exitStatus); void slotSshProcStdErr(); void slotSshProcStdOut(); signals: void sshFinished ( bool result, QString output, int processId); void sshTunnelOk(int processId); }; #endif // SSHPROCESS_H x2goclient-4.1.2.3/src/SVGFrame.cpp0000644000000000000000000000705014447111614013535 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include "SVGFrame.h" #include "x2goclientconfig.h" #include #include #include "x2gologdebug.h" #include SVGFrame::SVGFrame ( QString fname,bool st,QWidget* parent, Qt::WindowFlags f ) :QFrame ( parent,f ) { empty=false; renderer=0; #ifdef Q_OS_WIN parentWidget=0; #endif if ( fname==QString::null ) empty=true; if ( !empty ) { repaint=true; drawImg=st; if(fname.indexOf("png")==-1) { renderer=new QSvgRenderer ( this ); renderer->load ( fname ); } else { pix.load(fname); } if ( drawImg ) { setAutoFillBackground ( true ); } else { QTimer *timer = new QTimer ( this ); connect ( timer, SIGNAL ( timeout() ), this, SLOT ( update() ) ); if ( renderer->animated() ) { timer->start ( 1000/renderer->framesPerSecond() ); x2goDebug<<"Animated, fps:"<framesPerSecond() <render ( &p ); else p.drawPixmap(0,0,width(), height(),pix); } QFrame::paintEvent ( event ); } void SVGFrame::resizeEvent ( QResizeEvent* event ) { QFrame::resizeEvent ( event ); emit resized ( event->size() ); } QSize SVGFrame::sizeHint() const { if ( !empty) { if(renderer) return renderer->defaultSize(); return pix.size(); } return QFrame::sizeHint(); } void SVGFrame::loadBg ( QString fl ) { if(renderer) renderer->load ( fl ); update(); } #ifdef Q_OS_WIN #include "wapi.h" void SVGFrame::mousePressEvent ( QMouseEvent * event ) { /* if ( isVisible() ) { int vBorder; int hBorder; int barHeight; if ( parentWidget ) wapiGetBorders ( parentWidget->winId(), vBorder, hBorder, barHeight ); x2goDebug<<"svg frame: "<pos() << ":"<pos() ) <<":"<type(), QPoint(0,0), event->button(), event-> buttons(), event->modifiers()); QFrame::mousePressEvent ( nevent ); return; }*/ QFrame::mousePressEvent ( event ); } #endif x2goclient-4.1.2.3/src/SVGFrame.h0000644000000000000000000000413214447111614013200 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef SVGFRAME_H #define SVGFRAME_H #include "x2goclientconfig.h" #include #include #include class SVGFrame: public QFrame { Q_OBJECT public: SVGFrame ( QString fname, bool st, QWidget* parent=0, Qt::WindowFlags f=0 ); SVGFrame ( QWidget* parent=0, Qt::WindowFlags f=0 ); void setRepaintable ( bool val ) { repaint=val; } void loadBg ( QString fl ); virtual QSize sizeHint() const; private: QPixmap pix; QSvgRenderer* renderer; bool repaint; bool drawImg; bool empty; protected: virtual void paintEvent ( QPaintEvent* event ); virtual void resizeEvent ( QResizeEvent* event ); #ifdef Q_OS_WIN virtual void mousePressEvent ( QMouseEvent * event ); private: QWidget* parentWidget; public: void setMainWidget ( QWidget* widg ) { parentWidget=widg; } #endif signals: void resized ( const QSize ); }; #endif x2goclient-4.1.2.3/src/ui/appdialog.ui0000644000000000000000000001076114447111614014336 0ustar Oleksandr Shneyder(o.shneyder@phoca-gmbh.de) AppDialog 0 0 510 400 Published Applications 22 22 true true true false false false 1 Search: &Start Qt::Vertical 20 40 &Close closeButton clicked() AppDialog reject() 475 372 468 286 treeWidget itemSelectionChanged() AppDialog slotSelectedChanged() 180 121 468 144 startButton clicked() AppDialog slotStartSelected() 462 18 453 78 treeWidget itemDoubleClicked(QTreeWidgetItem*,int) AppDialog slotDoubleClicked(QTreeWidgetItem*) 266 226 459 200 lineEdit textChanged(QString) AppDialog slotSearchChanged(QString) 167 378 444 314 slotSelectedChanged() slotStartSelected() slotDoubleClicked(QTreeWidgetItem*) slotSearchChanged(QString) x2goclient-4.1.2.3/src/ui/brokerpassdialog.ui0000644000000000000000000001051714447111614015730 0ustar Oleksandr Shneyder(o.shneyder@phoca-gmbh.de) BrokerPassDialogUi 0 0 311 176 Dialog Old password: QLineEdit::Password New password: QLineEdit::Password Confirm password: QLineEdit::Password Qt::Vertical 20 40 TextLabel Qt::Horizontal 40 20 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() BrokerPassDialogUi accept() 292 143 157 153 buttonBox rejected() BrokerPassDialogUi reject() 286 143 286 153 lePass1 textChanged(QString) BrokerPassDialogUi slotPassChanged() 167 46 103 113 lePass2 textChanged(QString) BrokerPassDialogUi slotPassChanged() 215 79 208 105 slotPassChanged() x2goclient-4.1.2.3/src/ui/contest.ui0000644000000000000000000001650014447111614014052 0ustar Oleksandr Shneyder(o.shneyder@phoca-gmbh.de) ConTest 0 0 336 161 Connectivity test HTTPS connection: SSH connection: Connection speed: 24 false false 24 false 24 false 255 0 0 255 0 0 146 145 144 Failed 255 0 0 255 0 0 146 145 144 Failed 255 0 0 255 0 0 146 145 144 0 Kb/s Qt::Vertical 20 4 Qt::Horizontal QDialogButtonBox::Close|QDialogButtonBox::Retry buttonBox rejected() ConTest reject() 281 132 286 146 buttonBox accepted() ConTest start() 242 122 4 84 start() x2goclient-4.1.2.3/src/ui/cupsprintsettingsdialog.ui0000644000000000000000000001577514447111614017400 0ustar Oleksandr Shneyder(o.shneyder@phoca-gmbh.de) CupsPrinterSettingsDialog 0 0 503 551 0 0 Dialog 0 0 0 General Page size: 0 0 Paper type: Paper source: Qt::Horizontal 40 20 Duplex Printing None Long side Short side Qt::Vertical 20 211 Driver settings true Qt::Vertical false false true true true false Option Value No option selected false false true false text QDialogButtonBox::Cancel|QDialogButtonBox::Ok|QDialogButtonBox::RestoreDefaults|QDialogButtonBox::Save false x2goclient-4.1.2.3/src/ui/cupsprintwidget.ui0000644000000000000000000000601014447111614015621 0ustar Oleksandr Shneyder(o.shneyder@phoca-gmbh.de) CUPSPrintWidget 0 0 362 292 0 0 Form Name: 0 0 Properties State: Accepting jobs: Type: Location: Comment: x2goclient-4.1.2.3/src/ui/folderexplorer.ui0000644000000000000000000000531314447111614015427 0ustar FolderExplorer 0 0 400 300 Folders Qt::CustomContextMenu false false 1 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() FolderExplorer accept() 9 290 157 274 buttonBox rejected() FolderExplorer reject() 35 290 286 274 treeWidget customContextMenuRequested(QPoint) FolderExplorer slotContextMenu(QPoint) 152 93 396 182 treeWidget itemActivated(QTreeWidgetItem*,int) FolderExplorer slotItemSelected(QTreeWidgetItem*,int) 150 106 398 68 slotContextMenu(QPoint) slotItemSelected(QTreeWidgetItem*,int) x2goclient-4.1.2.3/src/ui/helpdialog.ui0000644000000000000000000000257714447111614014514 0ustar HelpDialog 0 0 700 600 Options :/img/icons/32x32/x2goclient.png:/img/icons/32x32/x2goclient.png true QDialogButtonBox::Close buttonBox clicked(QAbstractButton*) HelpDialog accept() 630 577 4 184 x2goclient-4.1.2.3/src/ui/printdialog.ui0000644000000000000000000000316114447111614014706 0ustar Oleksandr Shneyder(o.shneyder@phoca-gmbh.de) PrintDialog Qt::NonModal 0 0 400 300 Print - X2Go Client Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() PrintDialog accept() 199 277 199 149 buttonBox rejected() PrintDialog reject() 199 277 199 149 x2goclient-4.1.2.3/src/ui/printercmddialog.ui0000644000000000000000000001060414447111614015721 0ustar Oleksandr Shneyder(o.shneyder@phoca-gmbh.de) PrinterCmdDialog 0 0 462 542 Printer command Command Please enter your customized or individual printing command. Examples: kprinter lpr -P hp_laserjet true Output format Please choose the printing file format (regarding to your printing environment - if you use CUPS you may use PDF) Qt::PlainText false true PDF PS rbPDF label_2 rbPS Data structure Please choose the method of printing file input (some commands accepting printing files as program options, some are awaiting data on standard input): Qt::PlainText false true standard input (STDIN) Specify path as program parameter Qt::Vertical 20 37 QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox rejected() PrinterCmdDialog reject() 230 519 230 270 x2goclient-4.1.2.3/src/ui/printwidget.ui0000644000000000000000000002046314447111614014736 0ustar Oleksandr Shneyder(o.shneyder@phoca-gmbh.de) PrintWidget 0 0 559 497 Form Print true View as PDF Qt::Vertical 20 40 0 0 Print settings Printer: Print using default Windows PDF Viewer (Viewer application needs to be installed) Qt::Horizontal Printer command: false true false ... Qt::Vertical 325 2 0 0 Viewer settings Open in viewer application true Command: Save to disk false Qt::Vertical 20 18 Show this dialog before start printing true rbOpen toggled(bool) label setEnabled(bool) 249 120 165 150 rbOpen toggled(bool) leOpenCmd setEnabled(bool) 249 120 284 150 cbPrintCmd toggled(bool) lePrintCmd setEnabled(bool) 248 56 206 88 cbPrintCmd toggled(bool) pbPrintCmd setEnabled(bool) 248 56 327 88 rbPrint toggled(bool) gbPrint setVisible(bool) 62 22 296 64 rbView toggled(bool) gbView setVisible(bool) 62 46 296 188 x2goclient-4.1.2.3/src/ui/xsettingsui.ui0000644000000000000000000001606314447111614014765 0ustar Oleksandr Shneyder(o.shneyder@phoca-gmbh.de) XSettingsWidgetUI 0 0 583 495 Form 12 75 true You must restart the X2Go Client for the changes to take effect true Qt::Vertical 20 97 use integrated X-Server true do not use primary clipboard use custom X-Server false custom X-Server executable: true start X-Server on X2Go Client start false command line options: X-Server command line options window mode: fullscreen mode: single application: whole display: rbOther toggled(bool) groupBox setEnabled(bool) 142 198 196 373 cbOnstart toggled(bool) label_2 setVisible(bool) 83 300 88 332 cbOnstart toggled(bool) leCmdOptions setVisible(bool) 152 300 406 332 cbOnstart toggled(bool) groupBox_2 setHidden(bool) 73 300 53 474 pbExec clicked() XSettingsWidgetUI slotSetExecutable() 561 269 498 333 rbXming toggled(bool) cbNoPrimary setEnabled(bool) 68 132 129 162 slotSetExecutable() x2goclient-4.1.2.3/src/unixhelper.cpp0000644000000000000000000001440714447111614014312 0ustar /*************************************************************************** * Copyright (C) 2015-2023 by Mihai Moldovan * * * * This program is free software; you can redistribute 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ /* Necessary for Q_OS_UNIX! */ #include "unixhelper.h" #ifdef Q_OS_UNIX #include #include #include #include #include #include #include #include /* For documentation please see unixhelper.h. */ namespace unixhelper { void kill_pgroup (const int signal) { pid_t pgid_to_kill = getpgrp (); if ((SIGHUP == signal) || (-1 == signal)) { /* * In order to not kill ourselves, we need to run this * code in a new process group. */ pid_t tmp_pid = fork (); /* Child. */ if (0 == tmp_pid) { /* Create new pgid. */ int err = setpgid (0, 0); if (0 != err) { std::perror ("WARNING: unable to change PGID"); std::cerr << "Continuing with normal operation, but process might kill itself before tree vanishes." << std::endl; } real_kill_pgroup (pgid_to_kill); } /* Error. */ else if (-1 == tmp_pid) { std::perror ("WARNING: unable to fork off another process to kill original process group"); std::cerr << "Proceeding with normal operation, but process might kill itself before tree vanishes." << std::endl; real_kill_pgroup (pgid_to_kill); } /* Parent. */ else { /* * No need to do anything, just exit here in order to not * spawn a bunch of new processes due to subsequent calls * to kill_pgroup () from unix_cleanup (). */ std::exit (EXIT_SUCCESS); } } } void real_kill_pgroup (const pid_t pgid) { /* Try to kill via SIGTERM first. */ if (0 != killpg (pgid, SIGTERM)) { const int saved_errno = errno; std::cerr << "WARNING: unable to send SIGTERM to process group '" << pgid << "': " << std::strerror (saved_errno) << std::endl; } /* Grant a grace period of (at least) 10 seconds. */ sleep (10); int kill_ret = killpg (pgid, SIGKILL); /* * Might be unreachable. * Depending upon which pgroup we just killed, this * code is either unreachable (because killpg () killed * itself already), or being executed. * Let's handle errors and exit, if necessary. */ if (0 != kill_ret) { const int saved_errno = errno; std::cerr << "WARNING: failed to kill process group '" << pgid << "': " << std::strerror (saved_errno) << std::endl; } std::exit (EXIT_SUCCESS); } int unix_cleanup (const pid_t parent) { /* * Unblock all signals first. * Signal blocks are inherited, so you never you what is currently set. */ sigset_t empty_set; if (0 != sigemptyset (&empty_set)) { const int saved_errno = errno; std::cerr << "Unable to fetch empty signal set: " << std::strerror (saved_errno) << std::endl; kill_pgroup (-1); /* Anything here shall be unreachable. */ } if (0 != sigprocmask (SIG_SETMASK, &empty_set, NULL)) { const int saved_errno = errno; std::cerr << "Unable to set empty signal set: " << std::strerror (saved_errno) << std::endl; kill_pgroup (-1); /* Anything here shall be unreachable. */ } std::vector ignore_signals; ignore_signals.push_back (SIGINT); ignore_signals.push_back (SIGTERM); ignore_signals.push_back (SIGPIPE); ignore_signals.push_back (SIGQUIT); ignore_signals.push_back (SIGUSR1); ignore_signals.push_back (SIGUSR2); for (std::vector::iterator it = ignore_signals.begin (); it != ignore_signals.end (); ++it) { struct sigaction sig_action; sig_action.sa_handler = SIG_IGN; sig_action.sa_mask = empty_set; sig_action.sa_flags = SA_RESTART; /* Set up signal handler to ignore the current signal. */ if (0 != sigaction (*it, &sig_action, NULL)) { const int saved_errno = errno; std::cerr << "Unable to ignore signal " << strsignal (*it) << ": " << std::strerror (saved_errno) << std::endl; kill_pgroup (-1); /* Anything here shall be unreachable. */ } } { struct sigaction sig_action; sig_action.sa_handler = kill_pgroup; sig_action.sa_mask = empty_set; sig_action.sa_flags = SA_RESTART; if (0 != sigaction (SIGHUP, &sig_action, NULL)) { const int saved_errno = errno; std::cerr << "Unable to set up signal handler for SIGHUP: " << std::strerror (saved_errno) << std::endl; kill_pgroup (-1); /* Anything here shall be unreachable. */ } } /* Sleep forever... at least two seconds in each run. */ for (;;) { pid_t cur_ppid = getppid (); /* cur_ppid should match parent, otherwise the parent died. */ if (cur_ppid != parent) { kill_pgroup (SIGHUP); } sleep (2); } /* * Anything here shall be unreachable. * But make compilers happy by returning something. */ return (EXIT_SUCCESS); } } #endif /* defined (Q_OS_UNIX) */ x2goclient-4.1.2.3/src/unixhelper.h0000644000000000000000000000654314447111614013761 0ustar /*************************************************************************** * Copyright (C) 2015-2023 by Mihai Moldovan * * * * This program is free software; you can redistribute 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef UNIXHELPER_H #define UNIXHELPER_H #include #include #ifdef Q_OS_UNIX namespace unixhelper { /* * Unblocks all signals and installs a signal handler for SIGHUP, * which calls kill_pgroup (). * * Should signal unblocking or installing the signal handler fail, * an emergency exit is performed and * the whole process group killed. * * The signals SIGINT, SIGTERM, SIGPIPE, SIGQUIT, SIGUSR1 and * SIGUSR2 are ignored. * * Loops indefinitely afterwards. * * In this loop, the current parent PID is polled and compared against * the original value passed via parameter parent. * Should they mismatch, the parent died and kill_pgroup () is called. */ int unix_cleanup (const pid_t parent); /* * Wrapper for killing a whole process group. * The "real" killing work is done by real_kill_pgroup (). * This function tries to fork off another process and change * the new function's process group ID. * If any of these operations fail, killing the original process * group ID will still continue, albeit with warning messages. * * signal may be any of: * * -1 to indicate an error leading to emergency termination * * SIGHUP as the standard signal that is sent when the * group leader dies under specific circumstances * (we cannot rely that this always happens, though, * so a polling solution is needed, see unix_cleanup().) * Other values are not handled. */ void kill_pgroup (const int signal); /* * Kills the whole process group. * First, SIGTERM is sent to the group. * A 10 seconds grace period is granted to make sure * processes exit cleanly on their own. * Lastly, SIGKILL is sent to the group -- which also * implies the demise of this program. * * pgid is the process group ID to be killed. */ void real_kill_pgroup (const pid_t pgid); } #endif /* defined (Q_OS_UNIX) */ #endif /* !defined (UNIXHELPER_H) */ x2goclient-4.1.2.3/src/unix_stdint.h0000644000000000000000000000371114447111614014140 0ustar /*************************************************************************** * Copyright (C) 2016-2023 by Mihai Moldovan * * * * This program is free software; you can redistribute 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef UNIX_STDINT_H #define UNIX_STDINT_H #ifdef Q_OS_UNIX #include /* * We need this ugly hack because the cstdint header is C++11-only * (or available with extensions we can't portably use) * and stdint.h won't put these types into the std namespace. */ namespace std { using ::int8_t; using ::int16_t; using ::int32_t; using ::int64_t; using ::uint8_t; using ::uint16_t; using ::uint32_t; using ::uint64_t; } /* Same issue with unistd's ssize_t type. */ namespace std { using ::ssize_t; } #endif /* defined (Q_OS_UNIX) */ #endif /* !defined (UNIX_STDINT_H) */ x2goclient-4.1.2.3/src/userbutton.cpp0000644000000000000000000000545614447111614014345 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include "x2goclientconfig.h" #include "userbutton.h" #include #include #include #include "onmainwindow.h" UserButton::UserButton ( ONMainWindow* wnd, QWidget *par, QString name, QString fullName, QPixmap& foto, QPalette& bgpal, int width,int height ) : QPushButton ( par ) { user=name; fname=fullName; image=foto; setFocusPolicy ( Qt::NoFocus ); setAutoFillBackground ( true ); setFlat ( true ); bgpal.setColor ( QPalette::Active, QPalette::WindowText, QPalette::Mid ); bgpal.setColor ( QPalette::Active, QPalette::ButtonText, QPalette::Mid ); bgpal.setColor ( QPalette::Inactive, QPalette::WindowText, QPalette::Mid ); bgpal.setColor ( QPalette::Inactive, QPalette::ButtonText, QPalette::Mid ); setPalette ( bgpal ); bool miniMode=wnd->retMiniMode(); if ( width==0 || height==0 ) { if ( !miniMode ) { setFixedSize ( 340,100 ); } else setFixedSize ( 250,100 ); } else { setFixedSize ( width,height ); } QLabel* f=new QLabel ( this ); QString text=name+"\n("+fullName+")"; QLabel* n=new QLabel ( text,this ); if ( !miniMode ) n->move ( 110,25 ); else n->move ( 90,25 ); f->setPixmap ( foto ); f->setMaximumSize ( 80,80 ); if ( !miniMode ) f->move ( 10,10 ); else f->move ( 5,10 ); connect ( this,SIGNAL ( clicked() ),this,SLOT ( slotClicked() ) ); } UserButton::~UserButton() {} void UserButton::slotClicked() { emit userSelected ( this ); } x2goclient-4.1.2.3/src/userbutton.h0000644000000000000000000000370214447111614014002 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef USERBUTTON_H #define USERBUTTON_H #include "x2goclientconfig.h" #include /** @author Oleksandr Shneyder */ class QPixmap; class ONMainWindow; class UserButton : public QPushButton { Q_OBJECT public: UserButton ( ONMainWindow* wnd, QWidget *parent, QString username, QString fullName, QPixmap& foto, QPalette& backGround, int width=0,int height=0 ); ~UserButton(); QString username() {return user;} QString fullName() {return fname;} const QPixmap& foto() {return image;} const QPixmap& background() {return bg;} private: QString user; QString fname; QPixmap image; QPixmap bg; private slots: void slotClicked(); signals: void userSelected ( UserButton* ); }; #endif x2goclient-4.1.2.3/src/version.h0000644000000000000000000000256114447111614013257 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * Copyright (C) 2015-2023 by Mihai Moldovan * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef VERSION_H #define VERSION_H #define VERSION "4.1.2.3" #endif /* !defined (VERSION_H) */ x2goclient-4.1.2.3/src/wapi.cpp0000644000000000000000000004407614447111614013074 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include "x2goclientconfig.h" #ifdef Q_OS_WIN #include #include #include #include #include #include #include #include "wapi.h" #include "x2gologdebug.h" #if QT_VERSION > 0x050000 #include #endif long wapiSetFSWindow ( HWND hWnd, const QRect& desktopGeometry ) { SetWindowLong(hWnd, GWL_STYLE, WS_VISIBLE); SetWindowLong(hWnd, GWL_EXSTYLE, 0); SetWindowPos ( hWnd, HWND_TOPMOST, desktopGeometry.x(), desktopGeometry.y(), desktopGeometry.width(), desktopGeometry.height(), 0); return WS_VISIBLE; } void wapiRestoreWindow( HWND hWnd, long style, const QRect& desktopGeometry ) { SetWindowLong ( hWnd, GWL_STYLE,style); SetWindowPos ( hWnd, HWND_TOP, desktopGeometry.x(), desktopGeometry.y(), desktopGeometry.width(), desktopGeometry.height(), SWP_FRAMECHANGED ); } void wapiHideFromTaskBar ( HWND wnd ) { ShowWindow ( wnd, SW_HIDE ) ; SetWindowLong ( wnd, GWL_EXSTYLE, GetWindowLong ( wnd, GWL_EXSTYLE ) & ~WS_EX_APPWINDOW ); SetWindowLong ( wnd, GWL_EXSTYLE, GetWindowLong ( wnd, GWL_EXSTYLE ) | WS_EX_TOOLWINDOW ); ShowWindow ( wnd, SW_SHOW ) ; } HWND wapiSetParent ( HWND child, HWND par ) { HWND wn=SetParent ( child,par ); if ( par ) SetWindowLong ( child, GWL_STYLE, GetWindowLong ( child, GWL_STYLE ) | WS_CHILD ); else SetWindowLong ( child, GWL_STYLE, GetWindowLong ( child, GWL_STYLE ) &~ WS_CHILD ); SetWindowLong ( child, GWL_STYLE, GetWindowLong ( child, GWL_STYLE ) | WS_POPUP ); return wn; } bool wapiClientRect ( HWND wnd, QRect& rect ) { RECT rcWindow; if ( GetClientRect ( wnd,&rcWindow ) ) { rect.setCoords ( rcWindow.left, rcWindow.top, rcWindow.right,rcWindow.bottom ); return true; } return false; } bool wapiWindowRectWithoutDecoration ( HWND wnd, QRect& rect ) { RECT rcWindow; if ( GetClientRect ( wnd,&rcWindow ) ) { POINT pnt; pnt.x=0; pnt.y=0; ClientToScreen(wnd,&pnt); rect.setRect ( pnt.x, pnt.y, rcWindow.right-rcWindow.left,rcWindow.bottom-rcWindow.top ); return true; } return false; } bool wapiWindowRect ( HWND wnd, QRect& rect ) { RECT rcWindow; if ( GetWindowRect ( wnd,&rcWindow ) ) { rect.setCoords ( rcWindow.left, rcWindow.top, rcWindow.right,rcWindow.bottom ); return true; } return false; } bool wapiGetBorders ( HWND wnd, int& vBorder, int& hBorder, int& barHeight ) { WINDOWINFO wifo; wifo.cbSize=sizeof ( WINDOWINFO ); if ( !GetWindowInfo ( wnd,&wifo ) ) return false; vBorder=wifo.cxWindowBorders; hBorder=wifo.cyWindowBorders; TITLEBARINFO bifo; bifo.cbSize=sizeof ( TITLEBARINFO ); if ( !GetTitleBarInfo ( wnd,&bifo ) ) return false; barHeight=bifo.rcTitleBar.bottom-bifo.rcTitleBar.top; return true; } bool wapiShowWindow ( HWND wnd, wapiCmdShow nCmdShow ) { int cmd=WAPI_SHOWNORMAL; switch ( nCmdShow ) { case WAPI_FORCEMINIMIZE: cmd=SW_FORCEMINIMIZE; break; case WAPI_HIDE: cmd=SW_HIDE; break; case WAPI_MAXIMIZE: cmd=SW_MAXIMIZE; break; case WAPI_MINIMIZE: cmd=SW_MINIMIZE; break; case WAPI_RESTORE: cmd=SW_RESTORE; break; case WAPI_SHOW: cmd=SW_SHOW; break; case WAPI_SHOWDEFAULT: cmd=SW_SHOWDEFAULT; break; case WAPI_SHOWMAXIMIZED: cmd=SW_SHOWMAXIMIZED; break; case WAPI_SHOWMINIMIZED: cmd=SW_SHOWMINIMIZED; break; case WAPI_SHOWMINNOACTIVE: cmd=SW_SHOWMINNOACTIVE; break; case WAPI_SHOWNA: cmd=SW_SHOWNA; break; case WAPI_SHOWNOACTIVATE: cmd=SW_SHOWNOACTIVATE; break; case WAPI_SHOWNORMAL: cmd=SW_SHOWNORMAL; break; } return ShowWindow ( wnd, cmd ); } bool wapiUpdateWindow ( HWND wnd ) { return RedrawWindow ( wnd,0,0,RDW_INVALIDATE ); } bool wapiMoveWindow ( HWND wnd, int x, int y, int width, int height, bool repaint ) { return MoveWindow ( wnd, x, y, width, height, repaint ); } HWND wapiFindWindow (const QString& text ) { HWND w=GetTopWindow(NULL); char caption[512]; while (w) { if(GetWindowTextA(w, caption, 512)) { QString c(caption); if(c.indexOf(text)!=-1) { return w; } } w=GetNextWindow(w,GW_HWNDNEXT); } return 0; } bool wapiSetWindowText( HWND wnd, const QString& text) { return SetWindowText(wnd, (LPCTSTR)text.utf16() ); } void wapiSetWindowIcon ( HWND wnd, const QPixmap& icon) { int iconx=GetSystemMetrics(SM_CXICON); int icony=GetSystemMetrics(SM_CYICON); int smallx=GetSystemMetrics(SM_CXSMICON); int smally=GetSystemMetrics(SM_CXSMICON); HICON largeIcon=0; HICON smallIcon=0; #if QT_VERSION > 0x050000 largeIcon=QtWin::toHICON(icon.scaled(iconx,icony, Qt::IgnoreAspectRatio,Qt::SmoothTransformation)); smallIcon=QtWin::toHICON(icon.scaled(smallx,smally, Qt::IgnoreAspectRatio,Qt::SmoothTransformation)); #else largeIcon=icon.scaled(iconx,icony, Qt::IgnoreAspectRatio,Qt::SmoothTransformation).toWinHICON (); smallIcon=icon.scaled(smallx,smally, Qt::IgnoreAspectRatio,Qt::SmoothTransformation).toWinHICON (); #endif x2goDebug<<"Large icon: "<0) { TCHAR* buf=new TCHAR[len+1]; len=GetLogicalDriveStrings(len,buf); for (int i=0; iPrimaryGroup ); } if ( primaryGroupName ) { *primaryGroupName=getNameFromSid ( pGroupInfo->PrimaryGroup, retSysName ); } if ( pGroupInfo ) GlobalFree ( pGroupInfo ); } if ( retSid || retUname ) { PTOKEN_USER pUserInfo=0; DWORD dwResult=0; DWORD dwSize=0; if ( !GetTokenInformation ( hToken, TokenUser, NULL, dwSize, &dwSize ) ) { dwResult = GetLastError(); if ( dwResult != ERROR_INSUFFICIENT_BUFFER ) { CloseHandle ( hToken ); return false; } } pUserInfo = ( PTOKEN_USER ) GlobalAlloc ( GPTR, dwSize ); if ( ! GetTokenInformation ( hToken, TokenUser, pUserInfo, dwSize, &dwSize ) ) { if ( pUserInfo ) GlobalFree ( pUserInfo ); CloseHandle ( hToken ); return false; } if ( retSid ) { *retSid=getStringFromSid ( pUserInfo->User.Sid ); } if ( retUname ) { *retUname=getNameFromSid ( pUserInfo->User.Sid, retSysName ); } if ( pUserInfo ) GlobalFree ( pUserInfo ); } CloseHandle ( hToken ); return true; } void wapiShellExecute ( const QString& operation, const QString& file, const QString& parameters, const QString& dir, HWND win ) { if ( parameters==QString::null ) ShellExecute ( win, ( LPCTSTR ) ( operation.utf16() ), ( LPCTSTR ) ( file.utf16() ),0, ( LPCTSTR ) ( dir.utf16() ),SW_SHOWNORMAL ); else ShellExecute ( win, ( LPCTSTR ) ( operation.utf16() ), ( LPCTSTR ) ( file.utf16() ), ( LPCTSTR ) ( parameters.utf16() ), ( LPCTSTR ) ( dir.utf16() ),SW_SHOWNORMAL ); } QString wapiGetDefaultPrinter() { TCHAR *prName; DWORD length; GetDefaultPrinter ( 0,&length ); if ( !length ) return QString::null; prName=new TCHAR[length]; GetDefaultPrinter ( prName,&length ); if ( !length ) { delete []prName; return QString::null; } QString printer=QString::fromUtf16 ( ( const ushort* ) prName ); delete []prName; return printer; } QStringList wapiGetLocalPrinters() { QStringList printers; PRINTER_INFO_4 *info_array; DWORD sizeOfArray; DWORD bufSize=0; DWORD sizeNeeded=0; EnumPrinters ( PRINTER_ENUM_LOCAL,0,4,NULL,bufSize, &sizeNeeded,&sizeOfArray ); if ( !sizeNeeded ) { return printers; } info_array= ( PRINTER_INFO_4* ) new char[sizeNeeded]; if ( !info_array ) return printers; bufSize=sizeNeeded; EnumPrinters ( PRINTER_ENUM_LOCAL,0,4, ( LPBYTE ) info_array,bufSize, &sizeNeeded,&sizeOfArray ); if ( !sizeNeeded || !sizeOfArray ) { delete []info_array; return printers; } for ( uint i=0; i * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef _WAPI_H #define _WAPI_H #include "x2goclientconfig.h" #ifdef Q_OS_WIN #include #include #include #include #include enum wapiCmdShow { WAPI_FORCEMINIMIZE, WAPI_HIDE, WAPI_MAXIMIZE, WAPI_MINIMIZE, WAPI_RESTORE, WAPI_SHOW, WAPI_SHOWDEFAULT, WAPI_SHOWMAXIMIZED, WAPI_SHOWMINIMIZED, WAPI_SHOWMINNOACTIVE, WAPI_SHOWNA, WAPI_SHOWNOACTIVATE, WAPI_SHOWNORMAL }; enum wapiBtnEvent { WAPI_LBUTTONUP, WAPI_LBUTTONDOWN }; HWND wapiSetParent ( HWND child, HWND par ); bool wapiClientRect ( HWND wnd, QRect& rect ); bool wapiWindowRect ( HWND wnd, QRect& rect ); bool wapiWindowRectWithoutDecoration(HWND wnd, QRect& rect) ; bool wapiShowWindow ( HWND wnd, wapiCmdShow nCmdShow ); bool wapiUpdateWindow ( HWND wnd ); bool wapiSetWindowText ( HWND wnd, const QString& text); void wapiSetWindowIcon ( HWND wnd, const QPixmap& icon); bool wapiMoveWindow ( HWND wnd, int x, int y, int width, int height, bool repaint ); bool wapiGetBorders ( HWND wnd, int& vBorder, int& hBorder, int& barHeight ); void wapiSetCallBackProc ( void ( *prc ) ( wapiBtnEvent, QPoint ) ); void wapiHideFromTaskBar ( HWND wnd ); HWND wapiFindWindow ( const QString& text); QString wapiShortFileName ( const QString& longName ); bool wapiAccountInfo ( QString* retSid, QString* retUname, QString* primaryGroupSID, QString* primaryGroupName, QString* retSysName ); void wapiShellExecute ( const QString& operation, const QString& file, const QString& parameters, const QString& dir,HWND win=0 ); QString wapiGetDefaultPrinter(); QStringList wapiGetLocalPrinters(); long wapiSetFSWindow ( HWND hWnd, const QRect& desktopGeometry ); void wapiRestoreWindow ( HWND hWnd, long style, const QRect& desktopGeometry ); QString wapiGetDriveByLabel(const QString& label); QString wapiGetUserName(); void wapiSetFilePermissions(const QString& path); QString wapiGetKeyboardLayout(); void wapiSetWinNotResizable(HWND wnd); short wapiIsWinResizeable(HWND wnd); #endif #endif x2goclient-4.1.2.3/src/windows_stdint.h0000644000000000000000000000366614447111614014660 0ustar /*************************************************************************** * Copyright (C) 2012-2023 by Mihai Moldovan * * * * This program is free software; you can redistribute 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef WINDOWS_STDINT_H #define WINDOWS_STDINT_H #ifdef Q_OS_WIN /* We need this ugly hack because Windows doesn't know about std::(u)int*_t types. */ namespace std { typedef signed char int8_t; typedef signed short int16_t; typedef signed int int32_t; typedef signed long long int int64_t; typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned int uint32_t; typedef unsigned long long int uint64_t; } #endif /* defined (Q_OS_WIN) */ #endif /* !defined (WINDOWS_STDINT_H) */ x2goclient-4.1.2.3/src/x2goclientconfig.h0000644000000000000000000000303714447111614015035 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #if !defined(_X2GOCLIENT_CONFIG_H_) #define _X2GOCLIENT_CONFIG_H_ //min supported windows version is windows vista #define WINVER 0x0601 #include #include #include //#define LOGFILE QDir::homePath()+"/x2goclient.log" #if !defined Q_OS_WIN #define USELDAP #endif #ifdef Q_OS_WIN #undef USELDAP #endif #endif x2goclient-4.1.2.3/src/x2goclient.cpp0000644000000000000000000001474614447111614014213 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * Copyright (C) 2015-2023 by Mihai Moldovan * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include "unixhelper.h" #include "ongetpass.h" #include "compat.h" int wrap_x2go_main (int argc, char **argv) { return (x2goMain (argc, argv)); } #ifdef Q_OS_UNIX int fork_helper (int argc, char **argv) { /* Fork off to start helper process. */ pid_t tmp_pid = fork (); /* Child. */ if (0 == tmp_pid) { /* Starting unixhelper. */ std::vector new_argv; new_argv.push_back (std::string (argv[0])); new_argv.push_back ("--unixhelper"); std::vector new_argv_c_str; for (std::vector::iterator it = new_argv.begin (); it != new_argv.end (); ++it) { const char *elem = (*it).c_str (); new_argv_c_str.push_back (strndup (elem, std::strlen (elem))); } /* Add null pointer as last element. */ new_argv_c_str.push_back (0); if (0 != execvp (new_argv_c_str.front (), &(new_argv_c_str.front ()))) { const int saved_errno = errno; std::cerr << "Failed to re-execute process as UNIX cleanup helper tool: " << std::strerror (saved_errno) << "\n" << "Terminating and killing parent." << "\n" << "Please report a bug, refer to this documentation: https://wiki.x2go.org/doku.php/wiki:bugs" << std::endl; pid_t parent_pid = getppid (); if (0 != kill (parent_pid, SIGTERM)) { const int saved_errno = errno; std::cerr << "Failed to kill parent process: " << std::strerror (saved_errno) << std::endl; } std::exit (EXIT_FAILURE); } /* Anything here shall be unreachable. */ return (0); } /* Error. */ else if (-1 == tmp_pid) { const int saved_errno = errno; std::cerr << "Unable to create a new process for the UNIX cleanup watchdog: " << std::strerror (saved_errno) << "\n"; std::cerr << "Terminating. Please report a bug, refer to this documentation: https://wiki.x2go.org/doku.php/wiki:bugs" << std::endl; std::exit (EXIT_FAILURE); } /* Parent. */ else { /* Start real X2Go Client. */ return (wrap_x2go_main (argc, argv)); } } #endif /* defined (Q_OS_UNIX) */ int main (int argc, char **argv) { #ifdef Q_OS_UNIX /* * Flags we don't need a cleanup helper for, since we know that X2Go Client * will never spawn other processes. * * FIXME: What we'd actually want to have at this point (instead of a * hardcoded list of parameters, anyway) is to use the argument parser * from ONMainWindow (parseParameter). If this function returns false * for any parameter, we know that we won't ever need the UNIX cleanup * helper tool. Sadly, ONMainWindow is only started/available later, * so we can't use any of its functionality here. We'd also need to * make the function side-effect free. It should probably be * refactored into a special options parser class. */ const std::string bypass_flags[] = { "--bypass-cleanup-helper", "--help", "--help-pack", "--version", "-v", "--changelog", "--git-info" }; bool bypass_unix_helper = 0; bool unix_helper_request = 0; for (int i = 0; i < argc; ++i) { /* No need to continue scanning if we got the information we were looking for. */ if ((bypass_unix_helper) && (unix_helper_request)) { break; } std::string cur_arg (argv[i]); /* Make the current argument lowercase. */ std::transform (cur_arg.begin (), cur_arg.end (), cur_arg.begin (), ::tolower); if (!(cur_arg.empty ())) { /* Scan program arguments for --unixhelper flag. */ if ((!(unix_helper_request)) && (0 == cur_arg.compare ("--unixhelper"))) { unix_helper_request = 1; } /* Scan for flags bypassing the unix helper. */ if (!(bypass_unix_helper)) { for (std::size_t y = 0; y < (sizeof (bypass_flags) / sizeof (*bypass_flags)); ++y) { if (0 == cur_arg.compare (bypass_flags[y])) { bypass_unix_helper = 1; } } } } } /* Sanity checks! */ if ((unix_helper_request) && (bypass_unix_helper)) { std::cerr << "Re-execution in UNIX cleanup helper mode was requested, but a command line parameter that is supposed to " << "disable the UNIX cleanup helper was found.\n" << "Terminating. Please report a bug, refer to this documentation: https://wiki.x2go.org/doku.php/wiki:bugs" << std::endl; return (EXIT_FAILURE); } if (bypass_unix_helper) { return (wrap_x2go_main (argc, argv)); } else { if (unix_helper_request) { /* We were instructed to start as the UNIX cleanup helper tool. */ return (unixhelper::unix_cleanup (getppid ())); } else { /* * setsid() may succeed and we become a session and process * group leader, or it may fail indicating that we already * are a process group leader. Either way is fine. */ setsid (); /* We should be process group leader by now. */ return (fork_helper (argc, argv)); } } #else /* defined (Q_OS_UNIX) */ return (wrap_x2go_main (argc, argv)); #endif /* defined (Q_OS_UNIX) */ } x2goclient-4.1.2.3/src/x2gologdebug.cpp0000644000000000000000000000304014447111614014506 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include "x2gologdebug.h" #include "x2goclientconfig.h" #ifdef LOGFILE #include X2goLogDebug::X2goLogDebug():QTextStream() { logFile.setFileName(LOGFILE); if(logFile.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Append)) { setDevice(&logFile); } } X2goLogDebug::~X2goLogDebug() { logFile.close(); } #endif x2goclient-4.1.2.3/src/x2gologdebug.h0000644000000000000000000000524214447111614014161 0ustar /************************************************************************** * Copyright (C) 2005-2020 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef X2GOLOGDEBUG_H #define X2GOLOGDEBUG_H #include #include #include "x2goclientconfig.h" #include "onmainwindow.h" /** @author Oleksandr Shneyder */ #define __x2goPrefix "x2go-" #define __x2goDebugPrefix "DEBUG-" #define __x2goInfoPrefix "INFO-" #define __x2goWarningPrefix "WARNING-" #define __x2goErrorPrefix "ERROR-" #define __x2goPostfix "> " #ifdef LOGFILE class X2goLogDebug: public QTextStream { public: X2goLogDebug(); ~X2goLogDebug(); private: QFile logFile; }; #define __x2goDebug X2goLogDebug()<<"\n" #define __x2goInfo X2goLogDebug()<<"\n" #define __x2goWarning X2goLogDebug()<<"\n" #define __x2goError X2goLogDebug()<<"\n" #else #include #define __x2goDebug qDebug().nospace() #define __x2goInfo qDebug().nospace() #define __x2goWarning qWarning().nospace() #define __x2goError qCritical().nospace() #endif //LOGFILE #define x2goDebugf __x2goDebug <<__x2goPrefix<<__x2goDebugPrefix <<__FILE__<<":"<<__LINE__<<__x2goPostfix #define x2goInfof(NUM) __x2goInfo <<__x2goPrefix<<__x2goInfoPrefix < * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include "x2gosettings.h" #include "x2goclientconfig.h" #include "x2gologdebug.h" #include "onmainwindow.h" #include #include #include X2goSettings::X2goSettings(QString fileContent, QSettings::Format format) { cfgFile=new QTemporaryFile(); cfgFile->open(); QTextStream out(cfgFile); out<close(); set=new QSettings ( cfgFile->fileName(), format ); } X2goSettings::X2goSettings ( QString group ) { cfgFile=0l; if (group=="sessions" && ONMainWindow::getSessionConf().length()>0) { set=new QSettings ( ONMainWindow::getSessionConf(), QSettings::IniFormat ); return; } #ifndef Q_OS_WIN if(!centralSettings()) { set=new QSettings ( ONMainWindow::getHomeDirectory() + "/.x2goclient/"+group, QSettings::NativeFormat ); } else { QString settingPath="/etc/x2goclient/config/"+qgetenv("USER")+"/"; QDir d(settingPath); if(!d.exists()) { settingPath="/etc/x2goclient/config/All Users/"; } // x2goErrorf(99)<<"CFG PATH:"<beginGroup ( group ); } else { QSettings setroot("HKEY_LOCAL_MACHINE\\SOFTWARE\\x2goclient\\config",QSettings::NativeFormat); QString setPath="HKEY_LOCAL_MACHINE\\SOFTWARE\\x2goclient\\config\\All Users"; QString uname=getenv("USERNAME"); foreach(QString group, setroot.childGroups()) { if(group==uname) { setPath="HKEY_LOCAL_MACHINE\\SOFTWARE\\x2goclient\\config\\"+uname; break; } } set=new QSettings ( setPath, QSettings::NativeFormat); set->beginGroup ( group ); } } else { set=new QSettings ( ONMainWindow::getHomeDirectory() + "/.x2goclient/"+group, QSettings::IniFormat ); } #endif } X2goSettings::~X2goSettings() { delete set; if (cfgFile) delete cfgFile; } bool X2goSettings::centralSettings() { #ifndef Q_OS_WIN QDir d("/etc/x2goclient/config"); return d.exists(); #else QSettings set("HKEY_LOCAL_MACHINE\\SOFTWARE\\x2goclient",QSettings::NativeFormat); foreach(QString group,set.childGroups()) { if(group=="config") { return true; } } return false; #endif } x2goclient-4.1.2.3/src/x2gosettings.h0000644000000000000000000000324514447111614014232 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef X2GOSETTINGS_H #define X2GOSETTINGS_H #include class QTemporaryFile; /** @author Oleksandr Shneyder */ class X2goSettings { public: X2goSettings ( QString group ); X2goSettings ( QString fileContent, QSettings::Format format); ~X2goSettings(); static bool centralSettings(); QSettings* setting() { return set; } private: QSettings* set; QTemporaryFile* cfgFile; }; #endif x2goclient-4.1.2.3/src/x2goutils.cpp0000644000000000000000000002653614447111614014075 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * Copyright (C) 2016-2023 by Mihai Moldovan * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include #include #include #include #include #include #include #include #include #include "x2goutils.h" #include "onmainwindow.h" #include "x2gologdebug.h" QString expandHome (QString path) { path = path.trimmed (); if (path.startsWith ("~/") || path.startsWith ("~\\")) { path = path.replace (QString ("~"), QDir::homePath ()); } return path; } QString fixup_resource_URIs (const QString &res_path) { QString ret (res_path); if (!(res_path.isEmpty ())) { if (ret.at (1) != '/') { ret.insert (1, '/'); } } return (ret); } QString wrap_legacy_resource_URIs (const QString &res_path) { QString ret (res_path); /* * Skip empty or non-resource URIs. * Assume all paths not starting with a colon are * absolute, non-resource URIs. */ if ((!(res_path.isEmpty ())) && (res_path.startsWith (':'))) { std::vector legacy_locations; legacy_locations.push_back (QString (":/icons/")); legacy_locations.push_back (QString (":/png/")); legacy_locations.push_back (QString (":/svg/")); ret = fixup_resource_URIs (ret); bool detected = false; /* This would be so much easier with C++ and lambdas... */ std::vector::const_iterator it = legacy_locations.begin (); while (it != legacy_locations.end ()) { if (ret.startsWith (*(it++))) { detected = true; break; } } if (detected) ret.insert (1, QString ("/img")); } return (ret); } QString convert_to_rich_text (const QString &text, bool force) { QString fixup_text (text); fixup_text.replace ("\n", "\n
\n"); if (force) { // This is a workaround for a bug in Qt. Even though we set Qt::RichText as the text format // later on, the informative text is not recognized as rich text, UNLESS a HTML tag // is used ON THE VERY FIRST LINE. // Make sure, that there always is one... fixup_text.prepend (""); } return (fixup_text); } void show_RichText_Generic_MsgBox (QMessageBox::Icon icon, const QString &main_text, const QString &informative_text, bool app_modal) { QString fixup_main_text (convert_to_rich_text (main_text)); QString fixup_informative_text (convert_to_rich_text (informative_text, true)); QMessageBox msg_box (icon, QString ("X2Go Client"), fixup_main_text, QMessageBox::Ok); msg_box.setTextFormat (Qt::RichText); msg_box.setInformativeText (fixup_informative_text); if (app_modal) { msg_box.setWindowModality (Qt::ApplicationModal); } else { msg_box.setWindowModality (Qt::WindowModal); } msg_box.exec (); } void show_RichText_WarningMsgBox (const QString &main_text, const QString &informative_text, bool app_modal) { show_RichText_Generic_MsgBox (QMessageBox::Warning, main_text, informative_text, app_modal); } void show_RichText_ErrorMsgBox (const QString &main_text, const QString &informative_text, bool app_modal) { show_RichText_Generic_MsgBox (QMessageBox::Critical, main_text, informative_text, app_modal); } QString git_changelog_extract_commit_sha (const QString &gitlog) { QString ret = ""; /* * Do a poor man's split. * We know that a newline character should be somewhere at the beginning of the string. * We don't need to have Qt split the string up completely as we only care about * a substring: from start to the first newline character. */ std::ptrdiff_t pos = gitlog.indexOf ("\n"); if (0 < pos) { ret = gitlog.left (pos + 1); x2goDebug << "First line of git changelog: " << ret; pos = ret.lastIndexOf (")"); if (0 < pos) { std::ptrdiff_t pos_paren_start = ret.lastIndexOf ("("); if ((0 < pos_paren_start) && (pos_paren_start < pos)) { ret = ret.mid (pos_paren_start + 1, pos - pos_paren_start - 1); } else { // Either starting parenthesis not found or starting parenthesis comes first. ret = ""; } } else { // End parenthesis not found. ret = ""; } } return (ret); } bool font_is_monospaced (const QFont &font) { const QFontInfo font_info (font); return (font_info.fixedPitch ()); } #ifdef Q_OS_DARWIN void show_XQuartz_not_found_error () { show_XQuartz_generic_error (QObject::tr ("X2Go Client could not find any suitable X11 server."), QString ()); } void show_XQuartz_start_error () { show_XQuartz_generic_error (QObject::tr ("X2Go Client could not start X11 server."), QObject::tr ("X2Go Client requires XQuartz to be installed.\n\n" "If XQuartz is already installed on your system,\n" "please select the correct path in the now upcoming dialog.\n" "Refer to the end of this message for path examples,\n" "in case you do not know the exact location yourself.\n\n" "Should you have not installed XQuartz yet, please\n" "follow the outlined steps:\n\n")); } void show_XQuartz_generic_error (const QString &main_error, const QString &additional_info) { show_RichText_WarningMsgBox (main_error, additional_info + QObject::tr ("MacPorts users, please install either the port xorg-server\n" "or the port xorg-server-devel.\n" "Upon successful installation, please follow the instructions printed\n" "by the port utility to autostart/load the server.\n\n" "All other users, please obtain and install XQuartz from:\n" "
" "https://www.xquartz.org/" "
\n\n" "Afterwards, restart X2Go Client and select the correct path\n" "to the X11 application in the general X2Go Client settings.\n" "This will most likely be\n" "
/Applications/MacPorts/X11.app
\n" "or\n" "
/Applications/Utilities/XQuartz.app
")); } #endif /* defined (Q_OS_DARWIN) */ #ifdef Q_OS_UNIX QString add_to_path (const QString &orig_path, const QStringList &add, const bool back) { QString ret = orig_path; std::vector found; QStringList orig_path_list = orig_path.split (":"); x2goDebug << "path value at beginning: " << orig_path; /* * Clean up add list. We want to make sure no entry ends in a slash * and skip empty entries. */ QStringList tmp_clean_add; for (int i = 0; i < add.size (); ++i) { if (!(add[i].isEmpty ())) { if (add[i].right (1) == "/") { QString tmp_elem = add[i]; tmp_elem.chop (1); if (!(tmp_elem.isEmpty ())) { tmp_clean_add.append (tmp_elem); } } else { tmp_clean_add.append (add[i]); } } } x2goDebug << "tmp_clean_add: " << tmp_clean_add; /* Nothing to add, really... */ if (tmp_clean_add.isEmpty ()) { return (ret); } /* Create unique array. */ QStringList clean_add; { QStringList::const_iterator begin = tmp_clean_add.constBegin (), end = tmp_clean_add.constEnd (); for (QStringList::const_iterator cit = begin; cit != end; ++cit) { bool tmp_found = false; for (QStringList::const_iterator cit2 = cit + 1; cit2 != end; ++cit2) { if (*cit == *cit2) { tmp_found = true; break; } } if (!tmp_found) { clean_add.append (*cit); } } } x2goDebug << "clean_add: " << clean_add; /* Nothing to add. */ if (clean_add.isEmpty ()) { return (ret); } found.resize (clean_add.size (), false); for (int i = 0; i < orig_path_list.length (); ++i) { for (int y = 0; y < clean_add.size (); ++y) { if (!found[y]) { if ((orig_path_list[i] == QString (clean_add[y])) || (orig_path_list[i] == QString (clean_add[y] + '/'))) { found[y] = true; break; } } } } for (std::size_t i = 0; i < found.size (); ++i) { x2goDebug << "found entry i (" << i << ") in orig_path_list (" << clean_add[i] << "): " << found[i]; } if (back) { for (int i = 0; i < clean_add.size (); ++i) { if (!found[i]) { ret.append (QString (":" + clean_add[i])); } } } else { for (int i = (clean_add.size () - 1); i >= 0; --i) { if (!found[i]) { ret.prepend (QString (clean_add[i] + ":")); } } } x2goDebug << "return value at end: " << ret; return (ret); } QString find_binary (const QString &path, const QString &binary_name) { QString ret = ""; if (!(binary_name.isEmpty ())) { QString cur_path = ""; QString tmp_path = path; if (path.isEmpty ()) { tmp_path = "./"; } QStringList path_list = tmp_path.split (":"); for (QStringList::const_iterator const_it = path_list.constBegin (); const_it != path_list.constEnd (); ++const_it) { cur_path = *const_it; if (cur_path.isEmpty ()) { cur_path = "./"; } cur_path = QDir (cur_path).absolutePath (); cur_path += "/" + binary_name; QFileInfo tmp_file_info = QFileInfo (cur_path); if ((tmp_file_info.exists ()) && (tmp_file_info.isExecutable ())) { ret = tmp_file_info.canonicalFilePath (); break; } else { x2goDebug << "Binary at " << cur_path << " either does not exist (" << !(tmp_file_info.exists ()) << ") or is not executable (" << tmp_file_info.isExecutable () << ")"; } } } return (ret); } #endif /* defined (Q_OS_UNIX) */ x2goclient-4.1.2.3/src/x2goutils.h0000644000000000000000000000644314447111614013535 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * Copyright (C) 2016-2023 by Mihai Moldovan * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef X2GOUTILS_H #define X2GOUTILS_H #include #include #include #ifndef UNUSED #define UNUSED(x) do { (void) x; } while (0) #endif #ifndef MACPORTS_PREFIX #define MACPORTS_PREFIX "/opt/local" #endif QString expandHome (QString path); QString fixup_resource_URIs (const QString &res_path); QString wrap_legacy_resource_URIs (const QString &res_path); QString convert_to_rich_text (const QString &text, bool force = false); void show_RichText_Generic_MsgBox (QMessageBox::Icon icon, const QString &main_text, const QString &informative_text, bool app_modal = false); void show_RichText_WarningMsgBox (const QString &main_text, const QString &informative_text = "", bool app_modal = false); void show_RichText_ErrorMsgBox (const QString &main_text, const QString &informative_text = "", bool app_modal = false); QString git_changelog_extract_commit_sha (const QString &gitlog); bool font_is_monospaced (const QFont &font); #ifdef Q_OS_DARWIN void show_XQuartz_not_found_error (); void show_XQuartz_start_error (); void show_XQuartz_generic_error (const QString &main_error, const QString &additional_info); #endif /* defined (Q_OS_DARWIN) */ #ifdef Q_OS_UNIX /* * Add a list of strings to a PATH value. * * If back is true (the default), each entry is (potentially) appended to the original * PATH value, if not already existing within the original PATH value. * Ex.: :::... * * Otherwise, each entry is prepended to the original PATH value, if not already existing. * Ex.: ::...: */ QString add_to_path (const QString &orig_path, const QStringList &add, const bool back = true); /* * Returns the first existing path that contains binary_name. * Iff no component contains a binary called binary_name, an empty path is returned. * * Iff path is empty, (only) the current working dir is searched. */ QString find_binary (const QString &path, const QString &binary_name); #endif /* defined (Q_OS_UNIX) */ #endif /* !defined (X2GOUTILS_H) */ x2goclient-4.1.2.3/src/xsettingswidget.cpp0000644000000000000000000001022514447111614015355 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include "xsettingswidget.h" #include "x2gosettings.h" #include "x2goutils.h" #include #include "onmainwindow.h" #ifdef Q_OS_WIN XSettingsWidget::XSettingsWidget(ONMainWindow* mw, QWidget* parent) { UNUSED (parent); setupUi(this); X2goSettings st ( "settings" ); rbXming->setChecked(st.setting()->value("useintx",true).toBool()); rbOther->setChecked(!(st.setting()->value("useintx",true).toBool())); cbNoPrimary->setChecked(st.setting()->value("noprimaryclip",false).toBool()); leExec->setText(st.setting()->value("xexec","C:\\program files\\vcxsrv\\vcxsrv.exe").toString()); leCmdOptions->setText(st.setting()->value("options","-multiwindow -notrayicon -clipboard").toString()); cbOnstart->setChecked(true); cbOnstart->setChecked(st.setting()->value("onstart",true).toBool()); leWinMod->setText(st.setting()->value("optionswin","-screen 0 %wx%h -notrayicon -clipboard").toString()); leFSMod->setText(st.setting()->value("optionsfs","-fullscreen -notrayicon -clipboard").toString()); leSingApp->setText(st.setting()->value("optionssingle","-multiwindow -notrayicon -clipboard").toString()); leWholeDisplay->setText (st.setting ()->value ("optionswholedisplay", "-nodecoration -notrayicon -clipboard -screen 0 @").toString ()); // spDelay->setValue(st.setting()->value("delay",3).toInt()); pbExec->setIcon( QPixmap ( mw->iconsPath( "/16x16/file-open.png" )) ); } XSettingsWidget::~XSettingsWidget() { } void XSettingsWidget::slotSetExecutable() { QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), "C:\\", tr("Executable (*.exe)")); if (fileName.length()) leExec->setText(fileName); } void XSettingsWidget::setDefaults() { rbXming->setChecked(true); leExec->setText("C:\\program files\\vcxsrv\\vcxsrv.exe"); leCmdOptions->setText("-multiwindow -notrayicon -clipboard"); cbOnstart->setChecked(true); leWinMod->setText("-screen 0 %wx%h -notrayicon -clipboard"); leFSMod->setText("-fullscreen -notrayicon -clipboard"); leSingApp->setText("-multiwindow -notrayicon -clipboard"); leWholeDisplay->setText ("-nodecoration -notrayicon -clipboard -screen 0 @"); // spDelay->setValue(3); } void XSettingsWidget::saveSettings() { X2goSettings st ( "settings" ); st.setting()->setValue("useintx",rbXming->isChecked()); st.setting()->setValue("xexec",leExec->text()); st.setting()->setValue("options",leCmdOptions->text()); st.setting()->setValue("onstart",cbOnstart->isChecked()); st.setting()->setValue("noprimaryclip", cbNoPrimary->isChecked()); st.setting()->setValue("optionswin",leWinMod->text()); st.setting()->setValue("optionsfs",leFSMod->text()); st.setting()->setValue("optionssingle",leSingApp->text()); st.setting ()->setValue ("optionswholedisplay", leWholeDisplay->text ()); // st.setting()->setValue("delay",spDelay->value()); st.setting()->sync(); } #endif //Q_OS_WIN x2goclient-4.1.2.3/src/xsettingswidget.h0000644000000000000000000000322114447111614015020 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #ifndef XSETTINGSWIDGET_H #define XSETTINGSWIDGET_H #include #ifdef Q_OS_WIN #include "ui_xsettingsui.h" class ONMainWindow; class XSettingsWidget : public QWidget, private Ui_XSettingsWidgetUI { Q_OBJECT public: XSettingsWidget(ONMainWindow* mw, QWidget* parent); virtual ~XSettingsWidget(); void setDefaults(); void saveSettings(); private slots: void slotSetExecutable(); }; #endif //Q_OS_WIN #endif // XSETTINGSWIDGET_H x2goclient-4.1.2.3/VERSION0000644000000000000000000000001014447111613011664 0ustar 4.1.2.3 x2goclient-4.1.2.3/x2goclientconfig.pri0000644000000000000000000000006614447111614014610 0ustar # Override settings specified in x2goclient.pro here. x2goclient-4.1.2.3/x2goclient.pro0000644000000000000000000002205514447111614013432 0ustar # This file was created by KDevelop. # ------------------------------------------- # Override settings in this file. include (x2goclientconfig.pri) CONFIG += $$(X2GO_CLIENT_TARGET) CONFIG += $$(X2GO_LINUX_STATIC) CONFIG += link_pkgconfig #CONFIG += console VERSION = "$$cat($${PWD}/VERSION)" FORMS += src/ui/cupsprintsettingsdialog.ui \ src/ui/cupsprintwidget.ui \ src/ui/printdialog.ui \ src/ui/printercmddialog.ui \ src/ui/printwidget.ui \ src/ui/xsettingsui.ui \ src/ui/brokerpassdialog.ui \ src/ui/contest.ui \ src/ui/appdialog.ui \ src/ui/helpdialog.ui \ src/ui/folderexplorer.ui TRANSLATIONS += res/i18n/x2goclient_cs.ts \ res/i18n/x2goclient_de.ts \ res/i18n/x2goclient_da.ts \ res/i18n/x2goclient_es.ts \ res/i18n/x2goclient_et.ts \ res/i18n/x2goclient_fi.ts \ res/i18n/x2goclient_fr.ts \ res/i18n/x2goclient_nb_no.ts \ res/i18n/x2goclient_nl.ts \ res/i18n/x2goclient_pt.ts \ res/i18n/x2goclient_ru.ts \ res/i18n/x2goclient_sv.ts \ res/i18n/x2goclient_tr.ts \ res/i18n/x2goclient_zh_tw.ts HEADERS += src/configdialog.h \ src/editconnectiondialog.h \ src/exportdialog.h \ src/imgframe.h \ src/LDAPSession.h \ src/onmainwindow.h \ src/sessionbutton.h \ src/sessionmanagedialog.h \ src/sshmasterconnection.h \ src/sshprocess.h \ src/SVGFrame.h \ src/InteractionDialog.h \ src/userbutton.h \ src/x2goclientconfig.h \ src/x2gologdebug.h \ src/printprocess.h \ src/cupsprint.h \ src/cupsprintwidget.h \ src/cupsprintersettingsdialog.h \ src/printwidget.h \ src/printercmddialog.h \ src/printdialog.h \ src/wapi.h \ src/sessionwidget.h \ src/configwidget.h \ src/connectionwidget.h \ src/settingswidget.h \ src/mediawidget.h \ src/sharewidget.h \ src/clicklineedit.h \ src/httpbrokerclient.h \ src/ongetpass.h \ src/onmainwindow_privat.h \ src/x2gosettings.h \ src/brokerpassdlg.h \ src/contest.h \ src/xsettingswidget.h \ src/appdialog.h \ src/x2goutils.h \ src/helpdialog.h \ src/sessionexplorer.h \ src/folderbutton.h \ src/folderexplorer.h \ src/non_modal_messagebox.h \ src/help.h \ src/unixhelper.h \ src/compat.h \ src/pulsemanager.h SOURCES += src/sharewidget.cpp \ src/settingswidget.cpp \ src/mediawidget.cpp \ src/configwidget.cpp \ src/sessionwidget.cpp \ src/connectionwidget.cpp \ src/configdialog.cpp \ src/editconnectiondialog.cpp \ src/exportdialog.cpp \ src/imgframe.cpp \ src/LDAPSession.cpp \ src/onmainwindow.cpp \ src/sessionbutton.cpp \ src/sessionmanagedialog.cpp \ src/sshmasterconnection.cpp \ src/sshprocess.cpp \ src/SVGFrame.cpp \ src/InteractionDialog.cpp \ src/userbutton.cpp \ src/x2gologdebug.cpp \ src/printprocess.cpp \ src/cupsprint.cpp \ src/cupsprintwidget.cpp \ src/cupsprintersettingsdialog.cpp \ src/printwidget.cpp \ src/printercmddialog.cpp \ src/printdialog.cpp \ src/wapi.cpp \ src/clicklineedit.cpp \ src/httpbrokerclient.cpp \ src/ongetpass.cpp \ src/x2gosettings.cpp \ src/brokerpassdlg.cpp \ src/contest.cpp \ src/xsettingswidget.cpp \ src/appdialog.cpp \ src/x2goutils.cpp \ src/helpdialog.cpp \ src/sessionexplorer.cpp \ src/folderbutton.cpp \ src/folderexplorer.cpp \ src/non_modal_messagebox.cpp \ src/help.cpp \ src/unixhelper.cpp \ src/compat.cpp \ src/pulsemanager.cpp unix { isEmpty(PKG_CONFIG):PKG_CONFIG = pkg-config !x2go_linux_static { PKGCONFIG += libssh # Failure to find libssh_threads is non-fatal, since newer libssh versions # don't ship a separate library any longer. # We can't just check for version 0.8.0, though, since some distros # (looking at you, Ubuntu Bionic/18.04) ship a pre-release version of 0.8.0 # which is actually still based upon 0.7.x and still has libssh_threads... system("$$PKG_CONFIG --exists 'libssh_threads'"):PKGCONFIG += libssh_threads } else { # No pkgconfig stuff, because... for some reason we wanted to call the # library libssh_static. This doesn't sound like a standard name a Linux # distro would ship, but at the same time I doubt anyone is building this # package statically anyway. And even if they do, they shouldn't. # It's also unclear how libssh_threads is called in this scheme. LIBS += -lssh_static } } else:win32 { mxe { QMAKE_CXXFLAGS += -DLIBSSH_STATIC=1 LIBS += -lssh -lgcrypt -lgpg-error } else { # pkgconfig is... tricky on Windows. Additionally, libssh 0.7.x stopped # distributing pkgconfig files on non-UNIX platforms, including Windows. # We'll hardcode stuff here. Make sure that it's consistent with the # libraries we use on Windows. LIBS += -lssh } } else { # For backwards-compatibility. LIBS += -lssh -lssh_threads } win32:!mxe { LIBS += -lAdvAPI32 -lshell32 -lUser32 } RC_FILE = res/x2goclient.rc SOURCES += src/x2goclient.cpp TARGET = x2goclient DEFINES += CFGCLIENT !isEmpty(TRANSLATIONS) { isEmpty(QMAKE_LRELEASE) { # Some Qt versions (looking at you, EPEL 6) are broken # and do not provide the qtPrepareTool test function. # This section is only for working around bugs... !defined(qtPrepareTool) { win32:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]\\lrelease.exe else:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease } else { qtPrepareTool(QMAKE_LRELEASE, lrelease) } } isEmpty(TS_DIR):TS_DIR = . TSQM.name = lrelease ${QMAKE_FILE_IN} TSQM.input = TRANSLATIONS TSQM.output = $$TS_DIR/${QMAKE_FILE_BASE}.qm TSQM.commands = $$QMAKE_LRELEASE ${QMAKE_FILE_IN} TSQM.CONFIG = no_link QMAKE_EXTRA_COMPILERS += TSQM PRE_TARGETDEPS += compiler_TSQM_make_all } else:message("No translation files in project") TEMPLATE = app DEPENDPATH += . INCLUDEPATH += src RESOURCES += res/resources.qrc exists(res/txt/git-info) { message("Configuring with --git-info") RESOURCES += res/git.qrc } exists(res/txt/changelog) { message("Configuring with --changelog") RESOURCES += res/changelog.qrc } linux|linux-* { message("building $$TARGET via $$QMAKESPEC with ldap and cups") LIBS += -lldap -lcups -lX11 -lXpm DEFINES += __linux__ } x2go_linux_static { message("linking all libs statically") DEFINES += __linux__ LIBS += -lssl -lXpm QMAKE_LFLAGS = -Bstatic $$QMAKE_LFLAGS } ICON = $${PWD}/res/img/icons/x2go-mac.icns macx { message("building $$TARGET with ldap and cups") LIBS += -framework LDAP -lcups -lcrypto -lssl -lz !isEmpty(OSX_STDLIB) { QMAKE_CXXFLAGS += -stdlib=$${OSX_STDLIB} QMAKE_LFLAGS += -stdlib=$${OSX_STDLIB} } !isEmpty(MACPORTS_INCLUDE_PATH) { INCLUDEPATH += $${MACPORTS_INCLUDE_PATH} } !isEmpty(MACPORTS_LIBRARY_PATH) { LIBS = -L$${MACPORTS_LIBRARY_PATH} $${LIBS} } !isEmpty(MACPORTS_PREFIX) { DEFINES += MACPORTS_PREFIX=\"\\\"$${MACPORTS_PREFIX}\\\"\" } # Strictly speaking, this is a bug in qmake and we should neither need $${PWD} # nor QMAKE_INFO_PLIST_OUT nor PRE_TARGETDEPS nor QMAKE_POST_LINK. # Not defining the latter two will however lead to it being empty and no # Info.plist file being created in the first place. # The last command takes care of actually putting the icon in place - yet # another bug in qmake. Bummer. # Qt 4.8 is currently missing patches for substituting FULL_VERSION. Work # around by using the postbuild.sh script. QMAKE_INFO_PLIST = $${PWD}/res/osxbundle/Info.plist QMAKE_INFO_PLIST_OUT = $${TARGET}.app/Contents/Info.plist PRE_TARGETDEPS += $${TARGET}.app/Contents/Info.plist QMAKE_POST_LINK += $${PWD}/res/osxbundle/postbuild.sh \"$${TARGET}\" \"$${VERSION}\" \"$${QMAKE_INFO_PLIST_OUT}\" \"$${QMAKE_COPY}\" \"$${ICON}\" \"$${OUT_PWD}/$${TARGET}.app/Contents/Resources/\" } win32|win32-* { message("building $$TARGET for windows without ldap and cups") LIBS += -lwinspool -lws2_32 CONFIG += static release } QT += svg network linux|linux-* { greaterThan(QT_MAJOR_VERSION, 4): QT += x11extras } win32|win32-* { greaterThan(QT_MAJOR_VERSION, 4): QT += winextras } mxe:QMAKE_CXXFLAGS += -std=c++11 -Wno-deprecated-declarations QMAKE_CXXFLAGS_DEBUG -= -g QMAKE_CXXFLAGS_DEBUG += -O2 -g3 -ggdb3 -gdwarf-4 x2goclient-4.1.2.3/x2gohelper/Makefile0000644000000000000000000000020014447111614014335 0ustar all: g++ -mwindows -o ../client_build/release/x2gohelper.exe x2gohelper.cpp clean: del ..\client_build\release\x2gohelper.exe x2goclient-4.1.2.3/x2gohelper/Makefile.mxe0000644000000000000000000000032514447111614015135 0ustar all: "${MXE_BASE}/bin/${MXE_TARGET}-g++" -I "${MXE_BASE}/${MXE_TARGET}/include" -o "../${BUILD_DIR}/${BUILD_CONFIG}/x2gohelper.exe" 'x2gohelper.cpp' clean: rm -f "../${BUILD_DIR}/${BUILD_CONFIG}/x2gohelper.exe" x2goclient-4.1.2.3/x2gohelper/x2gohelper.cpp0000644000000000000000000000561314447111614015475 0ustar /************************************************************************** * Copyright (C) 2005-2023 by Oleksandr Shneyder * * * * * * This program is free software; you can redistribute 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, see . * ***************************************************************************/ #include #include void killProcess(DWORD pid) { HANDLE handle=OpenProcess(PROCESS_TERMINATE,0,pid); if(!handle) { return; } if(!TerminateProcess(handle,0)) { return; } CloseHandle(handle); } void enumerateFromParent(DWORD pid) { HANDLE hndl=CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 ); if(hndl==INVALID_HANDLE_VALUE) { //Failed to get system snapshot return; } PROCESSENTRY32 pentry; pentry.dwSize = sizeof( PROCESSENTRY32 ); if( Process32First(hndl,&pentry)) { while(Process32Next(hndl,&pentry)) { if(pid==pentry.th32ParentProcessID) { if(pentry.th32ProcessID == GetCurrentProcessId()) { //skip own process continue; } enumerateFromParent(pentry.th32ProcessID); killProcess(pentry.th32ProcessID); } } } CloseHandle(hndl); } int main(int argc, char* argv[]) { if(argc!=2) { //wrong number of arguments return -1; } DWORD pid=atoi(argv[1]); if(!pid) { //error converting argument to int; return -1; } HANDLE handle=OpenProcess(SYNCHRONIZE,0,pid); if(!handle) { //error open process return -1; } //Process empty message to stop AppStarting cursor MSG message; PostMessage(NULL, WM_NULL, 0, 0); GetMessage(&message, NULL, 0, 0); //waiting for process to finish if(WaitForSingleObject(handle,INFINITE)!=WAIT_FAILED) { enumerateFromParent(pid); } CloseHandle(handle); return 0; }