diff --git a/tags/fred-0.1.0alpha1/compileinfo.sh b/tags/fred-0.1.0alpha1/compileinfo.sh new file mode 100755 index 0000000..a47e26d --- /dev/null +++ b/tags/fred-0.1.0alpha1/compileinfo.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +echo '// Automatically generated file. See project file and compileinfo.sh for further informations.' +#head -n 1 debian/changelog | awk '{ +# Version = $2 +# gsub ("\\(", "", Version) +# gsub ("\\)", "", Version) +# print "const char *pCompileInfoVersion = \"" Version "\";"}' + +echo '#define APP_NAME "fred"' +echo '#define APP_TITLE "Forensic Registry EDitor (fred)"' +echo '#define APP_COPYRIGHT "Copyright (c) 2011 by Gillen Daniel"' +echo '#define APP_DEVELOPPER_EMAIL "gillen.dan@pinguin.lu"' +echo '#define APP_DESCRIPTION "Forensic Registry EDitor (fred) is a M$ registry hive editor for Linux with special feautures useful during forensic analysis."' +date '+#define APP_COMPILETIME "%Y/%m/%d %H:%M:%S"' + +GOT_VERSION=0 + +if [[ $GOT_VERSION -eq 0 && -f debian/changelog ]]; then + # Get version and release timestamp from debian/changelog file + CUR_LINE=0 + while read LINE; do + CUR_LINE=$(($CUR_LINE+1)) + if [ $CUR_LINE -eq 1 ]; then + # first line contains version + echo "$LINE" | awk '{ Version = $2 + gsub ("\\(", "", Version) + gsub ("\\)", "", Version) + print "#define APP_VERSION \"" Version "\"" }' + break + fi + done Sat, 06 Aug 2011 22:00:00 +0200 diff --git a/tags/fred-0.1.0alpha1/debian/compat b/tags/fred-0.1.0alpha1/debian/compat new file mode 100644 index 0000000..7ed6ff8 --- /dev/null +++ b/tags/fred-0.1.0alpha1/debian/compat @@ -0,0 +1 @@ +5 diff --git a/tags/fred-0.1.0alpha1/debian/control b/tags/fred-0.1.0alpha1/debian/control new file mode 100644 index 0000000..fa46ad5 --- /dev/null +++ b/tags/fred-0.1.0alpha1/debian/control @@ -0,0 +1,16 @@ +Source: fred +Section: x11 +Priority: optional +Maintainer: Gillen Daniel +Uploaders: Gillen Daniel +Build-Depends: debhelper (>= 5), libqt4-dev, libhivex-dev +Standards-Version: 3.8.2 +Homepage: https://www.pinguin.lu + +Package: fred +Architecture: any +Depends: ${shlibs:Depends} +Description: Forensic Registry EDitor + Forensic Registry EDitor (fred) is a M$ registry hive editor + for Linux with special feautures useful during forensic + analysis. diff --git a/tags/fred-0.1.0alpha1/debian/copyright b/tags/fred-0.1.0alpha1/debian/copyright new file mode 100644 index 0000000..d9710fd --- /dev/null +++ b/tags/fred-0.1.0alpha1/debian/copyright @@ -0,0 +1,28 @@ +This package was debianised by Daniel Gillen + +Upstream Author: Daniel Gillen + +Copyright: Copyright (c) 2001 by Daniel Gillen + +License: + + This package is free software; you can redistribute 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 package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this package; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +On Debian systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL-2'. + +The Debian packaging is © 2008 by Guy Voncken +and © 2009 by Michael Prokop +and is licensed under the GPL, see above. diff --git a/tags/fred-0.1.0alpha1/debian/files b/tags/fred-0.1.0alpha1/debian/files new file mode 100644 index 0000000..0c86bd6 --- /dev/null +++ b/tags/fred-0.1.0alpha1/debian/files @@ -0,0 +1 @@ +fred_0.1.0alpha1_amd64.deb x11 optional diff --git a/tags/fred-0.1.0alpha1/debian/fred.debhelper.log b/tags/fred-0.1.0alpha1/debian/fred.debhelper.log new file mode 100644 index 0000000..4c10df8 --- /dev/null +++ b/tags/fred-0.1.0alpha1/debian/fred.debhelper.log @@ -0,0 +1,13 @@ +dh_installdirs +dh_installchangelogs +dh_install +dh_installmenu +dh_link +dh_strip +dh_compress +dh_fixperms +dh_installdeb +dh_shlibdeps +dh_gencontrol +dh_md5sums +dh_builddeb diff --git a/tags/fred-0.1.0alpha1/debian/fred.dirs b/tags/fred-0.1.0alpha1/debian/fred.dirs new file mode 100644 index 0000000..a59ccc8 --- /dev/null +++ b/tags/fred-0.1.0alpha1/debian/fred.dirs @@ -0,0 +1,3 @@ +usr/bin +usr/share/applications +usr/share/pixmaps diff --git a/tags/fred-0.1.0alpha1/debian/fred.install b/tags/fred-0.1.0alpha1/debian/fred.install new file mode 100644 index 0000000..7b9c38e --- /dev/null +++ b/tags/fred-0.1.0alpha1/debian/fred.install @@ -0,0 +1,2 @@ +resources/fred.desktop usr/share/applications/ +resources/fred.png usr/share/pixmaps/ diff --git a/tags/fred-0.1.0alpha1/debian/fred.menu b/tags/fred-0.1.0alpha1/debian/fred.menu new file mode 100644 index 0000000..0e5adb1 --- /dev/null +++ b/tags/fred-0.1.0alpha1/debian/fred.menu @@ -0,0 +1,3 @@ +?package(fred):needs="X11" section="Applications/System/Security"\ + title="fred" command="/usr/bin/fred"\ + hints="System" diff --git a/tags/fred-0.1.0alpha1/debian/fred.postinst.debhelper b/tags/fred-0.1.0alpha1/debian/fred.postinst.debhelper new file mode 100644 index 0000000..8637a4e --- /dev/null +++ b/tags/fred-0.1.0alpha1/debian/fred.postinst.debhelper @@ -0,0 +1,5 @@ +# Automatically added by dh_installmenu +if [ "$1" = "configure" ] && [ -x "`which update-menus 2>/dev/null`" ]; then + update-menus +fi +# End automatically added section diff --git a/tags/fred-0.1.0alpha1/debian/fred.postrm.debhelper b/tags/fred-0.1.0alpha1/debian/fred.postrm.debhelper new file mode 100644 index 0000000..2b4be4f --- /dev/null +++ b/tags/fred-0.1.0alpha1/debian/fred.postrm.debhelper @@ -0,0 +1,3 @@ +# Automatically added by dh_installmenu +if [ -x "`which update-menus 2>/dev/null`" ]; then update-menus ; fi +# End automatically added section diff --git a/tags/fred-0.1.0alpha1/debian/fred.substvars b/tags/fred-0.1.0alpha1/debian/fred.substvars new file mode 100644 index 0000000..37fa2db --- /dev/null +++ b/tags/fred-0.1.0alpha1/debian/fred.substvars @@ -0,0 +1,2 @@ +shlibs:Depends=libc6 (>= 2.2.5), libgcc1 (>= 1:4.1.1), libhivex0, libqtcore4 (>= 4:4.7.0~beta1), libqtgui4 (>= 4:4.5.3), libstdc++6 (>= 4.1.1) +misc:Depends= diff --git a/tags/fred-0.1.0alpha1/debian/fred/DEBIAN/control b/tags/fred-0.1.0alpha1/debian/fred/DEBIAN/control new file mode 100644 index 0000000..10f6b3d --- /dev/null +++ b/tags/fred-0.1.0alpha1/debian/fred/DEBIAN/control @@ -0,0 +1,13 @@ +Package: fred +Version: 0.1.0alpha1 +Architecture: amd64 +Maintainer: Gillen Daniel +Installed-Size: 428 +Depends: libc6 (>= 2.2.5), libgcc1 (>= 1:4.1.1), libhivex0, libqtcore4 (>= 4:4.7.0~beta1), libqtgui4 (>= 4:4.5.3), libstdc++6 (>= 4.1.1) +Section: x11 +Priority: optional +Homepage: https://www.pinguin.lu +Description: Forensic Registry EDitor + Forensic Registry EDitor (fred) is a M$ registry hive editor + for Linux with special feautures useful during forensic + analysis. diff --git a/tags/fred-0.1.0alpha1/debian/fred/DEBIAN/md5sums b/tags/fred-0.1.0alpha1/debian/fred/DEBIAN/md5sums new file mode 100644 index 0000000..a4acf93 --- /dev/null +++ b/tags/fred-0.1.0alpha1/debian/fred/DEBIAN/md5sums @@ -0,0 +1,5 @@ +9a715e575262458d466bf68bac351f6e usr/bin/fred +e4e03897a140d64829dee9b581c298b4 usr/share/applications/fred.desktop +43343292a7956e02519a44afe847855c usr/share/doc/fred/changelog.gz +3902800ff5779b946717ccec4982d4a1 usr/share/menu/fred +9b788a3a6b3094b34775674a546644f3 usr/share/pixmaps/fred.png diff --git a/tags/fred-0.1.0alpha1/debian/fred/DEBIAN/postinst b/tags/fred-0.1.0alpha1/debian/fred/DEBIAN/postinst new file mode 100755 index 0000000..d0d5f4d --- /dev/null +++ b/tags/fred-0.1.0alpha1/debian/fred/DEBIAN/postinst @@ -0,0 +1,7 @@ +#!/bin/sh +set -e +# Automatically added by dh_installmenu +if [ "$1" = "configure" ] && [ -x "`which update-menus 2>/dev/null`" ]; then + update-menus +fi +# End automatically added section diff --git a/tags/fred-0.1.0alpha1/debian/fred/DEBIAN/postrm b/tags/fred-0.1.0alpha1/debian/fred/DEBIAN/postrm new file mode 100755 index 0000000..a30dbac --- /dev/null +++ b/tags/fred-0.1.0alpha1/debian/fred/DEBIAN/postrm @@ -0,0 +1,5 @@ +#!/bin/sh +set -e +# Automatically added by dh_installmenu +if [ -x "`which update-menus 2>/dev/null`" ]; then update-menus ; fi +# End automatically added section diff --git a/tags/fred-0.1.0alpha1/debian/fred/usr/bin/fred b/tags/fred-0.1.0alpha1/debian/fred/usr/bin/fred new file mode 100755 index 0000000..4e55d39 Binary files /dev/null and b/tags/fred-0.1.0alpha1/debian/fred/usr/bin/fred differ diff --git a/tags/fred-0.1.0alpha1/debian/fred/usr/share/applications/fred.desktop b/tags/fred-0.1.0alpha1/debian/fred/usr/share/applications/fred.desktop new file mode 100644 index 0000000..8e16128 --- /dev/null +++ b/tags/fred-0.1.0alpha1/debian/fred/usr/share/applications/fred.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Version=1.0 +Encoding=UTF-8 +Name=Fred +Type=Application +Comment=M$ registry hive editor +Terminal=false +Exec=fred +Icon=fred +Categories=System; +StartupNotify=true diff --git a/tags/fred-0.1.0alpha1/debian/fred/usr/share/doc/fred/changelog.gz b/tags/fred-0.1.0alpha1/debian/fred/usr/share/doc/fred/changelog.gz new file mode 100644 index 0000000..2a5bb80 Binary files /dev/null and b/tags/fred-0.1.0alpha1/debian/fred/usr/share/doc/fred/changelog.gz differ diff --git a/tags/fred-0.1.0alpha1/debian/fred/usr/share/menu/fred b/tags/fred-0.1.0alpha1/debian/fred/usr/share/menu/fred new file mode 100644 index 0000000..0e5adb1 --- /dev/null +++ b/tags/fred-0.1.0alpha1/debian/fred/usr/share/menu/fred @@ -0,0 +1,3 @@ +?package(fred):needs="X11" section="Applications/System/Security"\ + title="fred" command="/usr/bin/fred"\ + hints="System" diff --git a/tags/fred-0.1.0alpha1/debian/fred/usr/share/pixmaps/fred.png b/tags/fred-0.1.0alpha1/debian/fred/usr/share/pixmaps/fred.png new file mode 100644 index 0000000..6e1124c Binary files /dev/null and b/tags/fred-0.1.0alpha1/debian/fred/usr/share/pixmaps/fred.png differ diff --git a/tags/fred-0.1.0alpha1/debian/rules b/tags/fred-0.1.0alpha1/debian/rules new file mode 100755 index 0000000..ef35770 --- /dev/null +++ b/tags/fred-0.1.0alpha1/debian/rules @@ -0,0 +1,98 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Sample debian/rules that uses debhelper. +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +configure: configure-stamp +configure-stamp: + dh_testdir + # Add here commands to configure the package. + qmake-qt4 + + touch configure-stamp + + +build: build-stamp + +build-stamp: configure-stamp + dh_testdir + + # Add here commands to compile the package. + # Optimised make for fast compilation on multi-core machines + $(MAKE) -j$(shell cat /proc/cpuinfo | grep ^processor | wc -l) + lrelease fred.pro + + touch $@ + +clean: + dh_testdir + dh_testroot + rm -f build-stamp configure-stamp + # dpkg-buildpackage starts with cleaning, so we have to be sure that there's a Makefile (and thus call qmake-qt4) + qmake-qt4 + + # Add here commands to clean up after the build process. + $(MAKE) clean + # remove leftover files: + rm -f fred + rm -f compileinfo.cpp + #rm -f fred_*.qm + dh_clean + +install: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + + # Add here commands to install the package into debian/fred. + # $(MAKE) DESTDIR=$(CURDIR)/debian/fred install + + cp fred debian/fred/usr/bin + #cp fred_*.qm debian/fred/usr/share/fred + + +# Build architecture-independent files here. +binary-indep: build install +# We have nothing to do by default. + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot + dh_installchangelogs +# dh_installdocs +# dh_installexamples + dh_install + dh_installmenu +# dh_installdebconf +# dh_installlogrotate +# dh_installemacsen +# dh_installpam +# dh_installmime +# dh_python +# dh_installinit +# dh_installcron +# dh_installinfo +# dh_installman + dh_link + dh_strip + dh_compress + dh_fixperms +# dh_perl +# dh_makeshlibs + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install configure + diff --git a/tags/fred-0.1.0alpha1/dlgabout.cpp b/tags/fred-0.1.0alpha1/dlgabout.cpp new file mode 100644 index 0000000..d1bd47f --- /dev/null +++ b/tags/fred-0.1.0alpha1/dlgabout.cpp @@ -0,0 +1,72 @@ +/******************************************************************************* +* fred Copyright (c) 2011 by Gillen Daniel * +* * +* Forensic Registry EDitor (fred) is a M$ registry hive editor for Linux with * +* special feautures useful during forensic analysis. * +* * +* This program is free software: you can redistribute it and/or modify it * +* under the terms of the GNU General Public License as published by the Free * +* Software Foundation, either version 3 of the License, or (at your option) * +* any later version. * +* * +* This program is distributed in the hope that it will be useful, but WITHOUT * +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * +* more details. * +* * +* You should have received a copy of the GNU General Public License along with * +* this program. If not, see . * +*******************************************************************************/ + +#include "dlgabout.h" +#include "ui_dlgabout.h" + +#include "compileinfo.h" + +DlgAbout::DlgAbout(QWidget *parent) : + QDialog(parent), + m_ui(new Ui::DlgAbout) +{ + m_ui->setupUi(this); + this->setWindowTitle(tr("About %1").arg(APP_NAME)); + + // Update dialog with current infos + this->m_ui->LblAbout->setText( + this->m_ui->LblAbout->text().replace("%APP_NAME%",APP_NAME)); + this->m_ui->LblAbout->setText( + this->m_ui->LblAbout->text().replace("%APP_COPYRIGHT%",APP_COPYRIGHT)); + this->m_ui->TextEditInfo->setPlainText( + this->m_ui->TextEditInfo->toPlainText().replace("%APP_NAME%",APP_NAME)); + this->m_ui->TextEditInfo->setPlainText( + this->m_ui->TextEditInfo->toPlainText().replace("%APP_VERSION%", + APP_VERSION)); + this->m_ui->TextEditInfo->setPlainText( + this->m_ui->TextEditInfo->toPlainText().replace("%APP_DESCRIPTION%", + APP_DESCRIPTION)); + this->m_ui->TextEditCopyright->setPlainText( + this->m_ui->TextEditCopyright->toPlainText().replace("%APP_COPYRIGHT%", + APP_COPYRIGHT)); + this->m_ui->TextEditCopyright->setPlainText( + this->m_ui->TextEditCopyright->toPlainText() + .replace("%APP_DEVELOPPER_EMAIL%", + APP_DEVELOPPER_EMAIL)); +} + +DlgAbout::~DlgAbout() { + delete m_ui; +} + +void DlgAbout::changeEvent(QEvent *e) { + QDialog::changeEvent(e); + switch (e->type()) { + case QEvent::LanguageChange: + m_ui->retranslateUi(this); + break; + default: + break; + } +} + +void DlgAbout::on_btnClose_clicked() { + this->accept(); +} diff --git a/tags/fred-0.1.0alpha1/dlgabout.h b/tags/fred-0.1.0alpha1/dlgabout.h new file mode 100644 index 0000000..5e0f317 --- /dev/null +++ b/tags/fred-0.1.0alpha1/dlgabout.h @@ -0,0 +1,47 @@ +/******************************************************************************* +* fred Copyright (c) 2011 by Gillen Daniel * +* * +* Forensic Registry EDitor (fred) is a M$ registry hive editor for Linux with * +* special feautures useful during forensic analysis. * +* * +* This program is free software: you can redistribute it and/or modify it * +* under the terms of the GNU General Public License as published by the Free * +* Software Foundation, either version 3 of the License, or (at your option) * +* any later version. * +* * +* This program is distributed in the hope that it will be useful, but WITHOUT * +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * +* more details. * +* * +* You should have received a copy of the GNU General Public License along with * +* this program. If not, see . * +*******************************************************************************/ + +#ifndef DLGABOUT_H +#define DLGABOUT_H + +#include + +namespace Ui { + class DlgAbout; +} + +class DlgAbout : public QDialog { + Q_OBJECT + + public: + DlgAbout(QWidget *parent = 0); + ~DlgAbout(); + + protected: + void changeEvent(QEvent *e); + + private: + Ui::DlgAbout *m_ui; + + private slots: + void on_btnClose_clicked(); +}; + +#endif // DLGABOUT_H diff --git a/tags/fred-0.1.0alpha1/dlgabout.ui b/tags/fred-0.1.0alpha1/dlgabout.ui new file mode 100644 index 0000000..378d7b9 --- /dev/null +++ b/tags/fred-0.1.0alpha1/dlgabout.ui @@ -0,0 +1,803 @@ + + + DlgAbout + + + + 0 + 0 + 540 + 363 + + + + Dialog + + + + + + QFrame::NoFrame + + + QFrame::Raised + + + + 0 + + + + + + 80 + 80 + + + + + + + :/icons/resources/fred.png + + + true + + + + + + + QFrame::NoFrame + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Droid Sans'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:12pt; font-weight:600;">About %APP_NAME%</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">%APP_COPYRIGHT%</span></p></body></html> + + + 0 + + + 10 + + + + + + + + + + 0 + + + + Info + + + + + + + 500 + 0 + + + + true + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Droid Sans'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">%APP_NAME% version %APP_VERSION%</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">%APP_DESCRIPTION%</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">%APP_NAME% is licensed under GPLv3.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">Look at the documentation, the source code or the %APP_NAME% website (https://www.pinguin.lu) for more information.</span></p></body></html> + + + + + + + + Copyright + + + + + + + 500 + 0 + + + + true + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Droid Sans'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">%APP_COPYRIGHT% &lt;%APP_DEVELOPPER_EMAIL%&gt;</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">This program uses </span>Richard W.M. Jones's<span style=" font-family:'Sans Serif'; font-size:9pt;"> hivex library</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Copyright (C) 2009-2010 Red Hat Inc.</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Derived from code by Petter Nordahl-Hagen under a compatible license:</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Copyright (C) 1997-2007 Petter Nordahl-Hagen.</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Derived from code by Markus Stephany under a compatible license:</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Copyright (C) 2000-2004 Markus Stephany.</p></body></html> + + + + + + + + GPL + + + + + + true + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Droid Sans'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> GNU GENERAL PUBLIC LICENSE</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> Version 3, 29 June 2007</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> Copyright (C) 2007 Free Software Foundation, Inc. &lt;http://fsf.org/&gt;</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> Everyone is permitted to copy and distribute verbatim copies</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> of this license document, but changing it is not allowed.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> Preamble</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> The GNU General Public License is a free, copyleft license for</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">software and other kinds of works.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> The licenses for most software and other practical works are designed</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">to take away your freedom to share and change the works. By contrast,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">the GNU General Public License is intended to guarantee your freedom to</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">share and change all versions of a program--to make sure it remains free</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">software for all its users. We, the Free Software Foundation, use the</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">GNU General Public License for most of our software; it applies also to</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">any other work released this way by its authors. You can apply it to</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">your programs, too.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> When we speak of free software, we are referring to freedom, not</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">price. Our General Public Licenses are designed to make sure that you</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">have the freedom to distribute copies of free software (and charge for</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">them if you wish), that you receive source code or can get it if you</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">want it, that you can change the software or use pieces of it in new</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">free programs, and that you know you can do these things.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> To protect your rights, we need to prevent others from denying you</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">these rights or asking you to surrender the rights. Therefore, you have</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">certain responsibilities if you distribute copies of the software, or if</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">you modify it: responsibilities to respect the freedom of others.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> For example, if you distribute copies of such a program, whether</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">gratis or for a fee, you must pass on to the recipients the same</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">freedoms that you received. You must make sure that they, too, receive</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">or can get the source code. And you must show them these terms so they</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">know their rights.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> Developers that use the GNU GPL protect your rights with two steps:</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">(1) assert copyright on the software, and (2) offer you this License</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">giving you legal permission to copy, distribute and/or modify it.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> For the developers' and authors' protection, the GPL clearly explains</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">that there is no warranty for this free software. For both users' and</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">authors' sake, the GPL requires that modified versions be marked as</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">changed, so that their problems will not be attributed erroneously to</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">authors of previous versions.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> Some devices are designed to deny users access to install or run</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">modified versions of the software inside them, although the manufacturer</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">can do so. This is fundamentally incompatible with the aim of</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">protecting users' freedom to change the software. The systematic</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">pattern of such abuse occurs in the area of products for individuals to</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">use, which is precisely where it is most unacceptable. Therefore, we</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">have designed this version of the GPL to prohibit the practice for those</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">products. If such problems arise substantially in other domains, we</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">stand ready to extend this provision to those domains in future versions</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">of the GPL, as needed to protect the freedom of users.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> Finally, every program is threatened constantly by software patents.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">States should not allow patents to restrict development and use of</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">software on general-purpose computers, but in those that do, we wish to</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">avoid the special danger that patents applied to a free program could</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">make it effectively proprietary. To prevent this, the GPL assures that</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">patents cannot be used to render the program non-free.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> The precise terms and conditions for copying, distribution and</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">modification follow.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> TERMS AND CONDITIONS</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> 0. Definitions.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> &quot;This License&quot; refers to version 3 of the GNU General Public License.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> &quot;Copyright&quot; also means copyright-like laws that apply to other kinds of</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">works, such as semiconductor masks.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> &quot;The Program&quot; refers to any copyrightable work licensed under this</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">License. Each licensee is addressed as &quot;you&quot;. &quot;Licensees&quot; and</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">&quot;recipients&quot; may be individuals or organizations.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> To &quot;modify&quot; a work means to copy from or adapt all or part of the work</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">in a fashion requiring copyright permission, other than the making of an</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">exact copy. The resulting work is called a &quot;modified version&quot; of the</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">earlier work or a work &quot;based on&quot; the earlier work.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> A &quot;covered work&quot; means either the unmodified Program or a work based</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">on the Program.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> To &quot;propagate&quot; a work means to do anything with it that, without</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">permission, would make you directly or secondarily liable for</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">infringement under applicable copyright law, except executing it on a</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">computer or modifying a private copy. Propagation includes copying,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">distribution (with or without modification), making available to the</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">public, and in some countries other activities as well.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> To &quot;convey&quot; a work means any kind of propagation that enables other</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">parties to make or receive copies. Mere interaction with a user through</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">a computer network, with no transfer of a copy, is not conveying.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> An interactive user interface displays &quot;Appropriate Legal Notices&quot;</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">to the extent that it includes a convenient and prominently visible</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">feature that (1) displays an appropriate copyright notice, and (2)</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">tells the user that there is no warranty for the work (except to the</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">extent that warranties are provided), that licensees may convey the</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">work under this License, and how to view a copy of this License. If</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">the interface presents a list of user commands or options, such as a</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">menu, a prominent item in the list meets this criterion.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> 1. Source Code.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> The &quot;source code&quot; for a work means the preferred form of the work</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">for making modifications to it. &quot;Object code&quot; means any non-source</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">form of a work.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> A &quot;Standard Interface&quot; means an interface that either is an official</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">standard defined by a recognized standards body, or, in the case of</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">interfaces specified for a particular programming language, one that</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">is widely used among developers working in that language.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> The &quot;System Libraries&quot; of an executable work include anything, other</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">than the work as a whole, that (a) is included in the normal form of</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">packaging a Major Component, but which is not part of that Major</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">Component, and (b) serves only to enable use of the work with that</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">Major Component, or to implement a Standard Interface for which an</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">implementation is available to the public in source code form. A</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">&quot;Major Component&quot;, in this context, means a major essential component</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">(kernel, window system, and so on) of the specific operating system</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">(if any) on which the executable work runs, or a compiler used to</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">produce the work, or an object code interpreter used to run it.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> The &quot;Corresponding Source&quot; for a work in object code form means all</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">the source code needed to generate, install, and (for an executable</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">work) run the object code and to modify the work, including scripts to</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">control those activities. However, it does not include the work's</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">System Libraries, or general-purpose tools or generally available free</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">programs which are used unmodified in performing those activities but</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">which are not part of the work. For example, Corresponding Source</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">includes interface definition files associated with source files for</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">the work, and the source code for shared libraries and dynamically</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">linked subprograms that the work is specifically designed to require,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">such as by intimate data communication or control flow between those</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">subprograms and other parts of the work.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> The Corresponding Source need not include anything that users</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">can regenerate automatically from other parts of the Corresponding</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">Source.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> The Corresponding Source for a work in source code form is that</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">same work.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> 2. Basic Permissions.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> All rights granted under this License are granted for the term of</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">copyright on the Program, and are irrevocable provided the stated</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">conditions are met. This License explicitly affirms your unlimited</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">permission to run the unmodified Program. The output from running a</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">covered work is covered by this License only if the output, given its</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">content, constitutes a covered work. This License acknowledges your</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">rights of fair use or other equivalent, as provided by copyright law.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> You may make, run and propagate covered works that you do not</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">convey, without conditions so long as your license otherwise remains</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">in force. You may convey covered works to others for the sole purpose</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">of having them make modifications exclusively for you, or provide you</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">with facilities for running those works, provided that you comply with</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">the terms of this License in conveying all material for which you do</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">not control copyright. Those thus making or running the covered works</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">for you must do so exclusively on your behalf, under your direction</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">and control, on terms that prohibit them from making any copies of</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">your copyrighted material outside their relationship with you.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> Conveying under any other circumstances is permitted solely under</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">the conditions stated below. Sublicensing is not allowed; section 10</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">makes it unnecessary.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> 3. Protecting Users' Legal Rights From Anti-Circumvention Law.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> No covered work shall be deemed part of an effective technological</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">measure under any applicable law fulfilling obligations under article</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">11 of the WIPO copyright treaty adopted on 20 December 1996, or</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">similar laws prohibiting or restricting circumvention of such</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">measures.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> When you convey a covered work, you waive any legal power to forbid</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">circumvention of technological measures to the extent such circumvention</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">is effected by exercising rights under this License with respect to</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">the covered work, and you disclaim any intention to limit operation or</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">modification of the work as a means of enforcing, against the work's</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">users, your or third parties' legal rights to forbid circumvention of</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">technological measures.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> 4. Conveying Verbatim Copies.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> You may convey verbatim copies of the Program's source code as you</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">receive it, in any medium, provided that you conspicuously and</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">appropriately publish on each copy an appropriate copyright notice;</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">keep intact all notices stating that this License and any</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">non-permissive terms added in accord with section 7 apply to the code;</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">keep intact all notices of the absence of any warranty; and give all</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">recipients a copy of this License along with the Program.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> You may charge any price or no price for each copy that you convey,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">and you may offer support or warranty protection for a fee.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> 5. Conveying Modified Source Versions.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> You may convey a work based on the Program, or the modifications to</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">produce it from the Program, in the form of source code under the</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">terms of section 4, provided that you also meet all of these conditions:</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> a) The work must carry prominent notices stating that you modified</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> it, and giving a relevant date.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> b) The work must carry prominent notices stating that it is</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> released under this License and any conditions added under section</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> 7. This requirement modifies the requirement in section 4 to</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> &quot;keep intact all notices&quot;.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> c) You must license the entire work, as a whole, under this</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> License to anyone who comes into possession of a copy. This</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> License will therefore apply, along with any applicable section 7</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> additional terms, to the whole of the work, and all its parts,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> regardless of how they are packaged. This License gives no</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> permission to license the work in any other way, but it does not</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> invalidate such permission if you have separately received it.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> d) If the work has interactive user interfaces, each must display</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> Appropriate Legal Notices; however, if the Program has interactive</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> interfaces that do not display Appropriate Legal Notices, your</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> work need not make them do so.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> A compilation of a covered work with other separate and independent</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">works, which are not by their nature extensions of the covered work,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">and which are not combined with it such as to form a larger program,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">in or on a volume of a storage or distribution medium, is called an</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">&quot;aggregate&quot; if the compilation and its resulting copyright are not</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">used to limit the access or legal rights of the compilation's users</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">beyond what the individual works permit. Inclusion of a covered work</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">in an aggregate does not cause this License to apply to the other</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">parts of the aggregate.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> 6. Conveying Non-Source Forms.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> You may convey a covered work in object code form under the terms</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">of sections 4 and 5, provided that you also convey the</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">machine-readable Corresponding Source under the terms of this License,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">in one of these ways:</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> a) Convey the object code in, or embodied in, a physical product</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> (including a physical distribution medium), accompanied by the</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> Corresponding Source fixed on a durable physical medium</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> customarily used for software interchange.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> b) Convey the object code in, or embodied in, a physical product</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> (including a physical distribution medium), accompanied by a</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> written offer, valid for at least three years and valid for as</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> long as you offer spare parts or customer support for that product</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> model, to give anyone who possesses the object code either (1) a</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> copy of the Corresponding Source for all the software in the</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> product that is covered by this License, on a durable physical</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> medium customarily used for software interchange, for a price no</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> more than your reasonable cost of physically performing this</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> conveying of source, or (2) access to copy the</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> Corresponding Source from a network server at no charge.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> c) Convey individual copies of the object code with a copy of the</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> written offer to provide the Corresponding Source. This</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> alternative is allowed only occasionally and noncommercially, and</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> only if you received the object code with such an offer, in accord</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> with subsection 6b.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> d) Convey the object code by offering access from a designated</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> place (gratis or for a charge), and offer equivalent access to the</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> Corresponding Source in the same way through the same place at no</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> further charge. You need not require recipients to copy the</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> Corresponding Source along with the object code. If the place to</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> copy the object code is a network server, the Corresponding Source</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> may be on a different server (operated by you or a third party)</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> that supports equivalent copying facilities, provided you maintain</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> clear directions next to the object code saying where to find the</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> Corresponding Source. Regardless of what server hosts the</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> Corresponding Source, you remain obligated to ensure that it is</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> available for as long as needed to satisfy these requirements.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> e) Convey the object code using peer-to-peer transmission, provided</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> you inform other peers where the object code and Corresponding</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> Source of the work are being offered to the general public at no</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> charge under subsection 6d.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> A separable portion of the object code, whose source code is excluded</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">from the Corresponding Source as a System Library, need not be</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">included in conveying the object code work.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> A &quot;User Product&quot; is either (1) a &quot;consumer product&quot;, which means any</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">tangible personal property which is normally used for personal, family,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">or household purposes, or (2) anything designed or sold for incorporation</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">into a dwelling. In determining whether a product is a consumer product,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">doubtful cases shall be resolved in favor of coverage. For a particular</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">product received by a particular user, &quot;normally used&quot; refers to a</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">typical or common use of that class of product, regardless of the status</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">of the particular user or of the way in which the particular user</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">actually uses, or expects or is expected to use, the product. A product</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">is a consumer product regardless of whether the product has substantial</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">commercial, industrial or non-consumer uses, unless such uses represent</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">the only significant mode of use of the product.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> &quot;Installation Information&quot; for a User Product means any methods,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">procedures, authorization keys, or other information required to install</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">and execute modified versions of a covered work in that User Product from</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">a modified version of its Corresponding Source. The information must</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">suffice to ensure that the continued functioning of the modified object</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">code is in no case prevented or interfered with solely because</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">modification has been made.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> If you convey an object code work under this section in, or with, or</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">specifically for use in, a User Product, and the conveying occurs as</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">part of a transaction in which the right of possession and use of the</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">User Product is transferred to the recipient in perpetuity or for a</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">fixed term (regardless of how the transaction is characterized), the</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">Corresponding Source conveyed under this section must be accompanied</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">by the Installation Information. But this requirement does not apply</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">if neither you nor any third party retains the ability to install</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">modified object code on the User Product (for example, the work has</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">been installed in ROM).</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> The requirement to provide Installation Information does not include a</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">requirement to continue to provide support service, warranty, or updates</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">for a work that has been modified or installed by the recipient, or for</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">the User Product in which it has been modified or installed. Access to a</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">network may be denied when the modification itself materially and</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">adversely affects the operation of the network or violates the rules and</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">protocols for communication across the network.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> Corresponding Source conveyed, and Installation Information provided,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">in accord with this section must be in a format that is publicly</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">documented (and with an implementation available to the public in</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">source code form), and must require no special password or key for</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">unpacking, reading or copying.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> 7. Additional Terms.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> &quot;Additional permissions&quot; are terms that supplement the terms of this</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">License by making exceptions from one or more of its conditions.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">Additional permissions that are applicable to the entire Program shall</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">be treated as though they were included in this License, to the extent</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">that they are valid under applicable law. If additional permissions</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">apply only to part of the Program, that part may be used separately</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">under those permissions, but the entire Program remains governed by</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">this License without regard to the additional permissions.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> When you convey a copy of a covered work, you may at your option</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">remove any additional permissions from that copy, or from any part of</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">it. (Additional permissions may be written to require their own</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">removal in certain cases when you modify the work.) You may place</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">additional permissions on material, added by you to a covered work,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">for which you have or can give appropriate copyright permission.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> Notwithstanding any other provision of this License, for material you</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">add to a covered work, you may (if authorized by the copyright holders of</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">that material) supplement the terms of this License with terms:</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> a) Disclaiming warranty or limiting liability differently from the</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> terms of sections 15 and 16 of this License; or</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> b) Requiring preservation of specified reasonable legal notices or</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> author attributions in that material or in the Appropriate Legal</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> Notices displayed by works containing it; or</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> c) Prohibiting misrepresentation of the origin of that material, or</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> requiring that modified versions of such material be marked in</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> reasonable ways as different from the original version; or</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> d) Limiting the use for publicity purposes of names of licensors or</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> authors of the material; or</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> e) Declining to grant rights under trademark law for use of some</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> trade names, trademarks, or service marks; or</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> f) Requiring indemnification of licensors and authors of that</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> material by anyone who conveys the material (or modified versions of</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> it) with contractual assumptions of liability to the recipient, for</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> any liability that these contractual assumptions directly impose on</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> those licensors and authors.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> All other non-permissive additional terms are considered &quot;further</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">restrictions&quot; within the meaning of section 10. If the Program as you</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">received it, or any part of it, contains a notice stating that it is</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">governed by this License along with a term that is a further</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">restriction, you may remove that term. If a license document contains</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">a further restriction but permits relicensing or conveying under this</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">License, you may add to a covered work material governed by the terms</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">of that license document, provided that the further restriction does</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">not survive such relicensing or conveying.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> If you add terms to a covered work in accord with this section, you</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">must place, in the relevant source files, a statement of the</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">additional terms that apply to those files, or a notice indicating</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">where to find the applicable terms.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> Additional terms, permissive or non-permissive, may be stated in the</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">form of a separately written license, or stated as exceptions;</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">the above requirements apply either way.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> 8. Termination.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> You may not propagate or modify a covered work except as expressly</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">provided under this License. Any attempt otherwise to propagate or</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">modify it is void, and will automatically terminate your rights under</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">this License (including any patent licenses granted under the third</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">paragraph of section 11).</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> However, if you cease all violation of this License, then your</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">license from a particular copyright holder is reinstated (a)</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">provisionally, unless and until the copyright holder explicitly and</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">finally terminates your license, and (b) permanently, if the copyright</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">holder fails to notify you of the violation by some reasonable means</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">prior to 60 days after the cessation.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> Moreover, your license from a particular copyright holder is</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">reinstated permanently if the copyright holder notifies you of the</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">violation by some reasonable means, this is the first time you have</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">received notice of violation of this License (for any work) from that</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">copyright holder, and you cure the violation prior to 30 days after</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">your receipt of the notice.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> Termination of your rights under this section does not terminate the</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">licenses of parties who have received copies or rights from you under</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">this License. If your rights have been terminated and not permanently</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">reinstated, you do not qualify to receive new licenses for the same</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">material under section 10.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> 9. Acceptance Not Required for Having Copies.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> You are not required to accept this License in order to receive or</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">run a copy of the Program. Ancillary propagation of a covered work</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">occurring solely as a consequence of using peer-to-peer transmission</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">to receive a copy likewise does not require acceptance. However,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">nothing other than this License grants you permission to propagate or</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">modify any covered work. These actions infringe copyright if you do</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">not accept this License. Therefore, by modifying or propagating a</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">covered work, you indicate your acceptance of this License to do so.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> 10. Automatic Licensing of Downstream Recipients.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> Each time you convey a covered work, the recipient automatically</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">receives a license from the original licensors, to run, modify and</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">propagate that work, subject to this License. You are not responsible</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">for enforcing compliance by third parties with this License.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> An &quot;entity transaction&quot; is a transaction transferring control of an</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">organization, or substantially all assets of one, or subdividing an</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">organization, or merging organizations. If propagation of a covered</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">work results from an entity transaction, each party to that</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">transaction who receives a copy of the work also receives whatever</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">licenses to the work the party's predecessor in interest had or could</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">give under the previous paragraph, plus a right to possession of the</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">Corresponding Source of the work from the predecessor in interest, if</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">the predecessor has it or can get it with reasonable efforts.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> You may not impose any further restrictions on the exercise of the</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">rights granted or affirmed under this License. For example, you may</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">not impose a license fee, royalty, or other charge for exercise of</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">rights granted under this License, and you may not initiate litigation</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">(including a cross-claim or counterclaim in a lawsuit) alleging that</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">any patent claim is infringed by making, using, selling, offering for</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">sale, or importing the Program or any portion of it.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> 11. Patents.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> A &quot;contributor&quot; is a copyright holder who authorizes use under this</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">License of the Program or a work on which the Program is based. The</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">work thus licensed is called the contributor's &quot;contributor version&quot;.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> A contributor's &quot;essential patent claims&quot; are all patent claims</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">owned or controlled by the contributor, whether already acquired or</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">hereafter acquired, that would be infringed by some manner, permitted</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">by this License, of making, using, or selling its contributor version,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">but do not include claims that would be infringed only as a</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">consequence of further modification of the contributor version. For</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">purposes of this definition, &quot;control&quot; includes the right to grant</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">patent sublicenses in a manner consistent with the requirements of</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">this License.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> Each contributor grants you a non-exclusive, worldwide, royalty-free</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">patent license under the contributor's essential patent claims, to</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">make, use, sell, offer for sale, import and otherwise run, modify and</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">propagate the contents of its contributor version.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> In the following three paragraphs, a &quot;patent license&quot; is any express</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">agreement or commitment, however denominated, not to enforce a patent</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">(such as an express permission to practice a patent or covenant not to</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">sue for patent infringement). To &quot;grant&quot; such a patent license to a</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">party means to make such an agreement or commitment not to enforce a</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">patent against the party.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> If you convey a covered work, knowingly relying on a patent license,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">and the Corresponding Source of the work is not available for anyone</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">to copy, free of charge and under the terms of this License, through a</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">publicly available network server or other readily accessible means,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">then you must either (1) cause the Corresponding Source to be so</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">available, or (2) arrange to deprive yourself of the benefit of the</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">patent license for this particular work, or (3) arrange, in a manner</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">consistent with the requirements of this License, to extend the patent</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">license to downstream recipients. &quot;Knowingly relying&quot; means you have</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">actual knowledge that, but for the patent license, your conveying the</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">covered work in a country, or your recipient's use of the covered work</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">in a country, would infringe one or more identifiable patents in that</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">country that you have reason to believe are valid.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> If, pursuant to or in connection with a single transaction or</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">arrangement, you convey, or propagate by procuring conveyance of, a</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">covered work, and grant a patent license to some of the parties</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">receiving the covered work authorizing them to use, propagate, modify</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">or convey a specific copy of the covered work, then the patent license</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">you grant is automatically extended to all recipients of the covered</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">work and works based on it.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> A patent license is &quot;discriminatory&quot; if it does not include within</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">the scope of its coverage, prohibits the exercise of, or is</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">conditioned on the non-exercise of one or more of the rights that are</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">specifically granted under this License. You may not convey a covered</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">work if you are a party to an arrangement with a third party that is</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">in the business of distributing software, under which you make payment</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">to the third party based on the extent of your activity of conveying</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">the work, and under which the third party grants, to any of the</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">parties who would receive the covered work from you, a discriminatory</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">patent license (a) in connection with copies of the covered work</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">conveyed by you (or copies made from those copies), or (b) primarily</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">for and in connection with specific products or compilations that</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">contain the covered work, unless you entered into that arrangement,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">or that patent license was granted, prior to 28 March 2007.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> Nothing in this License shall be construed as excluding or limiting</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">any implied license or other defenses to infringement that may</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">otherwise be available to you under applicable patent law.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> 12. No Surrender of Others' Freedom.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> If conditions are imposed on you (whether by court order, agreement or</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">otherwise) that contradict the conditions of this License, they do not</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">excuse you from the conditions of this License. If you cannot convey a</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">covered work so as to satisfy simultaneously your obligations under this</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">License and any other pertinent obligations, then as a consequence you may</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">not convey it at all. For example, if you agree to terms that obligate you</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">to collect a royalty for further conveying from those to whom you convey</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">the Program, the only way you could satisfy both those terms and this</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">License would be to refrain entirely from conveying the Program.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> 13. Use with the GNU Affero General Public License.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> Notwithstanding any other provision of this License, you have</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">permission to link or combine any covered work with a work licensed</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">under version 3 of the GNU Affero General Public License into a single</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">combined work, and to convey the resulting work. The terms of this</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">License will continue to apply to the part which is the covered work,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">but the special requirements of the GNU Affero General Public License,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">section 13, concerning interaction through a network will apply to the</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">combination as such.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> 14. Revised Versions of this License.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> The Free Software Foundation may publish revised and/or new versions of</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">the GNU General Public License from time to time. Such new versions will</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">be similar in spirit to the present version, but may differ in detail to</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">address new problems or concerns.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> Each version is given a distinguishing version number. If the</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">Program specifies that a certain numbered version of the GNU General</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">Public License &quot;or any later version&quot; applies to it, you have the</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">option of following the terms and conditions either of that numbered</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">version or of any later version published by the Free Software</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">Foundation. If the Program does not specify a version number of the</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">GNU General Public License, you may choose any version ever published</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">by the Free Software Foundation.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> If the Program specifies that a proxy can decide which future</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">versions of the GNU General Public License can be used, that proxy's</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">public statement of acceptance of a version permanently authorizes you</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">to choose that version for the Program.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> Later license versions may give you additional or different</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">permissions. However, no additional obligations are imposed on any</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">author or copyright holder as a result of your choosing to follow a</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">later version.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> 15. Disclaimer of Warranty.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">ALL NECESSARY SERVICING, REPAIR OR CORRECTION.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> 16. Limitation of Liability.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">SUCH DAMAGES.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> 17. Interpretation of Sections 15 and 16.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;"> If the disclaimer of warranty and limitation of liability provided</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">above cannot be given local legal effect according to their terms,</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">reviewing courts shall apply local law that most closely approximates</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">an absolute waiver of all civil liability in connection with the</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">Program, unless a warranty or assumption of liability accompanies a</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">copy of the Program in return for a fee.</span></p></body></html> + + + + + + + + + + + &Close + + + + :/icons/cross.png:/icons/cross.png + + + + + + + + + + diff --git a/tags/fred-0.1.0alpha1/dlgkeydetails.cpp b/tags/fred-0.1.0alpha1/dlgkeydetails.cpp new file mode 100644 index 0000000..ef22166 --- /dev/null +++ b/tags/fred-0.1.0alpha1/dlgkeydetails.cpp @@ -0,0 +1,86 @@ +/******************************************************************************* +* fred Copyright (c) 2011 by Gillen Daniel * +* * +* Forensic Registry EDitor (fred) is a M$ registry hive editor for Linux with * +* special feautures useful during forensic analysis. * +* * +* This program is free software: you can redistribute it and/or modify it * +* under the terms of the GNU General Public License as published by the Free * +* Software Foundation, either version 3 of the License, or (at your option) * +* any later version. * +* * +* This program is distributed in the hope that it will be useful, but WITHOUT * +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * +* more details. * +* * +* You should have received a copy of the GNU General Public License along with * +* this program. If not, see . * +*******************************************************************************/ + +#include "dlgkeydetails.h" +#include "ui_dlgkeydetails.h" + +DlgKeyDetails::DlgKeyDetails(QWidget *p_parent) + : QDialog(p_parent), ui(new Ui::DlgKeyDetails) +{ + ui->setupUi(this); + + // Init private vars + this->parent_nodes=QStringList(); + this->key_name=QString(); + this->key_type=QString(); + this->key_value=QByteArray(); + this->p_hex_edit=NULL; +} + +DlgKeyDetails::~DlgKeyDetails() { + if(this->p_hex_edit!=NULL) delete this->p_hex_edit; + delete ui; +} + +void DlgKeyDetails::SetValues(QStringList &r_parent_nodes, + QString &r_key_name, + QString &r_key_type, + QByteArray &r_key_value) +{ + // Save params to local vars + this->parent_nodes=r_parent_nodes; + this->key_name=r_key_name; + this->key_type=r_key_type; + this->key_value=r_key_value; + + // Set dialog title to complete registry path + this->setWindowTitle(parent_nodes.join("/").append("/").append(r_key_name)); + + // Create read only hex edit widget + this->p_hex_edit=new QHexEdit(); + this->p_hex_edit->setReadOnly(true); + + // Make sure hex viewer font is monospaced. + QFont mono_font("Monospace"); + mono_font.setStyleHint(QFont::TypeWriter); + this->p_hex_edit->setFont(mono_font); + + // Add the hexedit widget to the dialog + // As we know the dialog uses a box layout... + ((QBoxLayout*)this->layout())->insertWidget(0,this->p_hex_edit); + + // Add data to hex edit + this->p_hex_edit->setData(this->key_value); +} + +void DlgKeyDetails::changeEvent(QEvent *e) { + QDialog::changeEvent(e); + switch (e->type()) { + case QEvent::LanguageChange: + ui->retranslateUi(this); + break; + default: + break; + } +} + +void DlgKeyDetails::on_BtnClose_clicked() { + this->accept(); +} diff --git a/tags/fred-0.1.0alpha1/dlgkeydetails.h b/tags/fred-0.1.0alpha1/dlgkeydetails.h new file mode 100644 index 0000000..9ead369 --- /dev/null +++ b/tags/fred-0.1.0alpha1/dlgkeydetails.h @@ -0,0 +1,60 @@ +/******************************************************************************* +* fred Copyright (c) 2011 by Gillen Daniel * +* * +* Forensic Registry EDitor (fred) is a M$ registry hive editor for Linux with * +* special feautures useful during forensic analysis. * +* * +* This program is free software: you can redistribute it and/or modify it * +* under the terms of the GNU General Public License as published by the Free * +* Software Foundation, either version 3 of the License, or (at your option) * +* any later version. * +* * +* This program is distributed in the hope that it will be useful, but WITHOUT * +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * +* more details. * +* * +* You should have received a copy of the GNU General Public License along with * +* this program. If not, see . * +*******************************************************************************/ + +#ifndef DLGKEYDETAILS_H +#define DLGKEYDETAILS_H + +#include +#include + +#include "qhexedit/qhexedit.h" + +namespace Ui { + class DlgKeyDetails; +} + +class DlgKeyDetails : public QDialog { + Q_OBJECT + + public: + explicit DlgKeyDetails(QWidget *p_parent=0); + ~DlgKeyDetails(); + + void SetValues(QStringList &r_parent_nodes, + QString &r_key_name, + QString &r_key_type, + QByteArray &r_key_value); + + protected: + void changeEvent(QEvent *e); + + private slots: + void on_BtnClose_clicked(); + + private: + Ui::DlgKeyDetails *ui; + QStringList parent_nodes; + QString key_name; + QString key_type; + QByteArray key_value; + QHexEdit *p_hex_edit; +}; + +#endif // DLGKEYDETAILS_H diff --git a/tags/fred-0.1.0alpha1/dlgkeydetails.ui b/tags/fred-0.1.0alpha1/dlgkeydetails.ui new file mode 100644 index 0000000..53429ed --- /dev/null +++ b/tags/fred-0.1.0alpha1/dlgkeydetails.ui @@ -0,0 +1,28 @@ + + + DlgKeyDetails + + + + 0 + 0 + 678 + 346 + + + + Dialog + + + + + + &Close + + + + + + + + diff --git a/tags/fred-0.1.0alpha1/fred.pro b/tags/fred-0.1.0alpha1/fred.pro new file mode 100644 index 0000000..b21f4b5 --- /dev/null +++ b/tags/fred-0.1.0alpha1/fred.pro @@ -0,0 +1,59 @@ +#******************************************************************************* +# fred Copyright (c) 2011 by Gillen Daniel * +# * +# Forensic Registry EDitor (fred) is a M$ registry hive editor for Linux with * +# special feautures useful during forensic analysis. * +# * +# This program is free software: you can redistribute it and/or modify it * +# under the terms of the GNU General Public License as published by the Free * +# Software Foundation, either version 3 of the License, or (at your option) * +# any later version. * +# * +# This program is distributed in the hope that it will be useful, but WITHOUT * +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * +# more details. * +# * +# You should have received a copy of the GNU General Public License along with * +# this program. If not, see . * +#******************************************************************************/ + +system(bash compileinfo.sh > compileinfo.h) + +QT += core \ + gui + +TARGET = fred + +TEMPLATE = app + + +SOURCES += main.cpp\ + mainwindow.cpp \ + registrynode.cpp \ + registrynodetreemodel.cpp \ + registrykey.cpp \ + registrykeytablemodel.cpp \ + dlgabout.cpp \ + dlgkeydetails.cpp \ + qhexedit/qhexedit_p.cpp \ + qhexedit/qhexedit.cpp + +HEADERS += mainwindow.h \ + registrynode.h \ + registrynodetreemodel.h \ + registrykey.h \ + registrykeytablemodel.h \ + dlgabout.h \ + dlgkeydetails.h \ + qhexedit/qhexedit_p.h \ + qhexedit/qhexedit.h + +FORMS += mainwindow.ui \ + dlgabout.ui \ + dlgkeydetails.ui + +LIBS += -lhivex + +RESOURCES += \ + fred.qrc diff --git a/tags/fred-0.1.0alpha1/fred.pro.user b/tags/fred-0.1.0alpha1/fred.pro.user new file mode 100644 index 0000000..2686017 --- /dev/null +++ b/tags/fred-0.1.0alpha1/fred.pro.user @@ -0,0 +1,167 @@ + + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + Default + + + + ProjectExplorer.Project.Target.0 + + Desktop + + Qt4ProjectManager.Target.DesktopTarget + 0 + 0 + 0 + + + + qmake + + QtProjectManager.QMakeBuildStep + + false + + + Make + + Qt4ProjectManager.MakeStep + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + Make + + Qt4ProjectManager.MakeStep + true + + clean + + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release + + Qt4ProjectManager.Qt4BuildConfiguration + 0 + /storage/local/projects/fred/fred-build-desktop + 2 + 0 + true + + + + + qmake + + QtProjectManager.QMakeBuildStep + + false + + + Make + + Qt4ProjectManager.MakeStep + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + Make + + Qt4ProjectManager.MakeStep + true + + clean + + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Debug + + Qt4ProjectManager.Qt4BuildConfiguration + 2 + /storage/local/projects/fred/fred-build-desktop + 2 + 0 + true + + 2 + + + 0 + Deploy + + ProjectExplorer.BuildSteps.Deploy + + 1 + No deployment + + ProjectExplorer.DefaultDeployConfiguration + + 1 + + fred + + Qt4ProjectManager.Qt4RunConfiguration + 2 + + fred.pro + false + false + + false + + 3768 + true + false + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.EnvironmentId + {c9903c5a-058e-4079-8277-d1a3b5a202ee} + + + ProjectExplorer.Project.Updater.FileVersion + 8 + + diff --git a/tags/fred-0.1.0alpha1/fred.qrc b/tags/fred-0.1.0alpha1/fred.qrc new file mode 100644 index 0000000..27bb0b8 --- /dev/null +++ b/tags/fred-0.1.0alpha1/fred.qrc @@ -0,0 +1,5 @@ + + + resources/fred.png + + diff --git a/tags/fred-0.1.0alpha1/fred_license_template.txt b/tags/fred-0.1.0alpha1/fred_license_template.txt new file mode 100644 index 0000000..0a600f0 --- /dev/null +++ b/tags/fred-0.1.0alpha1/fred_license_template.txt @@ -0,0 +1,19 @@ +/******************************************************************************* +* fred Copyright (c) 2011 by Gillen Daniel * +* * +* Forensic Registry EDitor (fred) is a M$ registry hive editor for Linux with * +* special feautures useful during forensic analysis. * +* * +* This program is free software: you can redistribute it and/or modify it * +* under the terms of the GNU General Public License as published by the Free * +* Software Foundation, either version 3 of the License, or (at your option) * +* any later version. * +* * +* This program is distributed in the hope that it will be useful, but WITHOUT * +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * +* more details. * +* * +* You should have received a copy of the GNU General Public License along with * +* this program. If not, see . * +*******************************************************************************/ diff --git a/tags/fred-0.1.0alpha1/main.cpp b/tags/fred-0.1.0alpha1/main.cpp new file mode 100644 index 0000000..94c37a6 --- /dev/null +++ b/tags/fred-0.1.0alpha1/main.cpp @@ -0,0 +1,31 @@ +/******************************************************************************* +* fred Copyright (c) 2011 by Gillen Daniel * +* * +* Forensic Registry EDitor (fred) is a M$ registry hive editor for Linux with * +* special feautures useful during forensic analysis. * +* * +* This program is free software: you can redistribute it and/or modify it * +* under the terms of the GNU General Public License as published by the Free * +* Software Foundation, either version 3 of the License, or (at your option) * +* any later version. * +* * +* This program is distributed in the hope that it will be useful, but WITHOUT * +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * +* more details. * +* * +* You should have received a copy of the GNU General Public License along with * +* this program. If not, see . * +*******************************************************************************/ + +#include +#include "mainwindow.h" + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + MainWindow w; + w.show(); + + return a.exec(); +} diff --git a/tags/fred-0.1.0alpha1/mainwindow.cpp b/tags/fred-0.1.0alpha1/mainwindow.cpp new file mode 100644 index 0000000..f5c1450 --- /dev/null +++ b/tags/fred-0.1.0alpha1/mainwindow.cpp @@ -0,0 +1,248 @@ +/******************************************************************************* +* fred Copyright (c) 2011 by Gillen Daniel * +* * +* Forensic Registry EDitor (fred) is a M$ registry hive editor for Linux with * +* special feautures useful during forensic analysis. * +* * +* This program is free software: you can redistribute it and/or modify it * +* under the terms of the GNU General Public License as published by the Free * +* Software Foundation, either version 3 of the License, or (at your option) * +* any later version. * +* * +* This program is distributed in the hope that it will be useful, but WITHOUT * +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * +* more details. * +* * +* You should have received a copy of the GNU General Public License along with * +* this program. If not, see . * +*******************************************************************************/ + +#include +#include +#include +#include +#include + +#include "mainwindow.h" +#include "ui_mainwindow.h" +#include "dlgabout.h" +#include "dlgkeydetails.h" + +#include "compileinfo.h" + +MainWindow::MainWindow(QWidget *parent) : + QMainWindow(parent), ui(new Ui::MainWindow) +{ + ui->setupUi(this); + + // Initialize private vars + this->hhive=NULL; + this->is_hive_open=false; + this->p_reg_node_tree_model=NULL; + this->p_reg_key_table_model=NULL; + + // Set window title + this->UpdateWindowTitle(); + + // Set main window size + int cur_screen=QApplication::desktop()->screenNumber(this); + int window_width= + QApplication::desktop()->availableGeometry(cur_screen).width()*0.5; + int window_height= + QApplication::desktop()->availableGeometry(cur_screen).height()*0.5; + int window_x= + (QApplication::desktop()->availableGeometry(cur_screen).width()/2)- + (window_width/2); + int window_y= + (QApplication::desktop()->availableGeometry(cur_screen).height()/2)- + (window_height/2); + this->setGeometry(window_x, + window_y, + window_width, + window_height); + + // Set last open location to home dir + this->last_open_location=QDir::homePath(); +} + +MainWindow::~MainWindow() { + if(this->is_hive_open) { + hivex_close(this->hhive); + } + delete ui; +} + +void MainWindow::on_action_Quit_triggered() { + qApp->exit(); +} + +void MainWindow::on_action_Open_hive_triggered() { + QString hive_file=""; + + hive_file=QFileDialog::getOpenFileName(this, + tr("Open registry hive"), + this->last_open_location, + tr("All files (*)")); + if(hive_file=="") return; + + // Update last open location + this->last_open_location=hive_file.left(hive_file. + lastIndexOf(QDir::separator())); + + // If another hive is currently open, close it + if(this->is_hive_open) this->on_action_Close_hive_triggered(); + + // Try to open hive + this->hhive=hivex_open(hive_file.toAscii().constData(),0); + if(this->hhive==NULL) { + QMessageBox::critical(this, + tr("Error opening hive file"), + tr("Unable to open file '%1'").arg(hive_file)); + return; + } + + // Create tree model + hive_node_h root_node=hivex_root(hhive); + if(root_node==0) { + QMessageBox::critical(this, + tr("Error opening hive file"), + tr("This hive seems to have no root node!") + .arg(hive_file)); + return; + } + this->p_reg_node_tree_model= + new RegistryNodeTreeModel(this->hhive, + root_node, + this->ui->RegNodeTree); + this->ui->RegNodeTree->setModel(this->p_reg_node_tree_model); + + this->is_hive_open=true; + this->ui->action_Close_hive->setEnabled(true); + this->UpdateWindowTitle(hive_file); +} + +void MainWindow::on_action_Close_hive_triggered() { + if(this->is_hive_open) { + // Delete models + if(this->p_reg_node_tree_model!=NULL) { + delete this->p_reg_node_tree_model; + this->p_reg_node_tree_model=NULL; + } + if(this->p_reg_key_table_model!=NULL) { + delete this->p_reg_key_table_model; + this->p_reg_key_table_model=NULL; + } + + // Close hive + hivex_close(this->hhive); + + this->is_hive_open=false; + this->ui->action_Close_hive->setEnabled(false); + this->UpdateWindowTitle(); + } +} + +void MainWindow::on_actionAbout_Qt_triggered() { + QMessageBox::aboutQt(this,tr("About Qt")); +} + +void MainWindow::on_RegNodeTree_clicked(QModelIndex index) { + QStringList nodes; + + //Built node path + nodes.clear(); + nodes.append(this->p_reg_node_tree_model-> + data(index,Qt::DisplayRole).toString()); + while(this->p_reg_node_tree_model->parent(index)!=QModelIndex()) { + // Prepend all parent nodes + index=this->p_reg_node_tree_model->parent(index); + nodes.prepend(this->p_reg_node_tree_model-> + data(index,Qt::DisplayRole).toString()); + } + + // Get hive_node handle for current node + hive_node_h hive_node=hivex_root(this->hhive); + QString cur_node; + for(QStringList::iterator it=nodes.begin();it!=nodes.end();++it) { + cur_node=*it; + hive_node=hivex_node_get_child(this->hhive, + hive_node, + cur_node.toAscii().constData()); + } + + // Create table model and attach it to the table view + if(this->p_reg_key_table_model!=NULL) delete this->p_reg_key_table_model; + this->p_reg_key_table_model=new RegistryKeyTableModel(this->hhive, + hive_node, + this->ui->RegKeyTable); + this->ui->RegKeyTable->setModel(this->p_reg_key_table_model); + + // Resize table rows / columns to fit data + this->ui->RegKeyTable->resizeColumnsToContents(); + this->ui->RegKeyTable->horizontalHeader()->stretchLastSection(); +} + +void MainWindow::UpdateWindowTitle(QString filename) { + if(filename=="") { + this->setWindowTitle(QString().sprintf("%s v%s",APP_TITLE,APP_VERSION)); + } else { + this->setWindowTitle(QString().sprintf("%s v%s - %s", + APP_TITLE, + APP_VERSION, + filename.toLocal8Bit().constData())); + } +} + +void MainWindow::on_actionAbout_fred_triggered() { + DlgAbout dlg_about(this); + dlg_about.exec(); +} + +void MainWindow::on_RegNodeTree_activated(QModelIndex index) { + // Also update when pressing ENTER + this->on_RegNodeTree_clicked(index); +} + +void MainWindow::on_RegKeyTable_doubleClicked(QModelIndex index) { + QModelIndex key_index; + QModelIndex node_index; + QStringList nodes; + + QString key_name; + QString key_type; + QByteArray key_value; + + if(!index.isValid()) return; + + // Get key name, type and value + key_index=this->p_reg_key_table_model->index(index.row(),0); + key_name=this->p_reg_key_table_model->data(key_index,Qt::DisplayRole) + .toString(); + key_index=this->p_reg_key_table_model->index(index.row(),1); + key_type=this->p_reg_key_table_model->data(key_index,Qt::DisplayRole) + .toString(); + key_index=this->p_reg_key_table_model->index(index.row(),2); + key_value=this->p_reg_key_table_model->data(key_index, + RegistryKeyTableModel:: + AdditionalRoles_GetRawData) + .toByteArray(); + + // Get current node + node_index=this->ui->RegNodeTree->currentIndex(); + + //Built node path + nodes.clear(); + nodes.append(this->p_reg_node_tree_model-> + data(node_index,Qt::DisplayRole).toString()); + while(this->p_reg_node_tree_model->parent(node_index)!=QModelIndex()) { + // Prepend all parent nodes + node_index=this->p_reg_node_tree_model->parent(node_index); + nodes.prepend(this->p_reg_node_tree_model-> + data(node_index,Qt::DisplayRole).toString()); + } + + DlgKeyDetails dlg_key_details(this); + dlg_key_details.SetValues(nodes,key_name,key_type,key_value); + dlg_key_details.exec(); +} diff --git a/tags/fred-0.1.0alpha1/mainwindow.h b/tags/fred-0.1.0alpha1/mainwindow.h new file mode 100644 index 0000000..f2d5e27 --- /dev/null +++ b/tags/fred-0.1.0alpha1/mainwindow.h @@ -0,0 +1,63 @@ +/******************************************************************************* +* fred Copyright (c) 2011 by Gillen Daniel * +* * +* Forensic Registry EDitor (fred) is a M$ registry hive editor for Linux with * +* special feautures useful during forensic analysis. * +* * +* This program is free software: you can redistribute it and/or modify it * +* under the terms of the GNU General Public License as published by the Free * +* Software Foundation, either version 3 of the License, or (at your option) * +* any later version. * +* * +* This program is distributed in the hope that it will be useful, but WITHOUT * +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * +* more details. * +* * +* You should have received a copy of the GNU General Public License along with * +* this program. If not, see . * +*******************************************************************************/ + +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include + +#include "registrynodetreemodel.h" +#include "registrykeytablemodel.h" + +#include + +namespace Ui { + class MainWindow; +} + +class MainWindow : public QMainWindow { + Q_OBJECT + + public: + explicit MainWindow(QWidget *parent = 0); + ~MainWindow(); + + private slots: + void on_action_Quit_triggered(); + void on_action_Open_hive_triggered(); + void on_action_Close_hive_triggered(); + void on_actionAbout_Qt_triggered(); + void on_RegNodeTree_clicked(QModelIndex index); + void on_actionAbout_fred_triggered(); + void on_RegNodeTree_activated(QModelIndex index); + void on_RegKeyTable_doubleClicked(QModelIndex index); + +private: + Ui::MainWindow *ui; + QString last_open_location; + hive_h *hhive; + bool is_hive_open; + RegistryNodeTreeModel *p_reg_node_tree_model; + RegistryKeyTableModel *p_reg_key_table_model; + + void UpdateWindowTitle(QString filename=""); +}; + +#endif // MAINWINDOW_H diff --git a/tags/fred-0.1.0alpha1/mainwindow.ui b/tags/fred-0.1.0alpha1/mainwindow.ui new file mode 100644 index 0000000..314fef6 --- /dev/null +++ b/tags/fred-0.1.0alpha1/mainwindow.ui @@ -0,0 +1,167 @@ + + + MainWindow + + + + 0 + 0 + 494 + 317 + + + + + 0 + 0 + + + + + 0 + 0 + + + + MainWindow + + + + :/icons/resources/fred.png:/icons/resources/fred.png + + + + + 3 + + + 3 + + + + + Qt::Horizontal + + + + + 0 + 0 + + + + true + + + false + + + + + + 100 + 0 + + + + + 400 + 0 + + + + Qt::ScrollBarAsNeeded + + + QAbstractItemView::SelectRows + + + Qt::ElideNone + + + QAbstractItemView::ScrollPerPixel + + + true + + + false + + + false + + + false + + + false + + + + + + + + + + 0 + 0 + 494 + 25 + + + + + &File + + + + + + + + + &Help + + + + + + + + + + + &Open hive + + + + + false + + + &Close hive + + + + + &Quit + + + + + About Qt + + + + + About fred + + + + + + + + + diff --git a/tags/fred-0.1.0alpha1/qhexedit/qhexedit.cpp b/tags/fred-0.1.0alpha1/qhexedit/qhexedit.cpp new file mode 100644 index 0000000..7ad0216 --- /dev/null +++ b/tags/fred-0.1.0alpha1/qhexedit/qhexedit.cpp @@ -0,0 +1,137 @@ +/******************************************************************************* +* qhexedit Copyright (c) 2011 by Gillen Daniel * +* * +* Simple hex editor widget for Qt. * +* * +* Derived from code by Simon Winfried under a compatible license: * +* Copyright (c) 2010 by Simon Winfried * +* * +* This program is free software: you can redistribute it and/or modify it * +* under the terms of the GNU General Public License as published by the Free * +* Software Foundation, either version 3 of the License, or (at your option) * +* any later version. * +* * +* This program is distributed in the hope that it will be useful, but WITHOUT * +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * +* more details. * +* * +* You should have received a copy of the GNU General Public License along with * +* this program. If not, see . * +*******************************************************************************/ + +#include + +#include "qhexedit.h" + + +QHexEdit::QHexEdit(QWidget *parent) : QScrollArea(parent) +{ + qHexEdit_p = new QHexEditPrivate(this); + setWidget(qHexEdit_p); + setWidgetResizable(true); + + connect(qHexEdit_p, SIGNAL(currentAddressChanged(int)), this, SIGNAL(currentAddressChanged(int))); + connect(qHexEdit_p, SIGNAL(currentSizeChanged(int)), this, SIGNAL(currentSizeChanged(int))); + connect(qHexEdit_p, SIGNAL(dataChanged()), this, SIGNAL(dataChanged())); + connect(qHexEdit_p, SIGNAL(overwriteModeChanged(bool)), this, SIGNAL(overwriteModeChanged(bool))); +} + +void QHexEdit::insert(int i, const QByteArray & ba) +{ + qHexEdit_p->insert(i, ba); +} + +void QHexEdit::insert(int i, char ch) +{ + qHexEdit_p->insert(i, ch); +} + +void QHexEdit::remove(int pos, int len) +{ + qHexEdit_p->remove(pos, len); +} + +void QHexEdit::setAddressArea(bool addressArea) +{ + qHexEdit_p->setAddressArea(addressArea); +} + +void QHexEdit::setAddressWidth(int addressWidth) +{ + qHexEdit_p->setAddressWidth(addressWidth); +} + +void QHexEdit::setAsciiArea(bool asciiArea) +{ + qHexEdit_p->setAsciiArea(asciiArea); +} + +void QHexEdit::setHighlighting(bool mode) +{ + qHexEdit_p->setHighlighting(mode); +} + +void QHexEdit::setAddressOffset(int offset) +{ + qHexEdit_p->setAddressOffset(offset); +} + +int QHexEdit::addressOffset() +{ + return addressOffset(); +} + +void QHexEdit::setData(const QByteArray &data) +{ + qHexEdit_p->setData(data); +} + +QByteArray QHexEdit::data() +{ + return qHexEdit_p->data(); +} + +void QHexEdit::setAddressAreaColor(const QColor &color) +{ + qHexEdit_p->setAddressAreaColor(color); +} + +QColor QHexEdit::addressAreaColor() +{ + return qHexEdit_p->addressAreaColor(); +} + +void QHexEdit::setHighlightingColor(const QColor &color) +{ + qHexEdit_p->setHighlightingColor(color); +} + +QColor QHexEdit::highlightingColor() +{ + return qHexEdit_p->highlightingColor(); +} + +void QHexEdit::setOverwriteMode(bool overwriteMode) +{ + qHexEdit_p->setOverwriteMode(overwriteMode); +} + +bool QHexEdit::overwriteMode() +{ + return qHexEdit_p->overwriteMode(); +} + +void QHexEdit::setReadOnly(bool read_only) { + qHexEdit_p->setReadOnly(read_only); +} + +bool QHexEdit::readOnly() { + return qHexEdit_p->readOnly(); +} + +void QHexEdit::setFont(const QFont &font) +{ + qHexEdit_p->setFont(font); +} + diff --git a/tags/fred-0.1.0alpha1/qhexedit/qhexedit.h b/tags/fred-0.1.0alpha1/qhexedit/qhexedit.h new file mode 100644 index 0000000..eb6e6b1 --- /dev/null +++ b/tags/fred-0.1.0alpha1/qhexedit/qhexedit.h @@ -0,0 +1,177 @@ +/******************************************************************************* +* qhexedit Copyright (c) 2011 by Gillen Daniel * +* * +* Simple hex editor widget for Qt. * +* * +* Derived from code by Simon Winfried under a compatible license: * +* Copyright (c) 2010 by Simon Winfried * +* * +* This program is free software: you can redistribute it and/or modify it * +* under the terms of the GNU General Public License as published by the Free * +* Software Foundation, either version 3 of the License, or (at your option) * +* any later version. * +* * +* This program is distributed in the hope that it will be useful, but WITHOUT * +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * +* more details. * +* * +* You should have received a copy of the GNU General Public License along with * +* this program. If not, see . * +*******************************************************************************/ + +#ifndef QHEXEDIT_H +#define QHEXEDIT_H + +#include +#include "qhexedit_p.h" + +/** \mainpage +QHexEdit is a binary editor widget for Qt. + +\version Version 0.4.6 +\image html hexedit.png +*/ + + +/*! QHexEdit is a hex editor widget written in C++ for the Qt (Qt4) framework. +It is a simple editor for binary data, just like QPlainTextEdit is for text data. +There are sip configuration files included, so it is easy to create bindings +for PyQt and you can use this widget also in python. + +QHexEdit takes the data of a QByteArray (setData()) and shows it. You can use the +mouse or the keyboard to navigate inside the widget. If you hit the keys (0..9, a..f) +you will change the data. Changed data is highlighted and can be accessed via data(). + +Normaly QHexEdit works in the overwrite Mode. You can set overwriteMode(false) and +insert data. In this case the size of data() increases. It is also possible to delete +bytes under the cursor, here the size of data decreases. + +There are some limitations: The size of data has in general to be below 10 megabytes, +otherwise the scroll sliders ard not shown and you can't scroll any more. Copy and +paste functionality is perhaps a subject of a later release. +*/ + class QHexEdit : public QScrollArea +{ + Q_OBJECT + /*! Property data holds the content of QHexEdit. Call setData() to set the + content of QHexEdit, data() returns the actual content. + */ + Q_PROPERTY(QByteArray data READ data WRITE setData) + + /*! Property addressOffset is added to the Numbers of the Address Area. + A offset in the address area (left side) is sometimes usefull, whe you show + only a segment of a complete memory picture. With setAddressOffset() you set + this property - with addressOffset() you get the actual value. + */ + Q_PROPERTY(int addressOffset READ addressOffset WRITE setAddressOffset) + + /*! Property address area color sets (setAddressAreaColor()) the backgorund + color of address areas. You can also read the color (addressaAreaColor()). + */ + Q_PROPERTY(QColor addressAreaColor READ addressAreaColor WRITE setAddressAreaColor) + + /*! Property highlighting color sets (setHighlightingColor()) the backgorund + color of highlighted text areas. You can also read the color + (highlightingColor()). + */ + Q_PROPERTY(QColor highlightingColor READ highlightingColor WRITE setHighlightingColor) + + /*! Porperty overwrite mode sets (setOverwriteMode()) or gets (overwriteMode()) the mode + in which the editor works. In overwritem mode the user will overwrite existing data. + */ + Q_PROPERTY(bool overwriteMode READ overwriteMode WRITE setOverwriteMode) + + /*! Porperty read only sets (setReadOnly()) or gets (readOnly()) the + current editable mode. + */ + Q_PROPERTY(bool readOnly READ readOnly WRITE setReadOnly) + +public: + /*! Creates an instance of QHexEdit. + \param parent Parent widget of QHexEdit. + */ + QHexEdit(QWidget *parent = 0); + + /*! Inserts a byte array. + \param i Index position, where to insert + \param ba byte array, which is to insert + */ + void insert(int i, const QByteArray & ba); + + /*! Inserts a char. + \param i Index position, where to insert + \param ch Char, which is to insert + */ + void insert(int i, char ch); + + /*! Removes len bytes from the content. + \param pos Index position, where to remove + \param len Amount of bytes to remove + */ + void remove(int pos, int len=1); + + /*! Set the font of the widget. Please use fixed width fonts like Mono or Courier.*/ + void setFont(const QFont &); + + /*! \cond docNever */ + void setAddressOffset(int offset); + int addressOffset(); + void setData(QByteArray const &data); + QByteArray data(); + void setAddressAreaColor(QColor const &color); + QColor addressAreaColor(); + void setHighlightingColor(QColor const &color); + QColor highlightingColor(); + void setOverwriteMode(bool); + bool overwriteMode(); + void setReadOnly(bool); + bool readOnly(); + /*! \endcond docNever */ + +public slots: + + /*! Set the minimum width of the address area. + \param addressWidth Width in characters. + */ + void setAddressWidth(int addressWidth); + + /*! Switch the address area on or off. + \param addressArea true (show it), false (hide it). + */ + void setAddressArea(bool addressArea); + + /*! Switch the ascii area on or off. + \param asciiArea true (show it), false (hide it). + */ + void setAsciiArea(bool asciiArea); + + /*! Switch the highlighting feature on or of. + \param mode true (show it), false (hide it). + */ + void setHighlighting(bool mode); + +signals: + + /*! Contains the address, where the cursor is located. */ + void currentAddressChanged(int address); + + /*! Contains the size of the data to edit. */ + void currentSizeChanged(int size); + + /*! The signal is emited every time, the data is changed. */ + void dataChanged(); + + /*! The signal is emited every time, the overwrite mode is changed. */ + void overwriteModeChanged(bool state); + +private: + /*! \cond docNever */ + QHexEditPrivate *qHexEdit_p; + QHBoxLayout *layout; + QScrollArea *scrollArea; + /*! \endcond docNever */ +}; + +#endif + diff --git a/tags/fred-0.1.0alpha1/qhexedit/qhexedit_p.cpp b/tags/fred-0.1.0alpha1/qhexedit/qhexedit_p.cpp new file mode 100644 index 0000000..23a6f80 --- /dev/null +++ b/tags/fred-0.1.0alpha1/qhexedit/qhexedit_p.cpp @@ -0,0 +1,454 @@ +/******************************************************************************* +* qhexedit Copyright (c) 2011 by Gillen Daniel * +* * +* Simple hex editor widget for Qt. * +* * +* Derived from code by Simon Winfried under a compatible license: * +* Copyright (c) 2010 by Simon Winfried * +* * +* This program is free software: you can redistribute it and/or modify it * +* under the terms of the GNU General Public License as published by the Free * +* Software Foundation, either version 3 of the License, or (at your option) * +* any later version. * +* * +* This program is distributed in the hope that it will be useful, but WITHOUT * +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * +* more details. * +* * +* You should have received a copy of the GNU General Public License along with * +* this program. If not, see . * +*******************************************************************************/ + +#include + +#include "qhexedit_p.h" + +const int HEXCHARS_IN_LINE = 47; +const int GAP_ADR_HEX = 10; +const int GAP_HEX_ASCII = 16; +const int BYTES_PER_LINE = 16; + +QHexEditPrivate::QHexEditPrivate(QScrollArea *parent) : QWidget(parent) +{ + _scrollArea = parent; + setAddressWidth(4); + setAddressOffset(0); + setAddressArea(true); + setAsciiArea(true); + setHighlighting(true); + setOverwriteMode(true); + setAddressAreaColor(QColor(Qt::lightGray).lighter(110)); + setHighlightingColor(QColor(Qt::yellow).lighter(160)); + this->setReadOnly(true); + + setFont(QFont("Mono", 10)); + connect(&_cursorTimer, SIGNAL(timeout()), this, SLOT(updateCursor())); + + _cursorTimer.setInterval(500); + _cursorTimer.start(); + + setFocusPolicy(Qt::StrongFocus); + _size = -1; +} + +void QHexEditPrivate::setAddressOffset(int offset) +{ + _addressOffset = offset; + adjust(); +} + +int QHexEditPrivate::addressOffset() +{ + return _addressOffset; +} + +void QHexEditPrivate::setData(const QByteArray &data) +{ + _data = data; + _originalData = data; + adjust(); + setCursorPos(0); + setFocus(); +} + +QByteArray QHexEditPrivate::data() +{ + return _data; +} + +void QHexEditPrivate::setAddressAreaColor(const QColor &color) +{ + _addressAreaColor = color; + update(); +} + +QColor QHexEditPrivate::addressAreaColor() +{ + return _addressAreaColor; +} + +void QHexEditPrivate::setHighlightingColor(const QColor &color) +{ + _highlightingColor = color; + update(); +} + +QColor QHexEditPrivate::highlightingColor() +{ + return _highlightingColor; +} + +void QHexEditPrivate::setOverwriteMode(bool overwriteMode) +{ + if (overwriteMode != _overwriteMode) + { + emit overwriteModeChanged(overwriteMode); + _overwriteMode = overwriteMode; + adjust(); + } +} + +bool QHexEditPrivate::overwriteMode() +{ + return _overwriteMode; +} + +void QHexEditPrivate::setReadOnly(bool read_only) { + this->_readOnly=read_only; +} + +bool QHexEditPrivate::readOnly() { + return this->_readOnly; +} + +void QHexEditPrivate::insert(int i, const QByteArray & ba) +{ + _data.insert(i, ba); + _originalData.insert(i, ba); +} + +void QHexEditPrivate::insert(int i, char ch) +{ + _data.insert(i, ch); + _originalData.insert(i, ch); +} + +void QHexEditPrivate::remove(int index, int len) +{ + _data.remove(index, len); + _originalData.remove(index, len); +} + +void QHexEditPrivate::setAddressArea(bool addressArea) +{ + _addressArea = addressArea; + adjust(); + setCursorPos(_cursorPosition); +} + +void QHexEditPrivate::setAddressWidth(int addressWidth) +{ + if ((addressWidth >= 0) and (addressWidth<=6)) + { + _addressNumbers = addressWidth; + adjust(); + setCursorPos(_cursorPosition); + } +} + +void QHexEditPrivate::setAsciiArea(bool asciiArea) +{ + _asciiArea = asciiArea; + adjust(); +} + +void QHexEditPrivate::setFont(const QFont &font) +{ + QWidget::setFont(font); + adjust(); +} + +void QHexEditPrivate::setHighlighting(bool mode) +{ + _highlighting = mode; + update(); +} + +void QHexEditPrivate::keyPressEvent(QKeyEvent *event) +{ + bool down = false; + int charX = (_cursorX - _xPosHex) / _charWidth; + int posX = (charX / 3) * 2 + (charX % 3); + int posBa = (_cursorY / _charHeight) * BYTES_PER_LINE + posX / 2; + + int key = int(event->text()[0].toAscii()); + if (!this->_readOnly && + ((key>='0' && key<='9') || (key>='a' && key <= 'f'))) + { + // insert char + if (_overwriteMode == false) + if ((charX % 3) == 0) + { + insert(posBa, char(0)); + adjust(); + } + if (_data.size() > 0) + { + QByteArray hexValue = _data.mid(posBa, 1).toHex(); + if ((charX % 3) == 0) + hexValue[0] = key; + else + hexValue[1] = key; + _data.replace(posBa, 1, QByteArray().fromHex(hexValue)); + emit dataChanged(); + + setCursorPos(_cursorPosition + 1); + down = true; + } + } + + // delete char + if (!this->_readOnly && event->matches(QKeySequence::Delete)) { + remove(posBa); + } + if (!this->_readOnly && event->key() == Qt::Key_Backspace) { + remove(posBa - 1); + setCursorPos(_cursorPosition - 2); + } + + // handle other function keys + if(!this->_readOnly && event->key() == Qt::Key_Insert) { + setOverwriteMode(!_overwriteMode); + setCursorPos(_cursorPosition); + } + + if (event->matches(QKeySequence::MoveToNextChar)) + { + setCursorPos(_cursorPosition + 1); + down = true; + } + if (event->matches(QKeySequence::MoveToPreviousChar)) + setCursorPos(_cursorPosition - 1); + if (event->matches(QKeySequence::MoveToStartOfLine)) + setCursorPos(_cursorPosition - (_cursorPosition % (2 * BYTES_PER_LINE))); + if (event->matches(QKeySequence::MoveToEndOfLine)) + setCursorPos(_cursorPosition | (2 * BYTES_PER_LINE -1)); + if (event->matches(QKeySequence::MoveToPreviousLine)) + setCursorPos(_cursorPosition - (2 * BYTES_PER_LINE)); + if (event->matches(QKeySequence::MoveToPreviousPage)) + setCursorPos(_cursorPosition - (((_scrollArea->viewport()->height() / _charHeight) - 1) * 2 * BYTES_PER_LINE)); + if (event->matches(QKeySequence::MoveToStartOfDocument)) + setCursorPos(0); + if (event->matches(QKeySequence::MoveToNextLine)) + { + setCursorPos(_cursorPosition + (2 * BYTES_PER_LINE)); + down = true; + } + if (event->matches(QKeySequence::MoveToEndOfDocument)) + { + setCursorPos(_data.size() * 2); + down = true; + } + if (event->matches(QKeySequence::MoveToNextPage)) + { + setCursorPos(_cursorPosition + (((_scrollArea->viewport()->height() / _charHeight) - 1) * 2 * BYTES_PER_LINE)); + down = true; + } + + // when we move downwards, we have to go a little further + if (down) + _scrollArea->ensureVisible(_cursorX, _cursorY, 3, 3 + _charHeight); + else + _scrollArea->ensureVisible(_cursorX, _cursorY, 3, 3); + update(); +} + +void QHexEditPrivate::mousePressEvent(QMouseEvent * event) +{ + setCursorPos(event->pos()); +} + +void QHexEditPrivate::paintEvent(QPaintEvent *event) +{ + QPainter painter(this); + + // draw some patterns if needed + painter.fillRect(event->rect(), this->palette().color(QPalette::Base)); + if (_addressArea) + painter.fillRect(QRect(_xPosAdr, event->rect().top(), _xPosHex - GAP_ADR_HEX + 2, height()), _addressAreaColor); + if (_asciiArea) + { + int linePos = _xPosAscii - (GAP_HEX_ASCII / 2); + painter.setPen(Qt::gray); + painter.drawLine(linePos, event->rect().top(), linePos, height()); + } + + painter.setPen(this->palette().color(QPalette::WindowText)); + + // calc position + int firstLineIdx = ((event->rect().top()/ _charHeight) - _charHeight) * BYTES_PER_LINE; + if (firstLineIdx < 0) + firstLineIdx = 0; + int lastLineIdx = ((event->rect().bottom() / _charHeight) + _charHeight) * BYTES_PER_LINE; + if (lastLineIdx > _data.size()) + lastLineIdx = _data.size(); + int yPosStart = ((firstLineIdx) / BYTES_PER_LINE) * _charHeight + _charHeight; + + // paint address area + if (_addressArea) + { + for (int lineIdx = firstLineIdx, yPos = yPosStart; lineIdx < lastLineIdx; lineIdx += BYTES_PER_LINE, yPos +=_charHeight) + { + QString address = QString("%1") + .arg(lineIdx + _addressOffset, _realAddressNumbers, 16, QChar('0')); + painter.drawText(_xPosAdr, yPos, address); + } + } + + // paint hex area + QByteArray hexBa(_data.mid(firstLineIdx, lastLineIdx - firstLineIdx + 1).toHex()); + QBrush highLighted = QBrush(_highlightingColor); + painter.setBackground(highLighted); + painter.setBackgroundMode(Qt::TransparentMode); + for (int lineIdx = firstLineIdx, yPos = yPosStart; lineIdx < lastLineIdx; lineIdx += BYTES_PER_LINE, yPos +=_charHeight) + { + QByteArray hex; + int xPos = _xPosHex; + for (int colIdx = 0; ((lineIdx + colIdx) < _data.size() and (colIdx < BYTES_PER_LINE)); colIdx++) + { + // hilight diff bytes + if (_highlighting) + { + int posBa = lineIdx + colIdx; + if (posBa >= _originalData.size()) + painter.setBackgroundMode(Qt::TransparentMode); + else + if (_data[posBa] == _originalData[posBa]) + painter.setBackgroundMode(Qt::TransparentMode); + else + painter.setBackgroundMode(Qt::OpaqueMode); + } + + // render hex value + if (colIdx == 0) + { + hex = hexBa.mid((lineIdx - firstLineIdx) * 2, 2); + painter.drawText(xPos, yPos, hex); + xPos += 2 * _charWidth; + } else { + hex = hexBa.mid((lineIdx + colIdx - firstLineIdx) * 2, 2).prepend(" "); + painter.drawText(xPos, yPos, hex); + xPos += 3 * _charWidth; + } + } + } + painter.setBackgroundMode(Qt::TransparentMode); + + // paint ascii area + if (_asciiArea) + { + for (int lineIdx = firstLineIdx, yPos = yPosStart; lineIdx < lastLineIdx; lineIdx += BYTES_PER_LINE, yPos +=_charHeight) + { + QByteArray ascii = _data.mid(lineIdx, BYTES_PER_LINE); + for (int idx=0; idx < ascii.size(); idx++) + if (((char)ascii[idx] < 0x20) or ((char)ascii[idx] > 0x7e)) + ascii[idx] = '.'; + painter.drawText(_xPosAscii, yPos, ascii); + } + } + + // paint cursor + if (_blink) + { + if (_overwriteMode) + painter.fillRect(_cursorX, _cursorY + _charHeight - 2, _charWidth, 2, this->palette().color(QPalette::WindowText)); + else + painter.fillRect(_cursorX, _cursorY, 2, _charHeight, this->palette().color(QPalette::WindowText)); + } + + if (_size != _data.size()) + { + _size = _data.size(); + emit currentSizeChanged(_size); + } +} + +void QHexEditPrivate::setCursorPos(int position) +{ + // delete cursor + _blink = false; + update(); + + // cursor in range? + if (_overwriteMode) + { + if (position > (_data.size() * 2 - 1)) + position = _data.size() * 2 - 1; + } else { + if (position > (_data.size() * 2)) + position = _data.size() * 2; + } + + if (position < 0) + position = 0; + + // calc position + _cursorPosition = position; + _cursorY = (position / (2 * BYTES_PER_LINE)) * _charHeight + 4; + int x = (position % (2 * BYTES_PER_LINE)); + _cursorX = (((x / 2) * 3) + (x % 2)) * _charWidth + _xPosHex; + + // immiadately draw cursor + _blink = true; + update(); + emit currentAddressChanged(_cursorPosition/2); +} + +void QHexEditPrivate::setCursorPos(QPoint pos) +{ + // find char under cursor + if ((pos.x() >= _xPosHex) and (pos.x() < (_xPosHex + HEXCHARS_IN_LINE * _charWidth))) + { + int x = (pos.x() - _xPosHex) / _charWidth; + if ((x % 3) == 0) + x = (x / 3) * 2; + else + x = ((x / 3) * 2) + 1; + int y = (pos.y() / _charHeight) * 2 * BYTES_PER_LINE; + setCursorPos(x + y); + } +} + +void QHexEditPrivate::updateCursor() +{ + if (_blink) + _blink = false; + else + _blink = true; + update(_cursorX, _cursorY, _charWidth, _charHeight); +} + +void QHexEditPrivate::adjust() +{ + _charWidth = fontMetrics().width(QLatin1Char('9')); + _charHeight = fontMetrics().height(); + + // is addressNumbers wide enought? + QString test = QString("%1") + .arg(_data.size() + _addressOffset, _addressNumbers, 16, QChar('0')); + _realAddressNumbers = test.size(); + + _xPosAdr = 0; + if (_addressArea) + _xPosHex = _realAddressNumbers *_charWidth + GAP_ADR_HEX; + else + _xPosHex = 0; + _xPosAscii = _xPosHex + HEXCHARS_IN_LINE * _charWidth + GAP_HEX_ASCII; + + // tell QAbstractScollbar, how big we are + setMinimumHeight(((_data.size()/16 + 1) * _charHeight) + 3); + setMinimumWidth(_xPosAscii + (BYTES_PER_LINE * _charWidth)); + + update(); +} diff --git a/tags/fred-0.1.0alpha1/qhexedit/qhexedit_p.h b/tags/fred-0.1.0alpha1/qhexedit/qhexedit_p.h new file mode 100644 index 0000000..70ec39e --- /dev/null +++ b/tags/fred-0.1.0alpha1/qhexedit/qhexedit_p.h @@ -0,0 +1,109 @@ +/******************************************************************************* +* qhexedit Copyright (c) 2011 by Gillen Daniel * +* * +* Simple hex editor widget for Qt. * +* * +* Derived from code by Simon Winfried under a compatible license: * +* Copyright (c) 2010 by Simon Winfried * +* * +* This program is free software: you can redistribute it and/or modify it * +* under the terms of the GNU General Public License as published by the Free * +* Software Foundation, either version 3 of the License, or (at your option) * +* any later version. * +* * +* This program is distributed in the hope that it will be useful, but WITHOUT * +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * +* more details. * +* * +* You should have received a copy of the GNU General Public License along with * +* this program. If not, see . * +*******************************************************************************/ + +#ifndef QHEXEDIT_P_H +#define QHEXEDIT_P_H + +/** \cond docNever */ + + +#include + +class QHexEditPrivate : public QWidget +{ +Q_OBJECT + +public: + QHexEditPrivate(QScrollArea *parent); + + void setAddressOffset(int offset); + int addressOffset(); + + void setData(QByteArray const &data); + QByteArray data(); + + void setAddressAreaColor(QColor const &color); + QColor addressAreaColor(); + + void setHighlightingColor(QColor const &color); + QColor highlightingColor(); + + void setOverwriteMode(bool overwriteMode); + bool overwriteMode(); + void setReadOnly(bool read_only); + bool readOnly(); + + void insert(int i, const QByteArray & ba); + void insert(int i, char ch); + void remove(int index, int len=1); + + void setAddressArea(bool addressArea); + void setAddressWidth(int addressWidth); + void setAsciiArea(bool asciiArea); + void setHighlighting(bool mode); + virtual void setFont(const QFont &font); + +signals: + void currentAddressChanged(int address); + void currentSizeChanged(int size); + void dataChanged(); + void overwriteModeChanged(bool state); + +protected: + void keyPressEvent(QKeyEvent * event); + void mousePressEvent(QMouseEvent * event); + void paintEvent(QPaintEvent *event); + void setCursorPos(QPoint pos); + void setCursorPos(int position); + +private slots: + void updateCursor(); + +private: + void adjust(); + + QColor _addressAreaColor; + QByteArray _data; + QByteArray _originalData; + QColor _highlightingColor; + QScrollArea *_scrollArea; + QTimer _cursorTimer; + + bool _blink; + bool _addressArea; + bool _asciiArea; + bool _highlighting; + bool _overwriteMode; + bool _readOnly; + + int _addressNumbers, _realAddressNumbers; + int _addressOffset; + int _charWidth, _charHeight; + int _cursorX, _cursorY, _cursorPosition; + int _xPosAdr, _xPosHex, _xPosAscii; + int _size; +}; + +/** \endcond docNever */ + +#endif + diff --git a/tags/fred-0.1.0alpha1/qrc_fred.cpp b/tags/fred-0.1.0alpha1/qrc_fred.cpp new file mode 100644 index 0000000..775239d --- /dev/null +++ b/tags/fred-0.1.0alpha1/qrc_fred.cpp @@ -0,0 +1,720 @@ +/**************************************************************************** +** Resource object code +** +** Created: Sun Aug 7 19:55:33 2011 +** by: The Resource Compiler for Qt version 4.7.2 +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include + +static const unsigned char qt_resource_data[] = { + // /storage/local/projects/fred/trunk/resources/fred.png + 0x0,0x0,0x28,0x15, + 0x89, + 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, + 0x0,0x0,0x80,0x0,0x0,0x0,0x80,0x8,0x6,0x0,0x0,0x0,0xc3,0x3e,0x61,0xcb, + 0x0,0x0,0x0,0x1,0x73,0x52,0x47,0x42,0x0,0xae,0xce,0x1c,0xe9,0x0,0x0,0x20, + 0x0,0x49,0x44,0x41,0x54,0x78,0xda,0xed,0x9d,0x77,0x7c,0x54,0x55,0xda,0xc7,0xbf, + 0xf7,0x4e,0xcf,0x24,0x99,0x74,0x52,0x9,0x9,0x81,0x10,0x40,0x8a,0x14,0x41,0xfa, + 0x2e,0x88,0xbd,0x23,0xca,0x5a,0x0,0x57,0x50,0x77,0x45,0x76,0x55,0x58,0x5,0x59, + 0x5c,0xdb,0xca,0xea,0xda,0x5e,0xdd,0x5d,0xd7,0xae,0xe8,0x5a,0xd6,0xb2,0x8a,0x5, + 0xd7,0x8a,0x60,0x1,0x41,0xe9,0x48,0x12,0x42,0x42,0x2,0xe9,0x65,0x92,0xe9,0xf7, + 0x9e,0xf7,0x8f,0x99,0x4c,0x66,0x92,0x49,0x32,0x1,0x12,0xca,0xe6,0x99,0xcf,0xf9, + 0xdc,0xb9,0xe7,0xde,0xb9,0x73,0xcf,0x79,0x7e,0xe7,0x69,0xa7,0x41,0x2f,0xf5,0x52, + 0x2f,0xfd,0xef,0x92,0xf4,0x3f,0x52,0xce,0x81,0xc0,0xc5,0xc0,0x14,0x20,0x12,0x88, + 0xf0,0x25,0x80,0x3d,0xc0,0xe,0x60,0x27,0xb0,0x1d,0xd8,0x6,0xa8,0xbd,0xd0,0x38, + 0xf1,0x49,0x3,0x2c,0xf2,0x31,0x57,0x74,0x21,0x95,0x3,0xcf,0x0,0x17,0x4,0x80, + 0xa4,0x57,0x2,0x9c,0x60,0x34,0xe,0xf8,0x3b,0x30,0x1c,0x40,0xa3,0xd1,0x90,0x9a, + 0x9a,0x4a,0x66,0x66,0xa6,0x3f,0xe9,0xf5,0x6,0x4a,0x4a,0x8a,0x29,0x2a,0x2a,0x62, + 0xff,0xfe,0xfd,0x94,0x94,0x94,0xe0,0x74,0x3a,0x5b,0x3f,0xc7,0xe,0x3c,0xd,0xfc, + 0x11,0xa8,0xed,0x5,0xc0,0xf1,0x4f,0x71,0xc0,0xfd,0xc0,0x75,0x80,0x34,0x72,0xe4, + 0x48,0xe6,0xcd,0x9b,0xcf,0x69,0xa7,0x9d,0x86,0x56,0xab,0xed,0xf0,0x87,0x42,0x8, + 0xf6,0xee,0xdd,0xcb,0x4b,0x2f,0xbd,0xc8,0x47,0x1f,0x7d,0x84,0xaa,0x6,0x69,0x81, + 0x6a,0xe0,0x4e,0xe0,0x29,0x40,0xe9,0x5,0xc0,0xf1,0x49,0x16,0xe0,0x7b,0x60,0xe0, + 0xf8,0xf1,0xe3,0xf9,0xd5,0xaf,0xae,0x64,0xd8,0xb0,0x61,0x87,0xf5,0xa0,0x83,0x7, + 0xf,0xf2,0xea,0xab,0xaf,0xb0,0x66,0xcd,0x1a,0xdc,0x6e,0x77,0xe0,0xa5,0x6d,0x3e, + 0xd5,0xb0,0xaf,0x17,0x0,0xc7,0x17,0xc9,0xc0,0xfb,0x5a,0xad,0xf6,0xac,0xe5,0xcb, + 0xef,0x64,0xec,0xd8,0xb1,0x47,0xe5,0xa1,0x87,0xe,0x1d,0x62,0xe9,0xd2,0x25,0x54, + 0x56,0x56,0x6,0x66,0x17,0x0,0x13,0x81,0x43,0xbd,0x0,0x38,0x7e,0xe8,0xcf,0x1a, + 0x8d,0x66,0xe9,0x2d,0xb7,0xde,0xca,0x98,0xd1,0x63,0x8e,0xea,0x83,0xf,0x1d,0x3a, + 0xc4,0x8a,0x15,0x77,0x52,0x5b,0x5b,0xdb,0x5a,0x12,0x4c,0x39,0x19,0xec,0x82,0x93, + 0x1,0x0,0x23,0x65,0x59,0xde,0xbc,0xf0,0xfa,0xeb,0x19,0x3b,0x66,0x6c,0xb7,0xfc, + 0x41,0x59,0x59,0x19,0xf,0x3c,0xf0,0x67,0x1a,0x1a,0x1a,0x2,0xb3,0xbf,0x1,0x66, + 0x0,0x4d,0x27,0xba,0xab,0x74,0xa2,0xd3,0xdf,0x27,0x4f,0x99,0x32,0x68,0xea,0x94, + 0xa9,0xb8,0xdd,0xee,0x6e,0x49,0x46,0xa3,0x91,0xf8,0x84,0x4,0x36,0x6f,0xde,0x1c, + 0xf8,0xbf,0x19,0x40,0x1f,0xe0,0x3f,0x27,0x72,0xe5,0x69,0x4f,0x70,0xe6,0xe7,0x49, + 0x92,0x74,0xc1,0xd8,0xb1,0x63,0x69,0x6c,0x6c,0xec,0xd6,0x3f,0xca,0xce,0xca,0x26, + 0x36,0x36,0xb6,0xb5,0x2a,0xb8,0x16,0x78,0x19,0xf8,0xa2,0x17,0x0,0xc7,0x86,0x2e, + 0x89,0x8e,0x8e,0xc6,0x68,0x34,0xd2,0x64,0xeb,0x7e,0x49,0x9c,0xd1,0xb7,0x6f,0x6b, + 0x0,0xe0,0x73,0xd,0x87,0x1,0x8e,0x5e,0x0,0xf4,0x3c,0x5d,0x60,0xb1,0x58,0xba, + 0xbd,0xf5,0x37,0x53,0x64,0x64,0x64,0xa8,0xec,0x1,0xc0,0x12,0xe0,0x4f,0xbd,0x0, + 0xe8,0x59,0x4a,0x0,0x46,0xd9,0xed,0x76,0x9a,0x1a,0x7b,0xc6,0xe,0xeb,0x0,0x68, + 0x73,0x7b,0x1,0xd0,0xf3,0x94,0xd,0x48,0x75,0x75,0x75,0x58,0xad,0x56,0x24,0xa9, + 0xfb,0x1d,0x9a,0xaa,0xe0,0x78,0x40,0x20,0x65,0x1,0xa3,0x80,0x1f,0x7a,0x1,0xd0, + 0x73,0x94,0x9,0xe0,0x76,0xbb,0xd9,0x9b,0xbf,0x97,0xb4,0xd4,0xb4,0x6e,0xfd,0x33, + 0x87,0xc3,0xc1,0xc1,0x83,0x7,0x3b,0xba,0xe5,0x9c,0x5e,0x0,0xf4,0x2c,0xf5,0x6d, + 0xfe,0xb2,0x67,0xf7,0x6e,0x22,0xcd,0x91,0x68,0x34,0xdd,0xe7,0xd5,0xee,0xde,0xbd, + 0xb,0x21,0x44,0x47,0xb7,0xc,0xec,0x55,0x1,0xc7,0x8,0x0,0x56,0xab,0x95,0x2d, + 0x5b,0x36,0x93,0x3b,0x68,0x10,0xb2,0x2c,0x1f,0xf5,0x3f,0x2a,0x29,0x2e,0xa6,0xb4, + 0xb4,0xb4,0xb3,0xdb,0xb2,0x7a,0x1,0x70,0x8c,0x0,0x0,0x50,0x5f,0x5f,0xcf,0xae, + 0x9d,0x3b,0xe9,0x9b,0x99,0x79,0x54,0xed,0x81,0xca,0x8a,0xa,0xca,0xcb,0xcb,0xc3, + 0xb9,0xb5,0x17,0x0,0x3d,0x4c,0x96,0xd6,0x19,0x36,0x9b,0x8d,0x21,0x83,0x7,0x53, + 0x53,0x5b,0x4b,0x41,0x41,0x41,0xd8,0xf,0x3a,0xfb,0xec,0xb3,0x99,0x33,0x67,0xe, + 0x91,0x91,0x91,0x44,0x45,0x45,0xe1,0x72,0xb9,0x78,0xf3,0xcd,0x37,0x79,0xf4,0x91, + 0x47,0x5a,0x77,0x4,0x75,0x44,0xc9,0x80,0xf1,0x44,0x8d,0x7,0x9c,0x88,0xf4,0x31, + 0x1,0x23,0x79,0xa6,0x4e,0x9d,0x2a,0xf2,0xf3,0xf3,0x45,0x33,0x15,0x15,0x15,0x89, + 0x49,0x93,0x26,0x89,0xa4,0xa4,0xa4,0xe,0xd3,0x93,0x4f,0x3e,0x29,0xda,0xa3,0x75, + 0xeb,0xd6,0x89,0xb8,0xb8,0xb8,0xae,0x8c,0x26,0x1a,0xd4,0xcb,0x96,0x9e,0xa3,0x35, + 0xcd,0x15,0x9f,0x9a,0x9a,0x2a,0x2a,0x2a,0x2a,0xda,0x30,0xf0,0x87,0x1f,0x7e,0x10, + 0x3a,0x9d,0x4e,0xe8,0xf5,0x7a,0x61,0x30,0x18,0x84,0xc9,0x64,0x12,0x11,0x11,0x11, + 0xc2,0x6c,0x36,0xb,0xb3,0xd9,0x2c,0xae,0xbe,0xfa,0x6a,0xd1,0x19,0xbd,0xfe,0xfa, + 0xeb,0x5d,0x1,0xc0,0x59,0xbd,0x6c,0xe9,0x39,0x7a,0xa7,0xb9,0xe2,0x1f,0x7a,0xe8, + 0xa1,0x76,0x19,0xb8,0x78,0xf1,0xe2,0x76,0x19,0xf6,0xde,0x7b,0xef,0xb5,0xb9,0x5f, + 0x51,0x94,0x36,0x79,0x93,0x27,0x4f,0xe,0x17,0x0,0xb,0x7b,0xd9,0xd2,0x73,0xf4, + 0x66,0x73,0xc5,0x6f,0xdd,0xba,0xd5,0xcf,0xac,0xda,0xda,0x5a,0x61,0xb7,0xdb,0xfd, + 0xe7,0x1b,0x37,0x6e,0x6c,0x97,0x61,0xe5,0xe5,0xe5,0xfe,0xfb,0x76,0xef,0xde,0x2d, + 0x16,0x2e,0x5c,0x28,0x4e,0x3f,0xfd,0x74,0x71,0xc3,0xd,0x37,0x88,0x43,0x87,0xe, + 0xf9,0xaf,0xad,0x5d,0xbb,0x36,0x5c,0x0,0xdc,0xd1,0xcb,0x96,0x9e,0xa3,0x7f,0x1, + 0x22,0x2a,0x2a,0x4a,0xa8,0xaa,0x2a,0x6a,0x6b,0x6b,0xc5,0x8d,0x37,0xde,0x28,0x56, + 0xae,0xbc,0x4b,0x4c,0x9f,0x3e,0x5d,0x14,0x14,0x14,0xf8,0x5b,0x74,0x28,0x3d,0x9e, + 0x95,0x95,0x15,0xd4,0xca,0x57,0xac,0x58,0x21,0xde,0x7d,0xf7,0x3f,0xe2,0xdd,0x77, + 0xff,0x23,0x46,0x8f,0x1e,0x2d,0x16,0x2e,0x5c,0xe8,0xbf,0xe6,0x70,0x38,0x44,0x44, + 0x44,0x44,0x38,0x0,0x78,0xf0,0x44,0xab,0x44,0xf9,0x44,0x47,0x81,0xc5,0x62,0x41, + 0x92,0x24,0x1e,0x7f,0xfc,0x71,0xe6,0xcf,0xbf,0x96,0xa9,0x53,0xa7,0x32,0x79,0xf2, + 0x14,0x6e,0xba,0xe9,0x26,0x6f,0x1,0x65,0x99,0xd4,0xd4,0xd4,0x36,0xbf,0x1b,0x3d, + 0x7a,0x74,0x8b,0x9f,0x5f,0x52,0x42,0xe1,0xbe,0x7d,0x6c,0xdf,0xbe,0x9d,0xed,0xdb, + 0xb7,0x93,0xd9,0xaf,0x1f,0x2f,0xbc,0xf0,0x2,0xd5,0xd5,0xd5,0x0,0x18,0xc,0x86, + 0x70,0xc7,0x17,0xc6,0xf6,0xba,0x81,0x3d,0x4c,0x3a,0x9d,0xe,0x80,0xa8,0xa8,0x28, + 0xb6,0x6f,0xdf,0x8e,0xd5,0x6a,0x45,0xa3,0xd1,0xf0,0xd1,0x47,0x1f,0x51,0x5c,0x5c, + 0x4c,0xdf,0xbe,0x7d,0x31,0x18,0xc,0x6d,0x7e,0x57,0x53,0x53,0xe3,0xff,0xde,0xd4, + 0xd4,0x44,0x7e,0x7e,0x3e,0x1e,0xb7,0x7,0x80,0xc2,0xc2,0x42,0x1c,0xe,0x7,0xd5, + 0xd5,0xd5,0xc4,0xc7,0xc7,0x3,0xed,0xf6,0x4,0xb6,0xa6,0xb8,0x5e,0x0,0xf4,0x30, + 0x95,0x96,0x96,0xa2,0xaa,0x2a,0x11,0x11,0x11,0x6c,0xf8,0x66,0x3,0x8,0x28,0x2f, + 0x2f,0x47,0x55,0x55,0x5e,0x7c,0xf1,0x45,0x96,0x2f,0x5f,0xee,0x6f,0xc9,0x81,0xf4, + 0xc3,0xf,0xc1,0x61,0xfb,0xed,0xdb,0xb6,0x51,0x5f,0x5f,0x8f,0x10,0x82,0xfd,0x45, + 0x45,0x0,0x44,0x47,0x47,0xfb,0xaf,0x1b,0x8d,0xc6,0x5e,0x0,0x1c,0x8f,0xe4,0x72, + 0xb9,0x28,0x29,0x29,0x61,0xe8,0xd0,0xa1,0x2c,0x5d,0xba,0x94,0xf8,0x84,0x4,0xca, + 0x7c,0x61,0xdb,0xe2,0xe2,0x62,0x7e,0xf8,0xec,0x1d,0xce,0xcd,0xb2,0x31,0x7c,0x52, + 0x5f,0xfa,0x58,0xf4,0xd4,0x35,0x79,0x28,0xaa,0x71,0xb1,0x6e,0x6f,0x13,0x7b,0xb6, + 0xff,0x48,0xee,0xd0,0x11,0x48,0x92,0x44,0x63,0x63,0x23,0xbb,0x76,0xee,0xc,0x7a, + 0x76,0x20,0x0,0xc2,0x8c,0x6,0xf6,0xaa,0x80,0x63,0x41,0x3f,0xff,0xfc,0x33,0x33, + 0x66,0xcc,0xe0,0x8c,0x33,0xce,0xe0,0xf5,0xd7,0x5f,0x7,0x20,0x23,0xd6,0xc0,0x39, + 0x96,0x9f,0xf0,0x7c,0xf1,0x35,0x77,0x5e,0xe2,0x22,0x32,0x21,0xa,0x63,0x84,0x84, + 0x5b,0x31,0xe3,0x68,0xd2,0x70,0x51,0xb1,0x42,0xf9,0xea,0x2b,0x51,0xb2,0x47,0x92, + 0x30,0xfe,0x5a,0x8c,0x6,0x3,0x8e,0x80,0x99,0x41,0xc9,0xc9,0xc9,0x44,0x44,0xb4, + 0xcc,0xc,0x2b,0x2c,0x2c,0x3c,0x29,0x1,0x70,0xc2,0x7b,0x1,0x80,0xb8,0xec,0xb2, + 0xcb,0x84,0x10,0x42,0x94,0x96,0x96,0x8a,0x98,0x98,0x18,0x31,0x29,0x27,0x4a,0x7c, + 0xf2,0xbb,0x1,0xa2,0xea,0x6f,0x51,0xa2,0xf6,0xb5,0x71,0x42,0x2d,0x78,0x5a,0xa8, + 0x55,0x1b,0x85,0x5a,0xed,0x4d,0x95,0x1b,0xfe,0x2e,0x7e,0x7e,0x6e,0x8e,0x50,0xbe, + 0xb9,0x58,0xd4,0xbf,0x9a,0x28,0x76,0x3d,0x3c,0x5c,0x7c,0xb9,0x6c,0xb4,0xb8,0x6c, + 0x74,0xbc,0x30,0xe9,0x65,0x1,0x4,0x45,0x8,0x37,0x6d,0xda,0x14,0xae,0x1b,0x68, + 0x3d,0xd1,0x2a,0x51,0x3a,0xc1,0x1,0x30,0xbb,0xd9,0xd2,0xdf,0xb3,0x67,0xf,0x39, + 0x39,0x39,0xec,0x7a,0xe7,0x7e,0x1a,0x7f,0x5c,0xcd,0xf0,0xa1,0x95,0xd0,0xff,0x26, + 0xe4,0xe8,0xfe,0x68,0xc,0xc6,0x56,0x25,0x15,0x38,0xea,0x6b,0x30,0xc6,0xc4,0x83, + 0xa7,0xe,0xa9,0xe4,0x1f,0xb8,0x2a,0x7f,0xa0,0xa4,0x2c,0x85,0xe2,0xfd,0x66,0xe4, + 0xc8,0x64,0x6,0x4c,0x9d,0x47,0x6c,0xde,0x14,0x4c,0x9,0x99,0x5c,0x75,0xd5,0x55, + 0xbc,0xfc,0xf2,0xcb,0x5d,0x91,0xaa,0x27,0xcc,0xf4,0xb1,0x93,0x42,0x5,0xa8,0xaa, + 0xca,0xfc,0xf9,0xf3,0xf9,0xe7,0x4d,0x13,0x61,0xff,0x7b,0x8c,0x1a,0x59,0x8a,0x34, + 0xf0,0xf7,0xa0,0x8b,0x6,0x51,0x9,0xce,0x56,0x70,0x97,0xc0,0x68,0x2,0x9c,0x36, + 0x90,0x40,0xa4,0xcd,0x41,0x4f,0x1d,0xfd,0x23,0xf7,0xd0,0x3f,0x17,0x6c,0xb6,0x7d, + 0xd4,0x15,0xec,0xa1,0x70,0x53,0x3a,0xd5,0xb5,0xa,0xf5,0xdb,0xa,0xbb,0xf2,0x3a, + 0x16,0xa0,0xa6,0x17,0x0,0x3d,0x4c,0xe3,0x4c,0x7b,0xb1,0xfd,0xbc,0x8f,0x91,0x43, + 0xf,0x21,0x32,0xe6,0x80,0xda,0x0,0xae,0x86,0x36,0x8c,0x6f,0x73,0x94,0x0,0x4f, + 0x35,0xb8,0xb,0xbd,0xb5,0x21,0x41,0x84,0xc5,0x49,0x44,0xcc,0x41,0x52,0xa5,0x83, + 0x78,0x3c,0x1a,0xfe,0x20,0x67,0x50,0x67,0x53,0x59,0xb7,0xb7,0x21,0x9c,0x57,0x89, + 0xe9,0x5,0x40,0xf,0xd3,0xe4,0x1,0xd1,0x9c,0x37,0xca,0xc4,0x88,0x53,0x8a,0xc0, + 0x10,0xf,0xc2,0x9,0xce,0x92,0x60,0x26,0xb7,0xf7,0xdd,0x55,0x8c,0xd4,0xb8,0x9, + 0x64,0x77,0x4b,0x9e,0x4,0x4d,0x56,0x23,0x46,0xb3,0xb,0xad,0x51,0x61,0xf0,0xa8, + 0x4a,0x2e,0xda,0x13,0x1b,0x2e,0x0,0x72,0x81,0xc2,0x5e,0x0,0xf4,0x10,0x69,0x64, + 0x89,0x65,0xe7,0x26,0x73,0xda,0x98,0x42,0x24,0xad,0x0,0xb5,0xa,0xc9,0xba,0x1, + 0x61,0x4c,0x5,0x49,0x13,0xc4,0xd4,0xa0,0x84,0x82,0xe4,0x2c,0x2,0x4f,0xb9,0x77, + 0x7e,0x94,0x2f,0xdf,0xd1,0xa4,0x27,0xff,0x47,0x6f,0xe4,0x30,0xf7,0xb4,0x3,0x68, + 0xb4,0x2a,0xe,0xbb,0x9e,0x1d,0x7,0x9c,0xe1,0xbe,0xd2,0x69,0xc0,0x87,0xbd,0x0, + 0xe8,0x21,0x52,0x54,0x81,0x24,0x9,0xf4,0x11,0x9e,0x0,0x91,0x5e,0x82,0xd4,0x54, + 0xa,0xda,0x48,0xd0,0x98,0x10,0x1a,0x1d,0x48,0x12,0x48,0x20,0x9,0x17,0xa8,0x4d, + 0x20,0x6c,0x20,0xa9,0x7e,0xe6,0xb,0x21,0x51,0xba,0x37,0x81,0x8a,0x62,0xb,0xd9, + 0x23,0xe,0x11,0x93,0xd2,0xe8,0xd,0x94,0x4b,0x50,0x56,0x66,0x64,0xf7,0xc1,0xb0, + 0xe7,0x1e,0x8c,0x3d,0x91,0xea,0xef,0xa4,0x50,0x1,0x6e,0x8f,0xa0,0xb4,0x24,0x81, + 0xb8,0x44,0x2b,0xa6,0x28,0xa7,0x17,0x4,0xb2,0xa,0x52,0x3,0x88,0x6,0x24,0xa5, + 0x55,0xeb,0x97,0x83,0xcf,0xad,0x35,0x26,0xa,0x36,0xa7,0x12,0xd3,0xa7,0x91,0x11, + 0x33,0xb,0x91,0x75,0x6a,0x90,0xba,0xa8,0x2b,0x8f,0x60,0x6f,0x45,0x55,0xb8,0xaf, + 0x33,0xd,0x88,0xc7,0xbb,0xa8,0x44,0x2f,0x0,0x7a,0xe2,0xdd,0xdf,0xdf,0xda,0x40, + 0x46,0xba,0x89,0xf2,0xb2,0x58,0x52,0xb3,0xaa,0x49,0xee,0x57,0xd3,0xbe,0xe8,0xf, + 0x60,0x6c,0x6d,0x45,0x24,0x65,0x7b,0x12,0x50,0x55,0x89,0x1,0xe3,0x4a,0x31,0xc7, + 0x3b,0xda,0xdc,0x57,0xb0,0x39,0x95,0x6f,0x7e,0xb6,0x53,0x61,0x75,0x87,0xfb,0x5e, + 0x46,0x60,0x1,0xde,0x95,0x4a,0x7a,0x1,0xd0,0x8d,0xd4,0xa7,0xf9,0xcb,0xb,0x1b, + 0xaa,0x98,0x7a,0xca,0x10,0x86,0xf,0xb6,0x51,0x5f,0x63,0xa6,0xf2,0xa0,0x85,0x94, + 0xec,0x1a,0xa2,0x13,0x9a,0x90,0xb5,0x2,0x81,0x84,0xaa,0x48,0xd8,0x9b,0xf4,0x38, + 0x1a,0xd,0xd8,0xad,0x6,0xea,0xca,0xcd,0x98,0x63,0x1c,0x64,0x8e,0x2c,0x27,0x32, + 0xc1,0xde,0x6,0x1c,0x55,0xc5,0xd1,0x14,0x6d,0xcd,0xc6,0x1d,0x39,0x8c,0x2d,0x58, + 0x81,0xb7,0xbb,0xf2,0x6e,0x37,0x2,0x7f,0x1,0x3c,0xbd,0x0,0xe8,0x3e,0xf2,0xf7, + 0xf1,0xda,0x5c,0x2a,0x9f,0x3a,0x4f,0x27,0x43,0xf5,0x10,0xab,0xff,0x92,0xec,0xbc, + 0x3,0x94,0x17,0xc5,0x72,0x70,0x5f,0x1c,0x8a,0x47,0x46,0x92,0x5,0x1a,0xad,0x8a, + 0x31,0xca,0x45,0x44,0xb4,0x93,0x98,0xd4,0x46,0xd2,0x87,0x57,0xa2,0x33,0x79,0xda, + 0xb4,0xf8,0xca,0x42,0xb,0x45,0x3f,0x66,0xe1,0x89,0xce,0x43,0x1d,0x31,0x1b,0xa2, + 0x92,0xb9,0x7e,0x90,0x9d,0x2f,0xbf,0x5a,0x47,0x55,0x55,0xd8,0x6a,0x20,0x1d,0xb8, + 0x1d,0xb8,0xbb,0x17,0x0,0xdd,0x47,0x29,0x81,0x27,0x49,0x7d,0x92,0x11,0x23,0xce, + 0xa4,0x69,0xab,0x8b,0xaa,0x8a,0xaf,0xc8,0x1e,0xb3,0xbf,0x73,0x35,0x10,0x90,0x54, + 0x55,0x22,0x7f,0xfd,0x40,0x6c,0xae,0x91,0x88,0xd3,0xe7,0x22,0xf4,0x31,0x7e,0x8f, + 0x31,0xc2,0x64,0xe2,0xb7,0x37,0x2d,0x62,0xe5,0x1f,0x57,0x74,0xe5,0xfd,0x56,0xe0, + 0x1d,0xb8,0xfa,0xfd,0xf1,0x5c,0x89,0x27,0xea,0x80,0x90,0x18,0xc0,0x14,0x54,0x10, + 0x8d,0xcc,0xe0,0xc1,0x83,0x19,0x7c,0xf5,0xdf,0xb1,0xda,0x27,0x50,0xb8,0xad,0x3f, + 0x42,0x92,0xbc,0x56,0xbe,0xc6,0x7,0xf5,0x76,0x92,0xc3,0xae,0x67,0xeb,0x9a,0xe1, + 0x68,0x53,0x7e,0xcd,0xa0,0xb9,0xcf,0x73,0xca,0xd8,0xa9,0xa4,0xa4,0xa6,0xf8,0x3c, + 0x7,0x6f,0x9a,0x71,0xc6,0x4c,0x46,0x8e,0x3c,0xb5,0xab,0x8d,0x6b,0x35,0x60,0xee, + 0x5,0xc0,0xd1,0xa7,0x49,0xad,0x33,0x6,0xd,0x1c,0x88,0x5e,0xaf,0x43,0x20,0x91, + 0x75,0xc5,0x53,0xa8,0x31,0x73,0xf9,0xe9,0xbf,0xc3,0x71,0xd8,0xf5,0x5e,0x56,0x68, + 0xda,0x26,0x21,0x49,0x14,0xff,0x98,0xc1,0xf6,0x8f,0xc6,0xd1,0x67,0xc6,0x83,0x24, + 0x4f,0xf9,0xd,0xaa,0xaa,0x22,0x84,0x4a,0x9f,0xc4,0x44,0x92,0x92,0x12,0x91,0x24, + 0xc9,0x9f,0x16,0x5c,0x7f,0x7d,0x57,0xdf,0x33,0x7,0x78,0xa4,0x57,0x5,0x1c,0x7d, + 0xba,0xa0,0x75,0x86,0xcb,0xed,0xc6,0xa3,0xb4,0xac,0xed,0x97,0x34,0xed,0x77,0x98, + 0x32,0x4e,0x63,0xd7,0x17,0xab,0xd0,0x19,0xab,0x49,0xce,0xf1,0xba,0x77,0x8a,0x4b, + 0x83,0xa3,0xc9,0x48,0xdd,0xc1,0x14,0x1c,0x35,0x5a,0x62,0x46,0x5c,0x40,0xce,0x82, + 0x1b,0x90,0xb5,0x86,0xa0,0xdf,0x3,0x24,0x25,0x26,0xe1,0x76,0xbb,0xa9,0xaf,0xf7, + 0x46,0x0,0x47,0x8c,0x18,0xc9,0xc0,0xdc,0x5c,0x7e,0xde,0xb3,0xa7,0x2b,0xef,0xfa, + 0x6b,0xbc,0x43,0xd8,0xdf,0x39,0x1e,0x2b,0xf2,0x44,0xec,0xd,0x94,0x81,0xb2,0x40, + 0x2f,0x0,0xe0,0xb5,0xd7,0x5f,0xe7,0x8c,0x33,0x66,0x86,0xfc,0x81,0xbd,0x7c,0x2f, + 0xd,0xdb,0xdf,0x46,0xe0,0x41,0xa3,0x8f,0x41,0x13,0x99,0x42,0x44,0xda,0x70,0x8c, + 0x89,0x59,0x5e,0x11,0xdf,0x11,0x9,0x41,0xc9,0x81,0x3,0xd8,0xec,0x76,0x0,0xd6, + 0xac,0x79,0x9f,0xbb,0xef,0xba,0xab,0xab,0xef,0x5c,0x85,0x77,0x15,0x91,0x83,0xbd, + 0x0,0x38,0x72,0xfa,0x43,0x6b,0x1f,0xfb,0xbc,0xf3,0xce,0xe7,0xf9,0xe7,0x5f,0xe8, + 0xb6,0x3f,0xb4,0xd9,0xed,0x94,0x95,0x95,0x79,0x25,0x8d,0xcb,0xc5,0xf9,0xe7,0x9d, + 0x13,0x6a,0xa9,0x98,0xce,0xe8,0x63,0xbc,0x13,0x47,0xc4,0xf1,0x54,0x99,0x27,0xda, + 0x2a,0x61,0x23,0x81,0x57,0x2,0xdf,0x3b,0x21,0x21,0x81,0x37,0xff,0xfd,0x6f,0xc, + 0x7a,0x3,0x42,0x88,0x6e,0x49,0x5a,0xad,0x96,0xc6,0xa6,0x26,0xff,0xf7,0xa6,0xa6, + 0x26,0xb6,0x6c,0xd9,0x7c,0x38,0xf6,0x40,0xd,0xf0,0x5d,0xaf,0x11,0x78,0x78,0x64, + 0xf2,0x59,0xd5,0xba,0xc0,0xcc,0x3f,0xdd,0x7d,0xf,0xe6,0xc8,0x28,0x3c,0xaa,0xda, + 0xad,0x49,0xab,0xd7,0xfb,0x3d,0x82,0x4b,0x2e,0x9d,0xd5,0xe9,0xda,0xc3,0xed,0xd0, + 0x3,0xc0,0x90,0x5e,0x0,0x1c,0x1e,0xad,0x2,0xf2,0x82,0x5c,0x81,0xc9,0x93,0xb9, + 0xe0,0xc2,0xb,0x51,0x55,0xa5,0xdb,0x93,0x56,0x23,0xfb,0xbd,0xc2,0xa4,0xa4,0x44, + 0x7e,0xf1,0xcb,0x5f,0x1e,0x4e,0x19,0x8c,0x3e,0x10,0x1b,0x7a,0x55,0x40,0xd7,0xe8, + 0x4c,0xe0,0xb1,0xd6,0x99,0x2f,0xbe,0xf8,0x12,0x71,0xb1,0xb1,0x20,0x44,0xb7,0x27, + 0x9b,0xc3,0x81,0xa2,0x28,0x7e,0x97,0x30,0x36,0x36,0x96,0xf7,0xde,0x3b,0xac,0x35, + 0x22,0x93,0x7d,0xd2,0x6c,0x6d,0xaf,0x1b,0x18,0x1e,0x25,0x0,0xcf,0xb6,0xce,0x4c, + 0x4b,0x4f,0x27,0x2d,0x2d,0x1d,0x55,0xe9,0x19,0x9b,0x4a,0xf5,0x28,0x48,0x1,0x36, + 0xf3,0x88,0x11,0x23,0x31,0x9b,0xcd,0x34,0x35,0x1d,0xd6,0xa,0x65,0xbf,0xc7,0x3b, + 0x66,0xe0,0xd3,0x5e,0x15,0xd0,0x39,0x3d,0x4d,0xab,0xb0,0x2f,0xc0,0x9c,0x2b,0xe6, + 0xe0,0x70,0x3a,0x51,0x84,0xda,0xed,0xc9,0xed,0x71,0x7,0xb5,0x7e,0x49,0x92,0xd0, + 0x6a,0xb5,0x8c,0x39,0xfc,0xb5,0x89,0x25,0xe0,0x5,0x8e,0x83,0x61,0xe4,0xc7,0x3b, + 0x0,0x16,0x86,0xa,0xfa,0x44,0x44,0x98,0xb9,0xf4,0xb2,0xd9,0xb8,0xdd,0x6e,0x3c, + 0x1e,0xf,0xaa,0xaa,0x76,0x6b,0xb2,0x39,0xec,0x41,0x61,0xe1,0xe6,0x34,0x6e,0xfc, + 0xf8,0x23,0x29,0x5b,0x1a,0xf0,0x8f,0x5e,0x15,0xd0,0x3e,0xe5,0x2,0x7f,0xd,0x75, + 0x61,0xda,0xb4,0x69,0xe8,0xf5,0x5e,0x67,0xc0,0xd6,0xd4,0x48,0x44,0x84,0xb9,0xdb, + 0xd6,0x9,0x74,0xb9,0x5d,0x78,0xdc,0xee,0x90,0xf1,0xa2,0xf1,0xa7,0x9f,0x7e,0xa4, + 0x8f,0x9f,0x5,0x5c,0xe3,0x93,0x6,0xbd,0x12,0x20,0x80,0xf4,0x3e,0x7f,0x3f,0xe4, + 0xa6,0x4d,0x33,0xce,0x38,0xc3,0x2f,0x8a,0x5,0x60,0x77,0xd8,0x51,0x85,0xca,0xd1, + 0xfe,0xb8,0x3c,0x6e,0x5c,0x2e,0x57,0x90,0xe8,0xf,0x4c,0x99,0x99,0x99,0xa4,0x84, + 0x98,0x79,0xdc,0x45,0x7a,0x9c,0x63,0xb8,0xc0,0xd4,0xf1,0xa,0x80,0xbb,0x81,0x90, + 0x5d,0x6f,0x3a,0x9d,0x8e,0xd3,0x4f,0x9f,0x80,0x14,0xf0,0x11,0xaa,0xc0,0xe9,0x70, + 0xa2,0x2a,0x2,0x71,0x94,0x92,0xc7,0xad,0xe0,0x76,0xba,0x82,0xfe,0x27,0xd4,0x27, + 0x27,0x27,0xe7,0x48,0xcb,0x1a,0x5,0x3c,0xdf,0xb,0x80,0x16,0xfa,0x5,0x70,0x5b, + 0xbb,0x7a,0x61,0xd0,0x20,0x8c,0x46,0x63,0x9b,0xd6,0x28,0x84,0xc0,0xe5,0x74,0xa2, + 0x78,0x3c,0xa8,0x42,0x1c,0x76,0x52,0x54,0xd5,0x6b,0x5b,0xb8,0xdd,0xed,0xb6,0xfc, + 0xc0,0x34,0x6c,0xd8,0xf0,0xa3,0x51,0xe6,0xc9,0xc0,0x65,0xbd,0x0,0xf0,0x4e,0xaf, + 0x7e,0x91,0xe,0xfa,0x28,0x86,0xf,0x1b,0x1e,0xca,0x1e,0xf3,0x27,0x45,0x55,0xf0, + 0xb8,0x5d,0xa8,0x8a,0x7,0x84,0x1a,0x76,0x12,0xaa,0x82,0xe2,0x71,0xa3,0x78,0xdc, + 0x8,0xa1,0x76,0xf8,0x1f,0x81,0x69,0xc1,0x82,0x5,0x9c,0x75,0xd6,0xd9,0x47,0xa3, + 0xec,0xf,0x1c,0x8b,0x0,0xd1,0xf1,0x6,0x80,0xa7,0x7c,0xd6,0x71,0xbb,0x34,0x7c, + 0xc4,0x88,0xb0,0x38,0xa3,0xa,0x81,0x47,0x51,0xfc,0x49,0x51,0x14,0x14,0x55,0xd, + 0x4a,0x41,0xd7,0x55,0xd5,0xdb,0x4b,0x13,0x2e,0xe7,0x7d,0x49,0xd6,0x68,0xb8,0xe7, + 0xbe,0xfb,0x38,0xf5,0xd4,0x53,0x8f,0xb4,0xec,0xfd,0x80,0xc5,0x3d,0x5d,0xe1,0xc7, + 0x53,0x6f,0xe0,0x35,0x9d,0xe9,0x42,0x93,0xc9,0xc4,0xda,0xff,0x7e,0x4a,0x6c,0xec, + 0xf1,0x37,0xb,0xbb,0xae,0xae,0x8e,0x39,0x97,0xcf,0xa6,0xb8,0xb8,0xd8,0x9f,0xd7, + 0xbf,0x7f,0x7f,0xca,0x2b,0x2a,0x68,0xb4,0x86,0x3d,0x69,0xb8,0x1,0xef,0xfe,0x3, + 0x15,0xff,0x6b,0x12,0x20,0x1d,0x78,0xb4,0xb3,0x9b,0xae,0xba,0xea,0x6a,0xe2,0x62, + 0xe3,0x3a,0x35,0xcc,0xba,0xfa,0x79,0xe7,0x9d,0x7f,0x1f,0xf1,0x33,0x62,0x63,0x62, + 0xb9,0xfd,0x8e,0x65,0x41,0xef,0x5b,0x58,0x58,0xc8,0xac,0x4b,0x67,0x31,0x65,0xea, + 0xd4,0x70,0xeb,0x21,0x9a,0x1e,0xde,0x77,0xe0,0x78,0x91,0x0,0x6b,0xf1,0xee,0xc0, + 0xd5,0xc6,0xe2,0x6f,0xde,0xb8,0x31,0x2a,0x2a,0x8a,0x4f,0xfe,0xfb,0x59,0xd0,0xaa, + 0x1d,0x1d,0x22,0x5b,0x96,0x31,0x1a,0xd,0xe8,0x74,0x3a,0x34,0xb2,0x8c,0x24,0x6b, + 0xd0,0x68,0x64,0x24,0x49,0x42,0x51,0x54,0x84,0xaa,0xa2,0xa8,0xa,0xcf,0x3e,0xf7, + 0x34,0xcb,0x6e,0x5f,0x86,0x24,0x49,0xec,0xdc,0xb5,0xe7,0x88,0xa,0x21,0x84,0xe0, + 0xfc,0xf3,0xce,0xa5,0xa0,0x20,0x3f,0x28,0xff,0xa6,0x45,0x37,0x53,0x53,0x53,0xc3, + 0xea,0x97,0x5f,0xa,0xe7,0x31,0xa,0x30,0x2,0xef,0x46,0xd6,0xff,0x13,0x12,0xe0, + 0x86,0x50,0xcc,0xcf,0xcd,0xcd,0xd,0xda,0xb5,0x73,0xde,0xfc,0xf9,0x58,0x2c,0xd1, + 0xed,0xaa,0x63,0x59,0x96,0xb0,0x58,0xa2,0x48,0x49,0xee,0x43,0x56,0xbf,0x4c,0x72, + 0xfa,0x67,0x93,0x91,0x9e,0x4e,0x72,0x9f,0x3e,0x24,0x26,0x26,0x92,0x10,0x1f,0x47, + 0x6c,0x4c,0xc,0x31,0x16,0xb,0xf1,0x71,0xb1,0x24,0x24,0xc4,0xb7,0x30,0xdf,0xc7, + 0xbc,0xc1,0x79,0xb9,0x24,0xc4,0xc7,0xa1,0xd7,0xeb,0xba,0x6a,0xa,0xf8,0xdf,0x61, + 0xde,0xfc,0xf9,0x6d,0x1d,0xfd,0xc7,0x1e,0x25,0x2f,0x2f,0x8f,0xd9,0xb3,0x2f,0xf, + 0xa7,0x3e,0x34,0x78,0x7b,0x3e,0xff,0x27,0x24,0x40,0x36,0xb0,0x95,0x56,0x23,0x67, + 0x93,0x93,0x93,0xc9,0xc8,0xc8,0x60,0xe3,0xc6,0x8d,0x0,0xc4,0xc6,0xc6,0xf2,0xe9, + 0x67,0x9f,0x7,0x2d,0xd9,0x12,0x68,0x17,0x44,0x45,0x46,0x11,0x19,0xd9,0xb5,0x68, + 0xe0,0x3,0x7f,0xf9,0x73,0xb,0xf3,0x7d,0x15,0x21,0x0,0x49,0x92,0x70,0xbb,0x3d, + 0x38,0x1c,0x4e,0xac,0x8d,0x56,0xac,0x56,0x2b,0x6f,0xbc,0xf9,0x9a,0xff,0x77,0x97, + 0x5e,0xd2,0xb1,0xb7,0xe6,0x72,0xb9,0xf8,0xc5,0xb4,0x69,0x54,0x55,0x55,0xb6,0x91, + 0x66,0xaf,0xbd,0xf6,0x3a,0x77,0xdf,0x7d,0x77,0xb8,0x83,0x49,0xf2,0x80,0xdd,0x27, + 0xb3,0x4,0x90,0x7d,0x46,0x5f,0x9b,0x61,0xd3,0x57,0xcc,0x99,0xe3,0x67,0x3e,0xc0, + 0x82,0x85,0xb,0x89,0x30,0x9b,0x83,0x9a,0x9b,0xc1,0x60,0x20,0x25,0x25,0x85,0x94, + 0xe4,0x64,0x22,0x23,0xcd,0x7e,0x11,0x1c,0x6e,0x2,0x90,0xee,0xbf,0x37,0x98,0xf9, + 0xf7,0xdf,0xeb,0x7f,0x8e,0xc1,0xa0,0x27,0x21,0x3e,0x9e,0x37,0xde,0x7c,0x8d,0x65, + 0xb7,0x2f,0x63,0x39,0xb0,0x1c,0x18,0x94,0x3b,0xb0,0x43,0x31,0xa0,0x37,0x18,0xb8, + 0xea,0xea,0xab,0xda,0x14,0xd6,0xed,0x76,0xb3,0x62,0xc5,0xa,0xfe,0xfa,0xc8,0x23, + 0x24,0x26,0x26,0x86,0x53,0x3f,0xb,0x4e,0x76,0x15,0xf0,0x6b,0x42,0xc,0xef,0xbe, + 0xfc,0xf2,0x2b,0xd8,0xb2,0x79,0x8b,0xff,0x3c,0x29,0x29,0x89,0x39,0x73,0xae,0xf4, + 0x1b,0x5b,0x1a,0x59,0x26,0x31,0x3e,0x81,0x94,0xe4,0x14,0xc,0x6,0xc3,0x61,0x7, + 0x7c,0xfc,0x22,0xb0,0x19,0x4,0x3e,0xe6,0x3,0xfe,0x7b,0x56,0x3d,0xf8,0x40,0x8b, + 0x94,0xb8,0xdd,0x67,0xe0,0xdd,0x77,0xf,0x83,0x6,0xe,0xe8,0xd0,0x20,0x9c,0x3d, + 0xfb,0x8a,0x90,0x1b,0x57,0x6c,0xdf,0xbe,0x8d,0x6f,0xd6,0xaf,0x67,0xee,0xdc,0x79, + 0xe1,0x7a,0x45,0xc6,0x93,0x15,0x0,0x12,0x70,0x4b,0xeb,0xcc,0xe4,0xe4,0x64,0xce, + 0x3e,0xfb,0x6c,0xbe,0xf8,0xe2,0x73,0x7f,0xde,0x8d,0xbf,0xf9,0xd,0x26,0x93,0x11, + 0x49,0x2,0xbd,0x4e,0x4b,0x72,0x9f,0x3e,0x44,0x44,0x44,0x78,0x5b,0xb2,0x7a,0xf8, + 0xe9,0x96,0xdf,0xdd,0xc6,0x3d,0x1,0x20,0x0,0xe0,0x8e,0xe5,0xd8,0xed,0x4e,0x84, + 0x2a,0x78,0xf0,0xa1,0x55,0x6d,0x55,0x44,0x0,0x8,0x72,0x7,0xe6,0xb4,0x2b,0x8, + 0xe2,0xe2,0x62,0x39,0xe5,0x94,0x53,0x42,0x16,0xfc,0xfd,0xf7,0xdf,0x67,0xfa,0x8c, + 0xe9,0xe1,0x6,0xc5,0x66,0x9d,0xac,0x0,0x38,0x97,0x10,0x7b,0xec,0xfc,0xfa,0xd7, + 0xd7,0xf1,0xcc,0x33,0x4f,0xfb,0xcf,0xd3,0xd2,0xd3,0x99,0x3d,0xfb,0x72,0x24,0x49, + 0xc2,0x68,0x34,0x92,0x98,0x94,0x84,0xac,0xd1,0x78,0x3b,0x7e,0x8e,0x42,0xfa,0xdd, + 0xe2,0x5b,0xfc,0x20,0xe0,0x8e,0xe5,0x34,0xd9,0xec,0x41,0xd7,0xee,0x6d,0x47,0x45, + 0x70,0xc7,0x72,0xf6,0xe6,0x17,0x74,0x18,0x22,0x9e,0x3c,0x65,0x4a,0xc8,0x82,0x7f, + 0xf7,0xdd,0xb7,0xc4,0xc4,0xc4,0x92,0x95,0x15,0x56,0xff,0xcf,0xf5,0x27,0x2b,0x0, + 0xda,0xb4,0xfe,0x98,0x98,0x58,0x72,0x7,0xd,0xe2,0xcb,0x2f,0xbf,0xf4,0xe7,0x2d, + 0x5a,0xb4,0x8,0x9d,0x4e,0x87,0x4e,0xa7,0xf3,0xe,0xfd,0xea,0xa2,0x9e,0xf,0x27, + 0x2d,0xbe,0xf9,0xf7,0x70,0xc7,0x72,0x1a,0x9b,0x6c,0x21,0xaf,0xdd,0xdb,0x5a,0x45, + 0xf8,0xee,0x8d,0x8a,0x8a,0xea,0x18,0x0,0x93,0x27,0x87,0xf6,0xf1,0x14,0x85,0xb5, + 0x6b,0x3f,0x66,0xfa,0xf4,0x19,0xe1,0xd4,0xd3,0xe9,0xc0,0x29,0x27,0x1b,0x0,0x4e, + 0xc5,0xbb,0xf5,0x7a,0x10,0x5d,0x7d,0xcd,0x35,0xac,0x5e,0xdd,0xb2,0x14,0x5b,0x46, + 0xdf,0xbe,0x5c,0x78,0xd1,0xc5,0x48,0xb2,0x4c,0x4c,0x4c,0x8c,0xb7,0x1d,0x76,0x65, + 0xeb,0x86,0x2e,0xa4,0xc6,0x46,0x5b,0xbb,0xd7,0x16,0x2f,0xf2,0x82,0x80,0x3b,0x96, + 0x7b,0x99,0xef,0xbb,0x37,0xd2,0x6c,0xc6,0x60,0x34,0xb6,0x6b,0xc,0xe,0x1e,0x32, + 0xb4,0x5d,0xaf,0xe4,0xc3,0xf,0x3e,0xe4,0x97,0x33,0x66,0x84,0x5b,0x5f,0xd7,0x9d, + 0x6c,0x6e,0xe0,0xcb,0xc0,0xaf,0x82,0x1c,0x5f,0x8d,0x86,0x4f,0x3f,0xfd,0x8c,0x33, + 0xcf,0x9c,0x89,0xc3,0xe1,0xdd,0x72,0xe7,0xe6,0x9b,0x17,0xb3,0xe8,0xe6,0x9b,0x89, + 0x8c,0x8c,0x24,0xc2,0x64,0xea,0xd2,0x1f,0x3c,0xfa,0xf8,0x91,0x4d,0xc7,0xbb,0xf9, + 0xa6,0xf0,0x42,0xf2,0xaa,0x2a,0xa8,0xaa,0x6e,0x7f,0xca,0xf8,0xa4,0x89,0x13,0xfc, + 0x13,0x4a,0x82,0xa4,0x5d,0x6c,0x2c,0x1b,0x37,0x6e,0x62,0xec,0x98,0xd1,0xe1,0x4c, + 0x30,0xd9,0xa,0xc,0xef,0x2e,0x66,0xf4,0xf4,0x88,0xa0,0x64,0x42,0x74,0x7b,0x4e, + 0x9a,0x3c,0x99,0xed,0x3b,0xb6,0xfb,0x99,0x2f,0x49,0x12,0x17,0x5d,0x7c,0xb1,0x37, + 0x9a,0x67,0x30,0x22,0xba,0x30,0xee,0xf3,0xb1,0xff,0x7b,0x84,0xe5,0xb7,0x2f,0x6b, + 0xa3,0xbb,0x45,0x2b,0x83,0x8e,0xfb,0xef,0x85,0x10,0xf7,0x71,0xc7,0x72,0x16,0xfd, + 0x36,0x3c,0x0,0x48,0x92,0x84,0xc9,0x64,0xf2,0xbf,0x77,0x6b,0xca,0xca,0xca,0xe, + 0x9,0x80,0xfa,0xba,0x3a,0xc0,0xbb,0x64,0xfd,0x27,0x9f,0x7c,0xd2,0xd9,0xdf,0xc, + 0xc6,0x3b,0x8a,0xd8,0x7e,0x32,0x0,0x60,0x26,0xad,0x26,0x76,0x0,0x5c,0x70,0xfe, + 0x5,0xac,0x5f,0xbf,0xde,0x7f,0x3e,0x6a,0xf4,0x68,0x32,0x33,0x33,0xfd,0x2b,0x74, + 0x8b,0x30,0x11,0xf0,0xf8,0x13,0x8f,0xb2,0xdc,0xc7,0xdc,0x36,0x4b,0x2,0xfa,0x74, + 0xb8,0xe4,0xd3,0xe3,0x81,0xcf,0x6c,0xed,0x6,0x3e,0xf6,0x7f,0x2d,0x12,0xe4,0xa6, + 0xdf,0xdc,0xdc,0xe1,0x7f,0x9a,0x8c,0x26,0x9c,0xce,0xd0,0x2b,0x88,0x65,0x67,0x67, + 0xb3,0x7e,0xfd,0xd7,0x21,0x43,0xc6,0x75,0x75,0x75,0xe1,0x8e,0x26,0xd2,0xfa,0x24, + 0xc0,0xb7,0x27,0x3,0x0,0x7e,0x11,0x2a,0x73,0xe8,0x29,0xa7,0xf0,0xd6,0x5b,0xff, + 0xf6,0x9f,0x5f,0x7c,0xf1,0x25,0xde,0x91,0xb7,0x3a,0x2d,0x6a,0x98,0x53,0xe9,0x9e, + 0x78,0xe2,0xb1,0xf0,0x5b,0x7e,0x33,0xc3,0x3,0xee,0xf,0xa4,0x65,0xb7,0x2f,0xf3, + 0x3,0x62,0xb9,0x25,0x8a,0xda,0xfa,0xe,0xd6,0x7,0x94,0x25,0x64,0x59,0xe,0x9, + 0x52,0xaf,0xed,0x12,0x9a,0x6a,0x6a,0x6a,0x48,0x49,0x9,0x7b,0x38,0xd9,0xa8,0xee, + 0x2,0x80,0x7c,0xac,0x1,0xa0,0xd5,0x6a,0xc9,0xce,0xce,0xa2,0xa4,0xa4,0xc4,0x9f, + 0x37,0x7e,0xfc,0x38,0x5f,0x6c,0x5d,0xe,0x6b,0xd2,0xc6,0x13,0x4f,0x3c,0xd6,0xd2, + 0xf2,0xef,0xbf,0xd7,0x7b,0x94,0x24,0xbf,0xdf,0xee,0x67,0x4d,0x40,0x2b,0x27,0x40, + 0x52,0x88,0x56,0xad,0xb3,0xb5,0xcf,0x1f,0x6b,0x89,0xee,0xf0,0xff,0x35,0x1,0xb3, + 0x86,0x2,0x53,0xf3,0xc0,0xd5,0x50,0x54,0x5b,0x53,0x4d,0x6c,0x8c,0x25,0xdc,0x7a, + 0x4b,0xed,0x2e,0x86,0xf4,0x24,0x0,0x6,0xe0,0xed,0xf6,0xd,0xa2,0x7e,0xfd,0xfa, + 0x21,0xcb,0x1a,0xff,0xd6,0xac,0x66,0xb3,0x99,0xac,0xac,0x6c,0xa0,0x79,0xa8,0x57, + 0xc7,0xfc,0x7f,0xe2,0xc9,0xc7,0xbd,0x2d,0xff,0xf6,0x65,0xde,0x16,0x7d,0xfb,0xb2, + 0xa0,0x28,0x5f,0xa7,0x96,0x6e,0x80,0xba,0x10,0x1d,0x4,0x7e,0x62,0x63,0x2c,0xed, + 0xbe,0x83,0x24,0xb7,0x5a,0x77,0xce,0x97,0xf4,0xfa,0xf6,0x7,0xf8,0x34,0x36,0xd9, + 0xb0,0x5a,0xc3,0x5e,0x7b,0x30,0xe2,0x64,0x0,0x40,0x48,0xf1,0x6f,0x89,0x89,0xa1, + 0xb6,0xb6,0xc6,0xdf,0xf3,0x97,0x37,0x78,0x30,0xb2,0xec,0xed,0xb6,0x55,0x15,0xb5, + 0x43,0xff,0xed,0xc9,0xbf,0x3d,0xce,0x32,0x9f,0x18,0xf,0xa5,0xcb,0x5b,0xc7,0xfb, + 0x3b,0x2,0x41,0xb3,0x51,0xd7,0x5e,0xe0,0xa7,0xa6,0xb6,0xae,0xfd,0x77,0x11,0x22, + 0x64,0x2c,0x40,0xaf,0xd7,0xb7,0xfb,0x97,0x43,0x86,0xc,0xa1,0xbe,0xa1,0xfe,0x98, + 0x3,0xa0,0x27,0x6d,0x80,0x89,0xa1,0x32,0xed,0x36,0x1b,0xb1,0xb1,0x71,0xc8,0xb2, + 0x8c,0xaa,0xaa,0xc,0x1d,0xda,0xe2,0x3f,0xab,0xaa,0x8a,0x2c,0x75,0x8e,0xd1,0x20, + 0x1d,0x1f,0xea,0x7a,0x80,0x2d,0x40,0x40,0xe4,0xaf,0xd,0xdd,0x77,0x8f,0x7f,0x80, + 0x69,0x10,0xf3,0x6b,0xea,0x3a,0x9c,0xd5,0xaf,0xaa,0x22,0xa4,0xcf,0xdf,0x1e,0x0, + 0xd2,0xd2,0xd2,0x48,0x4f,0x4f,0x67,0x5f,0x61,0xe1,0xff,0x14,0x0,0x52,0x42,0x65, + 0xda,0x6c,0x36,0x74,0x3a,0x1d,0xc9,0xc9,0xc9,0x94,0x95,0x95,0x91,0x9d,0x95,0x1d, + 0x4,0x0,0x55,0x23,0xc2,0x66,0x7e,0x67,0x20,0x20,0xc0,0x3,0x68,0x63,0x18,0x6, + 0x0,0x22,0x90,0x99,0x55,0x35,0xb5,0x1d,0x1b,0xa2,0xed,0x30,0x1f,0x40,0x6f,0x8, + 0xad,0x2,0xc6,0x9e,0x76,0x1a,0x0,0xdf,0x7c,0xf3,0x4d,0xb8,0x75,0x67,0x3d,0x19, + 0x0,0x90,0xd0,0x1e,0x0,0x24,0x9,0x32,0x32,0x32,0x28,0x2b,0x2b,0x23,0x3e,0x21, + 0xde,0x3f,0xb,0x47,0x51,0x3c,0x68,0xb5,0xda,0xe,0xfb,0xf9,0x3b,0x64,0x7e,0x88, + 0x56,0xde,0x6c,0xad,0xb7,0x6b,0x18,0x2,0xd5,0x35,0xe1,0xaf,0xfe,0xe1,0x52,0xdc, + 0xed,0xae,0x32,0xd3,0x9e,0x11,0x38,0x6e,0xdc,0x38,0x76,0xef,0xde,0x15,0xb4,0x73, + 0x59,0x27,0x54,0x7c,0x32,0xd8,0x0,0xed,0x3,0x0,0x89,0x19,0xbe,0xd0,0x68,0x42, + 0x7c,0x7c,0x50,0xd7,0xaa,0xa2,0x28,0xed,0x5b,0x80,0x21,0x24,0x80,0x9f,0xf1,0xf7, + 0xdd,0xe3,0x4d,0xcd,0xfd,0xff,0xf7,0xdd,0x13,0xbe,0x61,0x18,0xe6,0x94,0x71,0xa1, + 0xa,0x84,0xa2,0xb6,0xdb,0x2d,0x6c,0x8,0x61,0x4,0x4a,0x92,0xc4,0xc4,0x9,0x13, + 0x58,0xff,0xf5,0xfa,0xae,0xd4,0x5d,0xf1,0x49,0x2b,0x1,0x1a,0x1b,0x1b,0xd9,0xbe, + 0x63,0x3b,0xd7,0xfe,0xfa,0x3a,0x9e,0x79,0xe6,0x19,0xe2,0xe3,0x13,0x82,0x16,0x6e, + 0x52,0x14,0xc5,0x6b,0x14,0xb6,0xc7,0xb2,0xd6,0x41,0x9f,0x56,0x41,0x1e,0xda,0x33, + 0xc,0x5b,0xdb,0x4,0x1,0x12,0x23,0xdc,0xc8,0xa3,0x47,0xf1,0x74,0xb8,0xc8,0x94, + 0x46,0xdb,0x76,0xf9,0x85,0xb9,0x73,0xe7,0x92,0x95,0xdd,0x9f,0xf5,0xeb,0x57,0x76, + 0xa5,0xee,0x4a,0x4e,0x74,0x0,0xc8,0x78,0xe7,0xfb,0x85,0xa4,0x67,0x9f,0x79,0x96, + 0x87,0x1f,0x79,0x84,0x7f,0x3e,0xfd,0xc,0x69,0xe9,0xe9,0x6d,0x44,0xbe,0xc7,0xe3, + 0x41,0xab,0xd3,0x21,0x85,0x62,0x4c,0xeb,0xe0,0xcf,0x91,0x18,0x86,0xf7,0xdd,0x13, + 0xda,0x38,0xc,0x41,0x8a,0xaa,0x78,0x6d,0x89,0xe,0x0,0x50,0x5f,0x17,0x6c,0xe5, + 0x67,0x64,0x64,0xb0,0x6c,0xf9,0x9d,0x48,0x92,0xc4,0x94,0xa9,0x53,0x89,0x89,0x8d, + 0x65,0xef,0xcf,0x3f,0x53,0x50,0x50,0x80,0xb5,0xe3,0xa1,0xe3,0x27,0xbc,0x4,0x50, + 0x81,0x5a,0xda,0xd9,0x58,0xf1,0xed,0xb7,0xdf,0x62,0xe1,0xf5,0xb,0x19,0x3d,0x7a, + 0x54,0xfb,0xf,0x50,0x3c,0xc8,0x1a,0x4d,0x58,0x36,0xc0,0xe1,0x18,0x86,0x41,0xcf, + 0x94,0x3a,0x16,0x1,0xc2,0xb7,0x98,0x64,0x67,0x43,0x10,0xcb,0x2b,0xca,0xfd,0xc1, + 0xae,0x79,0xf3,0xe6,0x71,0xdd,0x82,0x5,0xbc,0xff,0xde,0x7f,0x38,0x54,0x5e,0x4e, + 0x63,0x63,0x23,0x43,0x86,0xc,0x61,0xda,0xb4,0x69,0xc,0x1f,0x36,0xc,0x73,0x64, + 0x24,0x1f,0x7e,0xf0,0x1,0x8f,0x3d,0xfe,0x38,0x7,0x83,0xfb,0xf,0x54,0xa0,0xf4, + 0x64,0x50,0x1,0x1b,0x81,0x99,0x7a,0xad,0x44,0x8a,0x45,0x4f,0x8c,0x49,0xcb,0xae, + 0x43,0x36,0x5c,0x1e,0x81,0xd3,0xe9,0x64,0xde,0xdc,0xb9,0xac,0x5d,0xfb,0x9,0x16, + 0x8b,0xa5,0x5d,0x6b,0x4f,0xf5,0x28,0x6d,0x40,0x10,0x8a,0xd9,0x5d,0x35,0xc,0xdb, + 0xb4,0x7c,0xd1,0x19,0xf3,0x45,0xfb,0x2a,0x29,0x80,0x2a,0x2b,0x2a,0x30,0x18,0xc, + 0x7c,0xfc,0xf1,0x5a,0xb6,0x6d,0xdb,0xc6,0xd9,0x67,0x9d,0xc5,0xa8,0x51,0xa3,0xc8, + 0xce,0xce,0xa6,0xb2,0xb2,0x92,0xd,0xeb,0xd7,0xb3,0x6f,0xdf,0x3e,0x6a,0x6b,0x6b, + 0xc9,0xcc,0xcc,0xe4,0xda,0x6b,0xaf,0xe5,0xab,0x2f,0xbf,0xe2,0xad,0xb7,0xde,0xe2, + 0xd1,0x47,0x1f,0xa5,0xac,0xac,0x14,0xbc,0xbd,0x81,0x9e,0x13,0x1e,0x0,0x6,0xd, + 0x8f,0x9c,0x3d,0x2c,0x76,0xe6,0xc2,0xe9,0x9,0x98,0x62,0x5d,0xe8,0x4c,0xa,0xd6, + 0xb2,0x34,0x5e,0xd9,0x50,0xc3,0x8b,0xeb,0xab,0x28,0x2a,0x2a,0xe2,0xaa,0xab,0xae, + 0xe4,0xc5,0x17,0x5f,0xea,0x70,0xe6,0x8f,0x50,0x55,0xaf,0xd8,0xf5,0x35,0xbf,0xb0, + 0x25,0xc0,0x1d,0xcb,0xbd,0x86,0x1b,0x6d,0x7b,0xff,0xc2,0x25,0xa1,0xaa,0x6d,0xdc, + 0xc4,0x8e,0xa8,0xa2,0xa2,0x92,0xf9,0xf3,0xe7,0xb3,0x77,0xef,0x5e,0x16,0x2f,0xbe, + 0x99,0xbb,0xee,0xfa,0x13,0xb3,0x66,0xcd,0xa,0xb2,0x51,0x5c,0x2e,0x17,0x9b,0x37, + 0x6f,0x66,0xcd,0x9a,0xf7,0x79,0xf8,0xe1,0x87,0x79,0xf2,0xc9,0x27,0xf9,0xfd,0xef, + 0x7f,0xcf,0xa7,0x9f,0x7e,0xca,0xb9,0xe7,0x9e,0x43,0x41,0x41,0xc1,0xdb,0xdd,0xc9, + 0x97,0x1e,0x3,0xc0,0x17,0xb7,0xf,0x3e,0xcd,0x90,0x62,0x75,0xf,0x3d,0x7f,0x9f, + 0x4e,0x67,0xf2,0x2,0x5a,0xf5,0xc8,0x24,0xd,0x48,0x66,0x6a,0x5e,0x3f,0x6e,0xfb, + 0xd7,0x1,0xbe,0xfb,0xee,0x3b,0xce,0x39,0xe7,0x6c,0x5e,0xfd,0xd7,0x6b,0x64,0x66, + 0x66,0x76,0xe8,0xfa,0x11,0x30,0xb2,0xb7,0x8d,0x55,0xdf,0x89,0x61,0x18,0x2a,0x62, + 0xd8,0x2c,0x1d,0x2a,0xab,0x83,0x5d,0x33,0x29,0x70,0x10,0x69,0x47,0xee,0xa8,0xe2, + 0xa6,0xf2,0xbf,0xab,0xb0,0xed,0xff,0x16,0x49,0xa3,0x23,0x6a,0xd0,0x4c,0xb4,0x1e, + 0x2b,0x97,0x5f,0x7e,0x5,0xd3,0xa6,0x4d,0xe5,0x8c,0x99,0x33,0x19,0x31,0x62,0x4, + 0x7b,0xf7,0xee,0x6d,0x6b,0x1d,0x27,0x24,0x70,0xf5,0xd5,0xd7,0x70,0xfe,0xf9,0x17, + 0xf0,0xaf,0x7f,0xbd,0xca,0x92,0x25,0x4b,0x28,0x2a,0x2a,0xe2,0xb6,0x25,0x4b,0xb9, + 0x7e,0xe1,0x82,0x77,0x4e,0x78,0x0,0xac,0xfb,0xc3,0x29,0xd9,0xb2,0xde,0x7d,0xf3, + 0xf0,0x4b,0x4a,0x75,0xb2,0x56,0xf5,0x73,0x41,0x96,0x55,0x46,0x5c,0x50,0x46,0x7a, + 0x5e,0x14,0xf1,0xe6,0x2c,0xe6,0x3f,0xb3,0x8f,0xfc,0xfc,0x7c,0xce,0x3a,0x73,0x26, + 0xcf,0x3f,0xff,0x2,0xa7,0x8d,0x1b,0xd7,0x79,0xab,0xc,0xa7,0x9f,0x3f,0x4c,0xc3, + 0xb0,0x2a,0x88,0xf9,0xc2,0xeb,0xed,0x85,0xd9,0xe2,0xab,0xd7,0xfd,0xd,0x93,0xfd, + 0x6d,0x86,0xcc,0x28,0xc2,0xa3,0x68,0xa8,0x28,0xde,0xcd,0x1f,0x26,0x26,0xf3,0xc4, + 0xca,0xb9,0xa8,0xaa,0x4a,0x4a,0x72,0x32,0x7b,0xf3,0xf3,0xdb,0xf1,0x3a,0x5b,0xc0, + 0x39,0xf4,0x94,0x61,0xac,0x59,0xb3,0x86,0x37,0xdf,0x7c,0x93,0xe9,0xd3,0x67,0xd8, + 0x7c,0x2a,0xe0,0xc4,0x5,0x80,0x0,0xe9,0x3b,0xbd,0x67,0xf5,0x80,0x99,0xa5,0x31, + 0xb2,0x56,0x5,0x21,0x81,0x7e,0x16,0x42,0x77,0x3e,0xa8,0x8d,0x48,0xf6,0xff,0x23, + 0x21,0x67,0x3b,0xe3,0x2f,0x81,0xa7,0xd4,0x7e,0xcc,0x7b,0x7a,0x1f,0x55,0x55,0x55, + 0x5c,0x78,0xe1,0x5,0xac,0xbc,0xeb,0x2e,0xae,0xef,0x64,0x85,0xee,0x70,0x6d,0x80, + 0xe,0x6d,0x83,0x3b,0x96,0x53,0x55,0x5d,0xdd,0x46,0xf9,0x77,0x65,0xd5,0x99,0xa6, + 0x7d,0xeb,0xe8,0x3f,0xee,0x0,0xc8,0x51,0x68,0x23,0x72,0x48,0x1d,0xaa,0x90,0x9a, + 0xb3,0x95,0x5,0xcf,0x79,0x43,0x2d,0x85,0x85,0xfb,0x30,0x9b,0x23,0xdb,0x30,0xbc, + 0x35,0x6d,0xd9,0xe2,0x1d,0x12,0xdf,0xcf,0xdc,0x44,0xc2,0x96,0x15,0xda,0x6f,0x57, + 0xe4,0xbd,0xe3,0x71,0xa8,0x37,0x4e,0x5c,0xb5,0xa7,0xec,0x84,0x4,0xc0,0xb7,0x2b, + 0xf2,0xfe,0x11,0x3f,0xa0,0x7e,0x48,0x6c,0xb6,0x55,0x42,0xc4,0x23,0x22,0x1e,0x4, + 0x5d,0x4b,0xcb,0x16,0xba,0x89,0x48,0x4d,0xf7,0x93,0x90,0xbd,0x9a,0xf1,0xe7,0xc9, + 0x3c,0xe9,0xca,0xe4,0xaa,0xa7,0xf6,0xe1,0xf1,0x78,0x58,0xbe,0x6c,0x19,0x3f,0x6c, + 0xda,0xc4,0xa3,0x8f,0x3e,0x86,0xd9,0x6c,0xe,0x3b,0x12,0xd8,0x55,0xc3,0xb0,0xba, + 0xfa,0xc8,0xf6,0x79,0xf4,0xd8,0xea,0xc0,0xd3,0x80,0x4e,0xe7,0x41,0xa4,0xfe,0x9, + 0x2c,0x67,0xf8,0x50,0xf1,0xd,0xa5,0xd5,0xde,0xf9,0x1d,0x9b,0x37,0x7b,0xb7,0xab, + 0x6f,0x6f,0x1b,0x7a,0x21,0x4,0xfb,0xf7,0x17,0x51,0x50,0x50,0x0,0xc0,0xcd,0x8b, + 0x9a,0x98,0x74,0xd1,0x36,0x7d,0xe5,0x5e,0xcb,0x79,0x5,0x5f,0xa5,0xe,0xc4,0x3b, + 0x32,0xe8,0xc4,0x2,0xc0,0x37,0xcb,0x6,0xdf,0x61,0x4e,0xb2,0x5f,0x36,0xe0,0x8c, + 0xb2,0x28,0x54,0x10,0xe6,0x7b,0x40,0x3b,0x6,0x84,0xc7,0xe7,0xdd,0x8,0xef,0xe2, + 0xc,0xa6,0xdf,0x22,0xd9,0xbf,0x25,0x79,0x50,0x1,0x43,0x47,0x99,0xb8,0x66,0x42, + 0x3c,0xcf,0x7d,0x5d,0xe5,0x73,0x11,0xdf,0x66,0xe7,0xce,0x9d,0xbc,0xf8,0xe2,0x4b, + 0xc,0x18,0x30,0xe0,0xe8,0x4a,0x80,0x3b,0x96,0x53,0x53,0x53,0x7b,0xc4,0xe5,0xb4, + 0x97,0x6e,0x27,0x26,0xa1,0x1,0xf4,0xd9,0x10,0x35,0x5,0x54,0xdf,0x8,0xa1,0x88, + 0x53,0x49,0x4d,0xeb,0x47,0x6d,0x43,0x21,0x56,0xab,0x95,0xef,0xbf,0xff,0x8e,0x3e, + 0xc9,0xc9,0x68,0x2,0x3c,0x19,0x87,0xc3,0x81,0xad,0xa9,0x9,0x9b,0xcd,0xe6,0x1f, + 0x59,0x34,0xe6,0x14,0xb8,0xec,0x1c,0xef,0xf5,0xc4,0x81,0xf5,0xf2,0x81,0x2d,0x89, + 0x49,0x5f,0xde,0x96,0x37,0x60,0xca,0x5f,0x76,0xed,0x3d,0xda,0x3c,0x3a,0xa2,0x41, + 0xa1,0x1b,0x7e,0x37,0xde,0xa4,0x6a,0xac,0xe7,0x61,0x50,0x73,0xb4,0x5a,0x35,0x13, + 0x9,0xc9,0xe3,0xd4,0x14,0x4a,0xe0,0xd2,0x18,0x94,0x8b,0x75,0x26,0xcf,0xd0,0x11, + 0x57,0x16,0x5a,0x64,0x8d,0xa,0xfa,0xb,0x11,0xe6,0x15,0x7e,0xa6,0x7,0x1d,0x51, + 0xc1,0xbd,0x7,0xa9,0x66,0x1,0xaa,0x5b,0xe5,0xf3,0x67,0xb2,0x99,0xf7,0x8f,0x12, + 0x4a,0x6a,0x5b,0x86,0x5a,0x99,0xcd,0x66,0x9e,0x78,0xe2,0x49,0x2e,0xb8,0xa0,0x65, + 0xd5,0xb8,0xd8,0xd8,0x98,0x23,0x2a,0x7c,0x6d,0x6d,0xdd,0x51,0xa9,0xc4,0xfa,0x3d, + 0xeb,0x50,0xb7,0x2f,0x22,0x6b,0x4c,0x1f,0x44,0xbf,0x87,0x83,0x6a,0xf6,0xaa,0xeb, + 0x56,0xb2,0xfa,0xb5,0x8f,0xc3,0x7e,0x56,0x6c,0x34,0x7c,0xf7,0x16,0xc,0xc8,0xc2, + 0xbf,0xc5,0x5d,0xf1,0xc6,0x3e,0xce,0xe2,0x8d,0x89,0xd7,0x4d,0x5a,0xb5,0xfd,0xa5, + 0xe3,0x46,0x2,0x6c,0x58,0x36,0xe4,0xa,0x8d,0xae,0xf6,0xf1,0x3e,0x79,0xf5,0xa6, + 0x88,0x4,0x47,0x84,0x3e,0xd2,0x83,0x4,0x38,0x1b,0xb5,0x42,0xb8,0x64,0x35,0x3a, + 0xa3,0x49,0x63,0x8e,0x6f,0x1e,0x2c,0x99,0x81,0x30,0xdd,0xe4,0xdd,0xd2,0x55,0xa8, + 0x41,0xad,0xdf,0xdf,0xa7,0xae,0xe9,0xb,0x11,0x57,0x22,0x5b,0x9f,0x67,0xcc,0x39, + 0x7,0xf9,0x73,0x6d,0x1a,0x57,0x3d,0x55,0x88,0xea,0x53,0x97,0xa9,0xa9,0xa9,0xdc, + 0x73,0xcf,0xdd,0x6c,0xda,0xb4,0x91,0x3f,0xae,0x5c,0x89,0x56,0xab,0xa5,0xb6,0xae, + 0x8e,0xe3,0x81,0x34,0x7a,0x3,0x1e,0x55,0xf,0x72,0x84,0xb7,0xf5,0x7,0x74,0x4c, + 0x3c,0xfd,0xd8,0x2d,0xc4,0xc7,0x46,0xf2,0xe4,0xd3,0xef,0xe0,0xf1,0x74,0xbc,0xa9, + 0x78,0x5e,0x6e,0xa,0xef,0xfd,0x5d,0xd0,0x3f,0xfd,0x10,0x81,0x83,0x1c,0x4c,0x16, + 0xa7,0x41,0x67,0x54,0xba,0x65,0x7e,0xc0,0x61,0xad,0x15,0xfc,0xed,0x4d,0x39,0xd1, + 0x92,0x59,0xfa,0xe0,0xd4,0x6b,0xf7,0x26,0x26,0xe4,0x36,0xe8,0x22,0xfb,0x38,0x30, + 0xc5,0xb8,0x30,0xc5,0xb8,0x88,0x4c,0x72,0x48,0x51,0xc9,0x76,0x59,0x6f,0xf2,0x78, + 0xb,0xa1,0x3d,0x15,0x11,0xf5,0x10,0x48,0x46,0x9f,0xe8,0x77,0x7b,0xe3,0x1a,0x22, + 0xe0,0xd8,0x9c,0xaf,0xcd,0x45,0x72,0x6c,0xc6,0x10,0x71,0x8,0x4f,0x83,0x11,0x6b, + 0x8d,0x81,0x6d,0x7,0xec,0xfe,0x3e,0x83,0x25,0x4b,0x96,0xb2,0xee,0xeb,0x75,0xac, + 0x5e,0xbd,0x9a,0x19,0x33,0x66,0x10,0x19,0x19,0x19,0xd6,0x42,0x4e,0xdd,0x9d,0x3c, + 0x8d,0xd5,0x38,0xf7,0x7f,0x48,0x7c,0x9a,0x16,0xa2,0x27,0x2,0xa,0x8,0x6f,0xd2, + 0x6a,0xe1,0xcc,0xe9,0xa3,0xb8,0x6e,0xee,0x59,0x44,0x47,0x9b,0x29,0x39,0x50,0x49, + 0x5d,0x7d,0xf0,0x48,0xa0,0xc1,0x83,0x32,0xb9,0xea,0x8a,0xe9,0xbc,0xfc,0xf4,0xed, + 0xa4,0xf4,0x89,0x2,0xc7,0xb7,0x41,0x32,0x5a,0xf5,0x48,0x54,0x17,0x46,0x37,0xfc, + 0xf3,0x8b,0xea,0xd5,0xc7,0x85,0x4,0xf0,0xe8,0x4d,0x13,0x92,0x72,0x6a,0xc,0x3a, + 0x93,0xe2,0x6f,0xcc,0x8,0x40,0x93,0x7,0xba,0xd3,0x80,0x68,0x84,0xd4,0x7,0x34, + 0xfd,0x41,0x4e,0xf0,0xb6,0x78,0x7f,0xeb,0x17,0xed,0x1f,0x51,0x11,0xd1,0xbf,0x41, + 0xaa,0xbc,0x8d,0x61,0xd3,0xca,0x99,0x5b,0xd2,0x9f,0xcf,0x77,0x5b,0x29,0xab,0x73, + 0xe1,0x72,0xb9,0xf8,0xfc,0x8b,0xcf,0xb9,0x76,0xfe,0xb5,0xbc,0xff,0xfe,0x7b,0x4c, + 0x9d,0x32,0x85,0xe7,0x9e,0x7b,0x9e,0xf1,0x47,0xb6,0x5a,0xe7,0xd1,0xe9,0xe8,0xd0, + 0x1a,0x51,0x3d,0x1a,0x70,0x55,0xb4,0x48,0x80,0x40,0xc3,0x3,0x48,0x4e,0x34,0x73, + 0xe7,0xad,0x97,0x72,0xe7,0xad,0x97,0xe2,0x74,0xb9,0x29,0x2a,0x2e,0xa7,0xa4,0xac, + 0x8a,0xa1,0x79,0x99,0x24,0x27,0x7,0x4,0xbe,0x1a,0x8a,0x83,0x9d,0x11,0x15,0x8c, + 0xd1,0x6e,0x84,0x20,0xbb,0xbb,0x3a,0x69,0xba,0xee,0xda,0xc9,0x42,0x23,0x6b,0x54, + 0x99,0x0,0x69,0x8e,0xee,0x17,0x88,0xc8,0x47,0x10,0xfa,0x39,0x8,0xfd,0x39,0xa0, + 0x3b,0x15,0xa4,0x68,0x10,0xe,0x2f,0xf3,0xd5,0x30,0x8e,0xaa,0x13,0xa4,0x58,0x44, + 0xe4,0x65,0x68,0x64,0x95,0x51,0x33,0xe,0x72,0xdf,0xa5,0x69,0xfe,0xfa,0xdc,0xb4, + 0x71,0x23,0x25,0x7,0xe,0x30,0x65,0xea,0x34,0x66,0x9c,0x71,0x6,0x17,0x5f,0x7c, + 0x11,0xaf,0xbc,0xf2,0xca,0x31,0x97,0x0,0x1a,0xbd,0x1,0x55,0xd5,0x82,0xab,0xd2, + 0x5b,0x86,0x8e,0x92,0x70,0x62,0xd0,0xa9,0xe4,0xe6,0x24,0x32,0x7d,0x72,0x1e,0xc9, + 0x89,0x11,0x2d,0xd7,0x94,0x2a,0xb0,0xad,0x6b,0x33,0xe2,0x4c,0x67,0xf0,0x80,0x4c, + 0xd2,0x97,0xb7,0xe5,0xd,0x38,0x2e,0x0,0x20,0x49,0x72,0x95,0xab,0x51,0xe7,0x26, + 0xc0,0x86,0x13,0xba,0x33,0x7d,0xe2,0xdc,0xd9,0xc2,0xf4,0xae,0x30,0x5f,0x38,0x7c, + 0x20,0x70,0x80,0x71,0x22,0xe8,0x6,0x11,0x9b,0xd2,0xc8,0xd0,0xc1,0x2e,0x2e,0x1d, + 0x1d,0xe7,0xb,0xad,0x56,0xf0,0xcd,0x86,0xf5,0x94,0x95,0x96,0x32,0x78,0xf0,0x10, + 0xe6,0xfc,0xea,0x57,0x2c,0x5d,0xba,0x84,0xcf,0x3e,0xfb,0xf4,0xb0,0x56,0xf4,0x38, + 0x5a,0x49,0xd6,0x19,0x51,0x15,0x9,0x3c,0xd,0xa0,0x34,0x85,0x64,0x7a,0xd0,0x31, + 0xd4,0x35,0xa5,0x1a,0xa9,0x72,0x25,0x78,0x2a,0x83,0xa5,0xaa,0x2f,0xe5,0x4e,0x3b, + 0x10,0xab,0x37,0xf2,0xee,0xeb,0xb3,0x66,0x69,0x8e,0x39,0x0,0x64,0x59,0xa9,0x72, + 0x37,0x69,0xd5,0x66,0xe6,0xa3,0x2,0x98,0x7c,0x5,0x6a,0xd5,0xa2,0x43,0xb6,0xf4, + 0xd6,0xc9,0xd9,0xea,0x5e,0x27,0x22,0xea,0x32,0x10,0x7a,0x86,0x4f,0x3e,0xc4,0x75, + 0xd3,0xe2,0x49,0x8e,0xf6,0x8e,0xae,0xd9,0xba,0x6d,0x1b,0x7,0x4a,0x4b,0x29,0x2b, + 0x2d,0x25,0x25,0x39,0x85,0x4b,0x67,0xcd,0xe2,0x9a,0x6b,0xae,0x61,0xd7,0xae,0x5d, + 0xc7,0x50,0x2,0x18,0x51,0x15,0xdf,0x10,0x76,0x57,0x79,0x58,0x52,0x20,0xe8,0xe8, + 0xa9,0x41,0xaa,0xbc,0xf,0x5c,0xc5,0xa1,0xc7,0x9d,0xaa,0x60,0x49,0x69,0x22,0x29, + 0xa7,0xae,0x6f,0xdf,0xdc,0x1d,0x77,0x1f,0x73,0x0,0x38,0x1d,0xba,0x2a,0xb7,0x5d, + 0x2b,0xf9,0x99,0xaf,0x2,0x4a,0x99,0xaf,0x15,0x7,0x30,0x59,0x38,0x42,0x33,0x3c, + 0x14,0x20,0x14,0xdf,0x6f,0x9b,0x8f,0x44,0x20,0x4c,0x53,0xd1,0x6a,0x15,0x46,0x4e, + 0x3e,0xc4,0x3d,0x97,0x78,0x97,0xf,0x3c,0x58,0x56,0x46,0xd1,0xbe,0x7d,0x94,0x96, + 0x96,0x72,0xa0,0xb4,0x14,0x4b,0xb4,0x85,0xfe,0x39,0x39,0xcc,0x9e,0x3d,0xdb,0x1b, + 0xb3,0x3f,0x6,0x22,0x40,0xd2,0x19,0x51,0x94,0x66,0x66,0x59,0x41,0x75,0x85,0x9f, + 0x94,0x6,0xa4,0xaa,0xbf,0x82,0xb3,0xb8,0xd3,0x49,0xac,0xfd,0xc6,0x1d,0x32,0x6b, + 0xf4,0x9e,0x1b,0xbe,0xba,0x6d,0xc8,0x84,0x63,0xa,0x80,0xa9,0x8f,0xfc,0x58,0xef, + 0x71,0xc9,0x41,0x36,0x80,0x64,0xfb,0x20,0x98,0xe9,0xa1,0xf4,0x7b,0xeb,0x73,0xa5, + 0xfd,0x7c,0xa1,0x3a,0x21,0x62,0x2c,0x48,0x71,0x24,0xa4,0x5a,0x39,0x25,0xd7,0xc3, + 0x85,0x23,0x62,0xf1,0x78,0x3c,0xec,0xdc,0xb5,0x93,0xd2,0x32,0xaf,0x14,0x28,0x2d, + 0x2d,0x25,0x6f,0x50,0x1e,0x87,0xe,0x1d,0xe2,0xf3,0xcf,0x3e,0x3f,0xea,0x4b,0xc8, + 0x85,0xf3,0x11,0x68,0x69,0xa8,0x6f,0xf4,0xd6,0x85,0xa7,0x29,0xbc,0xd6,0xaf,0x3a, + 0x41,0x69,0x44,0xaa,0x7a,0x2,0x9c,0x45,0x21,0x5b,0x7d,0xeb,0x73,0x59,0x16,0xc, + 0x39,0x7b,0x7f,0x8c,0x21,0x42,0xf9,0xcf,0xd7,0x4b,0x86,0xce,0x38,0x76,0x36,0x0, + 0x8,0x54,0x94,0xa0,0x97,0x75,0xfe,0x4,0xf6,0x8f,0x42,0x33,0xbd,0x59,0x35,0xb4, + 0x66,0xba,0xef,0x28,0x2,0x41,0x20,0x1c,0x80,0x13,0x49,0x38,0x40,0xf5,0x20,0xcc, + 0xbf,0x0,0x15,0x4e,0x9d,0x78,0x90,0x1b,0x7e,0x99,0x40,0x42,0xa4,0x96,0xea,0xaa, + 0x2a,0xa,0xf2,0xf3,0x29,0x2d,0x2b,0xa5,0xb4,0xac,0x94,0x8a,0x8a,0xa,0x5f,0x54, + 0xcd,0xde,0xe3,0x2,0x40,0x8,0x95,0x5,0xd7,0x5f,0x8f,0xcb,0xe5,0x73,0x7b,0x15, + 0x1b,0x28,0xcd,0xc,0xee,0x48,0x15,0xd8,0x91,0xaa,0x9f,0x5,0x47,0x7e,0x97,0xa6, + 0xb2,0x9b,0x2c,0x4e,0x86,0x5f,0x54,0x10,0x67,0x30,0xbb,0x5e,0x5f,0xf7,0x87,0xa1, + 0xf3,0xc5,0x11,0x6,0xf3,0xe,0x7f,0x50,0xa8,0x2a,0xb9,0x85,0x22,0x11,0xa8,0x6, + 0xa4,0xc6,0xb7,0xc0,0xb5,0xa3,0x2d,0xf3,0x3b,0x62,0xb6,0x68,0x66,0x76,0xb3,0x1a, + 0xf0,0x1d,0x15,0x1f,0x58,0xb4,0xa9,0xa0,0xcf,0x46,0xab,0x53,0x18,0x7e,0x5a,0x39, + 0x77,0x5d,0x98,0x86,0x10,0x82,0xca,0xca,0x4a,0xa,0xb,0xa,0xd8,0xb3,0x7b,0x37, + 0xeb,0xd7,0x7f,0x8d,0xdd,0x6e,0x67,0xcc,0x98,0x31,0x3d,0xae,0xff,0x17,0x2d,0x5a, + 0xc4,0x1b,0x6f,0xbc,0xe1,0xed,0x9d,0x16,0xf8,0x44,0x7b,0x27,0x36,0x80,0xea,0x40, + 0xaa,0x7e,0x5,0x6c,0xbb,0x3a,0x6e,0xf5,0xed,0x24,0x83,0xd9,0xcd,0xf0,0x4b,0xa, + 0x63,0x12,0xb3,0xea,0xff,0xfa,0xdd,0x8a,0xbc,0xc2,0xd,0x4b,0x87,0xcc,0xec,0xf1, + 0x48,0xa0,0xa4,0x15,0xb5,0x1e,0x9b,0x26,0x45,0x67,0xf4,0x4,0x44,0xad,0x14,0xa4, + 0xba,0x7f,0x20,0x4c,0x33,0xc0,0x38,0x1,0x81,0x40,0x42,0xf5,0x8d,0xa2,0xf5,0x96, + 0x4e,0x6a,0x8e,0x4,0x36,0xe7,0xf9,0x47,0xf8,0xaa,0x2d,0xe7,0x6a,0x40,0x7c,0x40, + 0x8,0x84,0x71,0x2c,0x92,0xad,0x98,0x3e,0xe9,0xd,0x8c,0x1c,0x18,0xc3,0x8c,0x3c, + 0xb,0x9f,0xec,0xaa,0xc7,0x66,0xb3,0x61,0xb3,0xd9,0x0,0xb8,0xf2,0xca,0x2b,0x49, + 0x4d,0xed,0xb6,0x29,0x74,0x6d,0x48,0x51,0x14,0x16,0x2f,0x5e,0xcc,0xb3,0xcf,0x3e, + 0x4b,0x84,0x5e,0x46,0x23,0xab,0xde,0x7a,0x90,0xcd,0x3e,0x70,0x7,0x4,0xda,0x5b, + 0x77,0x42,0x58,0xd7,0x81,0x6d,0x1b,0x6d,0x26,0x26,0x42,0x9b,0x18,0x40,0x50,0x13, + 0xd,0x38,0xd7,0x19,0x3c,0xe4,0x4e,0x2f,0xb1,0xd8,0xeb,0xc,0x96,0x9f,0xbf,0x48, + 0xfb,0xd7,0xb7,0x77,0xe,0xfa,0xca,0xae,0x49,0xbe,0x64,0xda,0xca,0x2f,0x3c,0x3d, + 0x2,0x0,0x4,0x55,0x6e,0x9b,0xc6,0xeb,0xa3,0x6,0x21,0x54,0x45,0x6a,0xfc,0x18, + 0x5c,0xfb,0xc0,0x7c,0x2e,0x48,0xba,0x20,0x0,0xb4,0x30,0x3d,0x4,0xb3,0x69,0xcb, + 0x7c,0x84,0xa,0x92,0x1e,0x61,0x1c,0x82,0xd4,0xf4,0x13,0xa3,0x26,0x94,0x71,0x4b, + 0x5d,0x16,0xdf,0x17,0x35,0x62,0x75,0xa,0x6,0xd,0x1a,0xc4,0x75,0xb,0x16,0xb0, + 0x70,0xe1,0xc2,0xae,0xf5,0xdf,0x1e,0x1,0xd9,0x6c,0x36,0xae,0xba,0xf2,0x4a,0xd6, + 0xac,0x59,0x3,0xc0,0x80,0x24,0x13,0xe6,0x68,0x7,0x8,0xd,0x48,0x6,0xaf,0xf4, + 0x92,0x5a,0xf5,0x44,0x35,0x7f,0x77,0x1f,0x42,0x6a,0xf8,0x3a,0x18,0x1c,0xed,0x1, + 0x80,0xce,0x1,0x62,0x8a,0x71,0x32,0xfc,0xa2,0xc2,0x98,0x7d,0xeb,0x53,0x7e,0x59, + 0xb1,0x47,0xfe,0x13,0x70,0x47,0xf,0x1,0x40,0x94,0xbb,0xed,0x5a,0xb0,0x38,0x83, + 0x1,0xd0,0xfc,0x92,0x8e,0x9f,0x91,0x9c,0xcf,0x22,0xa2,0xce,0x1,0x39,0xbe,0x85, + 0xb9,0x22,0x44,0x4,0x50,0x6d,0x7,0x1c,0x81,0xd7,0xf5,0xfd,0xc1,0x96,0x8f,0x5e, + 0xd7,0xc4,0x90,0xe1,0x55,0x3c,0x70,0xcd,0x28,0x66,0xdd,0xfb,0x11,0x91,0x91,0x91, + 0x3d,0x1a,0xf5,0xab,0xac,0xac,0xe0,0xc2,0xb,0x2f,0x64,0xd3,0xa6,0x4d,0xfe,0xbc, + 0x21,0x69,0x46,0xfa,0x26,0xdb,0x41,0x6b,0xf1,0xaa,0x80,0xf6,0x98,0x2f,0x81,0xd4, + 0xb0,0xc1,0x57,0xae,0xce,0x5b,0x79,0x57,0x0,0x11,0xd7,0xaf,0xc1,0x5c,0x59,0x10, + 0xdd,0xbf,0xe7,0x6c,0x0,0x59,0xf2,0x8,0x4f,0xb0,0xd,0x10,0x14,0x17,0x50,0x1, + 0x4f,0x1d,0x52,0xed,0xab,0xd0,0xf8,0x5,0xb8,0x1b,0x42,0xdb,0x5,0xa1,0xf4,0x7e, + 0x73,0xbe,0xe2,0x0,0x4f,0xf4,0x3f,0x77,0xbc,0x0,0x0,0x7,0xc3,0x49,0x44,0x41, + 0x54,0xb3,0xfb,0xe8,0x46,0x18,0x7,0x83,0xa,0xe9,0x7d,0x6b,0x19,0x92,0x58,0xc1, + 0x9a,0xd7,0x9f,0xeb,0x51,0x83,0x2f,0x3f,0x7f,0x2f,0x93,0x26,0x4d,0xa,0x62,0x3e, + 0xc0,0xd8,0x6c,0x13,0xd1,0xd1,0x76,0xd0,0xc6,0x81,0xe2,0x2,0x8f,0x2f,0x29,0xae, + 0x96,0x73,0xc5,0x5,0xee,0x7a,0xb0,0x17,0x75,0x6d,0xd,0x23,0x35,0xbc,0x73,0x8f, + 0x53,0x83,0x10,0x92,0xad,0xc7,0x0,0x20,0x14,0x69,0x6a,0x54,0xa2,0xad,0x7d,0xe6, + 0xfb,0xf3,0x54,0x24,0xdb,0x56,0xa4,0xda,0xd7,0xc0,0xbe,0x23,0x80,0xe1,0xce,0x0, + 0xa6,0x7,0x30,0xbc,0x99,0xe9,0x4a,0x40,0x70,0xa8,0xf9,0xba,0x6c,0x1,0x39,0x6, + 0x4,0x8c,0x3e,0xad,0x8c,0xc4,0xfc,0x67,0xd8,0xb2,0xf9,0x87,0x6e,0x37,0xf4,0x84, + 0x10,0x3c,0xf5,0xd4,0x53,0x9c,0x7e,0xfa,0xe9,0xec,0xdb,0xb7,0xaf,0x4d,0x5d,0xf4, + 0x4f,0x30,0x12,0x11,0xe1,0x40,0x68,0x2c,0xc1,0x96,0xbf,0xd2,0xca,0x13,0x70,0x14, + 0x7b,0x5b,0x7f,0x67,0x4c,0x3d,0x8c,0x54,0xfa,0x53,0x42,0x8d,0xcb,0xae,0xf9,0x5b, + 0x8f,0x18,0x81,0x5f,0x2f,0x1d,0x3c,0xc4,0x14,0x6d,0xd7,0xfb,0xd,0x9f,0x50,0x89, + 0xd6,0x79,0xe,0xa4,0xc6,0x6f,0x40,0xde,0x8d,0x30,0xe,0x7,0x4d,0x4c,0x68,0x91, + 0xdf,0x91,0xbd,0x80,0x8a,0xd0,0x67,0x20,0xb9,0xea,0x30,0x1a,0x5c,0xc,0x1a,0x50, + 0xce,0x3b,0xff,0xbc,0x89,0xbe,0x99,0xef,0x85,0xbb,0xfc,0x6a,0x97,0x69,0xeb,0xd6, + 0xad,0x5c,0x7f,0xfd,0xf5,0x7c,0xff,0xfd,0xf7,0x21,0xaf,0x9b,0xf4,0x32,0x46,0xbd, + 0x40,0x96,0x4,0x42,0x8e,0xa,0xd6,0xff,0x81,0xe2,0x5f,0x6,0xc9,0x55,0x11,0x5c, + 0x37,0x87,0x61,0xfc,0x85,0xfa,0x6d,0x4d,0x51,0x94,0x6a,0xaf,0xd5,0x97,0x4c,0x5e, + 0xb5,0xe3,0xfb,0x9e,0x9,0x5,0x6b,0xc4,0xec,0xa4,0xec,0xfa,0x98,0x76,0x5b,0xbd, + 0xe8,0x20,0xcf,0x5d,0x8b,0xd4,0xf0,0x5,0x52,0xe3,0x46,0x5f,0xec,0xbc,0x95,0x34, + 0x68,0x76,0x11,0x5b,0xe7,0x2b,0xe,0xf0,0x38,0x1,0xbd,0xb7,0x93,0x49,0x85,0x7e, + 0x59,0xd5,0x9c,0x9a,0x54,0xc3,0xf2,0x45,0xf3,0x50,0x7d,0xc3,0xc5,0x8f,0x56,0x6a, + 0x6a,0x6a,0x62,0xc9,0x92,0x25,0x8c,0x1d,0x3b,0xb6,0x5d,0xe6,0x3,0xc,0x4c,0x32, + 0x11,0x15,0x69,0xf7,0x31,0xc9,0x14,0xdc,0xf2,0x3,0x25,0x80,0xe2,0x4,0x57,0xf5, + 0xd1,0x59,0xda,0x2e,0xa0,0x4e,0xeb,0xcb,0xcc,0xe2,0xe7,0x2f,0xd3,0xf,0x7a,0x5c, + 0xe2,0xb0,0xf6,0xad,0x39,0x2c,0x9,0x20,0x6b,0xc5,0xec,0xb8,0x34,0xab,0x26,0x88, + 0xb9,0x84,0x2b,0x9,0x9a,0xe3,0xc9,0xa5,0x48,0x8e,0x43,0x8,0x43,0x26,0xe8,0x52, + 0xfc,0x1e,0x44,0xbb,0x12,0x21,0xe0,0x28,0x34,0x71,0x48,0xee,0x6,0x10,0x30,0xe6, + 0xd4,0x52,0xea,0xad,0x32,0xf3,0xe6,0xcd,0xe5,0x2f,0x7f,0x79,0x90,0x3e,0x7d,0xfa, + 0x1c,0x76,0x6b,0x77,0x3a,0x9d,0x7c,0xfc,0xf1,0xc7,0xbc,0xf6,0xda,0x6b,0xbc,0xff, + 0xfe,0xfb,0x34,0x36,0x76,0xbe,0x82,0xc7,0x90,0x54,0x23,0x19,0x7d,0x1c,0x5e,0x60, + 0x22,0xb7,0x48,0x80,0xc0,0xe6,0xd5,0x2c,0x9,0x14,0x5b,0x4b,0xf9,0x8f,0xd0,0xf8, + 0x73,0x58,0xf5,0x1c,0xd8,0x9e,0x60,0xad,0xda,0x67,0x69,0x70,0x28,0x86,0x89,0xd3, + 0x56,0xfd,0x58,0xd6,0x23,0x0,0xf8,0xee,0xf6,0x41,0xf1,0xb2,0x46,0x24,0xe8,0x8d, + 0xee,0x16,0x24,0x12,0x26,0xe3,0xdb,0xe4,0x2b,0x48,0xb6,0x42,0x90,0xca,0x10,0x86, + 0xc,0x90,0xa3,0x5a,0xb9,0x87,0x1,0xdf,0x3,0xe3,0x5,0xc8,0x80,0x1,0x54,0x27, + 0x26,0x93,0x93,0xbe,0x69,0x8d,0xd4,0x7f,0xf5,0x21,0x39,0x39,0xef,0xf0,0xdb,0xdf, + 0xfe,0x96,0x2b,0xaf,0xbc,0x92,0xdc,0xdc,0x5c,0x74,0x3a,0x5d,0xa7,0xe5,0x71,0xb9, + 0x5c,0xac,0x5d,0xbb,0x96,0x37,0xde,0x78,0x83,0x77,0xdf,0x7d,0x97,0x86,0x86,0x86, + 0x2e,0xd5,0xc7,0xd8,0x6c,0x13,0xd1,0x51,0xd5,0xa0,0x31,0xb7,0x15,0xff,0xad,0x7, + 0x25,0xca,0x11,0xa0,0x58,0xc3,0x76,0xf1,0x42,0x1,0xc4,0x5a,0x65,0xa2,0x78,0x5b, + 0x52,0x4d,0x63,0xb5,0xa9,0x5e,0xf1,0x68,0xfe,0x64,0xa8,0x31,0xae,0x1e,0xff,0xd4, + 0xf,0xee,0x1e,0xb,0x4,0xb9,0x55,0xcd,0xcc,0xd4,0xf4,0x6a,0x43,0x97,0x99,0xdf, + 0x11,0x20,0x54,0x7,0x52,0xd3,0x5e,0x90,0xa3,0x10,0xba,0x24,0x90,0xb4,0x1,0x8c, + 0xf,0x11,0x2f,0x50,0x45,0x4b,0xef,0x23,0x90,0x97,0x53,0xcd,0x82,0x29,0x99,0x7c, + 0xb0,0x2d,0x9f,0x55,0xab,0x56,0xb1,0x6a,0xd5,0x2a,0x74,0x3a,0x1d,0x3,0x7,0xe, + 0x24,0x37,0x37,0x17,0x83,0xc1,0xe0,0x5f,0x76,0xa6,0x79,0x45,0xaf,0x8a,0x8a,0xa, + 0xca,0xca,0xca,0x28,0x2a,0x2a,0xea,0x6c,0x62,0x66,0x87,0x94,0x9d,0x60,0xc4,0x6c, + 0x72,0x80,0x1c,0xd7,0x32,0x18,0xa4,0x95,0xee,0x6f,0x9,0xf8,0x18,0x5b,0xad,0x48, + 0x15,0xbe,0xcf,0x5f,0x7b,0x30,0x4a,0x14,0x6d,0xeb,0x53,0xe3,0xb2,0xe9,0xf6,0xba, + 0x1d,0xda,0x3b,0x27,0x3d,0xb8,0xed,0xbf,0xc7,0x64,0x44,0x90,0x4e,0xef,0xf9,0x55, + 0x5c,0xaa,0xd5,0x1c,0xbe,0xf1,0xd7,0x85,0x3c,0xc5,0x8a,0xe4,0x6e,0x4,0x4d,0x34, + 0x42,0x6e,0x59,0x99,0x4b,0xc2,0xc7,0xf4,0x40,0x30,0x4,0xa8,0x1f,0xbd,0xce,0x4d, + 0x72,0x82,0x9d,0xa9,0xb9,0x16,0x3e,0xdb,0xed,0x9d,0x91,0xeb,0x76,0xbb,0xd9,0xb1, + 0x63,0x7,0x3b,0x76,0xec,0xe8,0xb6,0x98,0x80,0x49,0x2f,0x63,0xd2,0xb,0x24,0x4, + 0xa2,0x75,0x0,0xa8,0xb5,0x14,0x90,0x40,0x48,0xfa,0xe0,0x19,0xce,0x9d,0xa9,0x1, + 0x15,0xaa,0x4a,0x2d,0x4a,0xd1,0x8e,0x3e,0x75,0x8a,0x5b,0xf3,0x9d,0xdb,0x2d,0xdf, + 0x31,0xe9,0x81,0x1d,0x3f,0x1d,0xd3,0x21,0x61,0x42,0x96,0x1c,0xaa,0x47,0x6e,0xeb, + 0xba,0x70,0xb4,0x0,0x21,0x40,0xa9,0x47,0x12,0x56,0x6f,0x58,0x55,0xd6,0x7,0xab, + 0x81,0x20,0x49,0x20,0xd1,0x3c,0x7d,0x67,0x50,0x66,0x2d,0x17,0x9d,0x1a,0xef,0x7, + 0x40,0x4f,0x50,0x52,0xa4,0xe,0x9d,0xd6,0xed,0x63,0xb2,0xd6,0xb,0x80,0xc0,0x56, + 0xdf,0xc6,0x1b,0x90,0xc3,0x6e,0xf5,0x4e,0xbb,0x8e,0xed,0xdf,0xf4,0xab,0x71,0x3b, + 0x34,0x1f,0x7a,0x14,0xdd,0x8a,0x49,0x7f,0xde,0x56,0xd8,0x1d,0x65,0xe8,0x32,0x0, + 0x94,0x26,0xfd,0x1f,0xf7,0x7c,0x9b,0x36,0x29,0xa9,0x6f,0x7d,0x44,0x4c,0x52,0xa3, + 0x39,0x3a,0xce,0x86,0x56,0xaf,0x1c,0xa6,0xd,0xd0,0xd1,0xbd,0xaa,0xb7,0x6f,0x5d, + 0x48,0x78,0x17,0x17,0xd5,0x4,0x6c,0xf4,0x18,0x68,0x17,0x78,0x7f,0x1e,0x15,0x69, + 0x23,0x27,0x31,0xad,0x47,0xa3,0x82,0xb2,0xec,0x8b,0x3e,0xfb,0xe2,0x1d,0x28,0xae, + 0x36,0xad,0xbe,0x79,0x68,0xb7,0xbf,0x49,0x87,0x61,0xfc,0xd5,0x57,0x9b,0xc5,0x9e, + 0x4d,0x19,0x55,0x4e,0x97,0x7c,0xc5,0xe4,0x55,0x3b,0x3f,0xed,0xce,0x32,0x74,0x19, + 0x0,0x13,0x1e,0xdc,0xba,0xfd,0xe3,0x5b,0x87,0x65,0x29,0xf9,0xf1,0xe7,0x56,0x96, + 0x44,0x9f,0x83,0x24,0x4d,0x92,0x25,0x11,0x6d,0x89,0x6f,0x92,0x63,0x92,0x1a,0x2d, + 0xd1,0xb1,0x36,0xc9,0x18,0xe1,0x3a,0x8a,0x80,0x10,0x20,0x5c,0x61,0xdd,0xdb,0x49, + 0x57,0x80,0xa,0xd4,0x1,0x4e,0xc0,0xe5,0x4b,0xa1,0xbe,0x27,0xe0,0xdd,0xcb,0xc0, + 0xdc,0x69,0x87,0x58,0x33,0xf7,0x5,0xbe,0xd6,0xaf,0x86,0x6e,0xf9,0xfe,0xce,0x20, + 0x25,0xf8,0xbd,0x43,0x48,0x81,0xd2,0xfc,0x4,0xc7,0x81,0xfc,0xc4,0x12,0xc5,0xc9, + 0x8c,0xc9,0xf,0xed,0xdc,0xdf,0xdd,0x20,0x3e,0x2c,0x37,0x70,0xe6,0x83,0x5b,0x9b, + 0x80,0xd7,0x7c,0x89,0xcf,0x57,0xe,0x89,0x74,0x96,0xc4,0x8e,0xab,0x29,0x8f,0x9a, + 0x2e,0xcb,0xea,0x4c,0x81,0xd4,0x37,0xd2,0x62,0x57,0xe3,0x13,0xac,0x71,0x31,0x89, + 0x8d,0xb2,0xd1,0xe4,0xea,0x6,0x9,0x11,0x9c,0xdf,0xd8,0x68,0x62,0x7f,0xb5,0x33, + 0xb0,0x4a,0xdf,0x1,0xfe,0xb,0x14,0x2,0x5,0xc0,0x7e,0x1f,0x83,0xc3,0xa5,0x34, + 0x1f,0x10,0x6,0xe2,0xdd,0xca,0xbe,0xf9,0x7b,0x56,0x73,0xbd,0x79,0xf9,0xeb,0xd, + 0x87,0x4b,0x8a,0x3,0x81,0x1a,0x60,0xf1,0xb7,0x5,0x80,0xa4,0x3a,0xda,0x5,0x80, + 0xaa,0xc8,0xfc,0xbc,0x2d,0xbd,0xa1,0xbe,0x3a,0xe2,0xb,0xd5,0x1e,0x73,0xf9,0x84, + 0x87,0xbf,0xb1,0xf7,0x84,0x14,0xeb,0x96,0xee,0xb3,0xd7,0x67,0xcd,0xd2,0xa4,0xf4, + 0xdd,0x3d,0x42,0xab,0x53,0xce,0x95,0xb4,0xea,0x25,0x92,0x44,0x5a,0x4c,0x6c,0xa3, + 0x1c,0x9f,0xd4,0x10,0x63,0xb1,0x34,0xa1,0xd5,0x1d,0x7d,0x95,0xb1,0x2d,0x3f,0x99, + 0x5b,0x5f,0x75,0xb0,0x76,0x67,0x9d,0xd,0xef,0x36,0x74,0x1b,0xba,0xa9,0xce,0x74, + 0x78,0x37,0x71,0xb8,0x4c,0xa7,0x91,0xae,0xf8,0x60,0x51,0x4e,0xdf,0xe9,0x63,0xf6, + 0x82,0x2e,0x2,0xb4,0x11,0xc1,0x62,0xbf,0xb5,0x1a,0x50,0x9a,0x40,0xd8,0xdb,0x5c, + 0x77,0x3a,0x74,0xec,0xd8,0xd2,0xaf,0xce,0xe5,0xd2,0xfe,0x79,0xfc,0x7d,0xbb,0x1e, + 0xe8,0x49,0x35,0xd6,0x23,0xfd,0xa7,0x9b,0x56,0x8e,0x8a,0x70,0x58,0x5d,0x53,0x74, + 0x6,0xcf,0xc5,0x2,0x66,0x1a,0x4d,0x2e,0x63,0x6a,0x7a,0x55,0x5c,0x7c,0xbc,0x55, + 0x23,0x4b,0xea,0x11,0xc4,0x11,0xbc,0xc9,0xed,0xd1,0xf2,0xc9,0xa6,0x2c,0x2e,0x7e, + 0xb2,0xa0,0xde,0xe9,0x51,0xcf,0x1,0xd6,0xf7,0x54,0x5,0x7e,0x7a,0x4b,0xce,0xce, + 0x71,0x83,0x4b,0xf2,0x22,0x4c,0x6e,0xd0,0x47,0xf8,0x7a,0x8e,0x42,0x19,0x82,0x2, + 0xd4,0x26,0xef,0x31,0xe0,0x7a,0x7d,0x9d,0x99,0x3d,0x3b,0x32,0xaa,0xdc,0x2e,0xcd, + 0x65,0x13,0x57,0xed,0xf8,0x9c,0x1e,0xa6,0x63,0xb2,0x6f,0xe0,0x97,0x4b,0x86,0xe6, + 0xe9,0x65,0xcf,0x8d,0x92,0x2c,0xcd,0xb2,0xc4,0x34,0xea,0x52,0x92,0x6b,0xe2,0x2c, + 0x51,0x4d,0xc1,0xfa,0xb0,0xb,0x80,0xd8,0xbc,0x27,0x8d,0x7b,0xde,0xb3,0x35,0xbc, + 0xbd,0xa5,0x76,0x32,0xf0,0x53,0x4f,0x96,0x65,0xc3,0xd2,0xc1,0xb7,0x66,0x24,0x57, + 0xdc,0x97,0x9e,0x54,0xa5,0x43,0x96,0x41,0xd6,0x80,0x2c,0x85,0xf0,0x0,0x3c,0x20, + 0xab,0x41,0x12,0xa1,0xbe,0xde,0x2c,0x76,0x6d,0xcf,0x38,0xa8,0x28,0x9a,0xf1,0x13, + 0x1f,0xd8,0x51,0x7c,0x2c,0x78,0x71,0x4c,0x37,0x8e,0x14,0x2b,0x91,0x37,0x34,0xd, + 0x9d,0xae,0xd1,0xb9,0x17,0x4b,0x92,0x34,0x36,0x31,0xa1,0xce,0x90,0x9c,0x58,0x1b, + 0x69,0x32,0x3a,0xc3,0x53,0x3,0xc0,0xee,0xfd,0x49,0x7c,0xbe,0xc3,0x68,0x5b,0xfa, + 0x46,0xf1,0x48,0xab,0x8b,0x9f,0x7b,0xba,0xc,0xeb,0xfe,0x70,0x4a,0xb6,0x5e,0x72, + 0x6f,0x1a,0x9e,0x5b,0x10,0x6b,0xd0,0xbb,0xdb,0x8a,0xfd,0x76,0xce,0x6b,0x6a,0xa3, + 0xc4,0xde,0xdd,0xe9,0xe5,0x8a,0x8b,0x71,0x13,0x1e,0xda,0xb5,0xff,0x58,0xf1,0xe0, + 0xb8,0xd9,0x3d,0xfc,0xeb,0x25,0xb9,0x51,0x42,0xe8,0x66,0xe9,0x75,0xca,0x4d,0x1a, + 0x8d,0x27,0x3d,0x25,0xa9,0x3a,0x3a,0x29,0xae,0x5e,0xaf,0xd5,0x28,0x21,0x19,0x5f, + 0x67,0x35,0xb3,0xbb,0x24,0x41,0xc9,0x3f,0x28,0x15,0x2f,0xfb,0x77,0xed,0xa8,0xe2, + 0xfa,0xfa,0xda,0x63,0xf5,0xee,0x1b,0x96,0xe,0x99,0xa9,0xd3,0x78,0x5e,0x1d,0x9e, + 0x5b,0x10,0xab,0xd3,0x79,0xda,0x7,0x81,0xc,0x8d,0x4d,0x46,0xa,0xa,0x52,0x6b, + 0xec,0x4e,0xc3,0x16,0x45,0x91,0xe7,0x1f,0xab,0x96,0x7f,0xdc,0x1,0x20,0x90,0x3e, + 0x5f,0x32,0x2c,0xdd,0x20,0x2b,0xf3,0x64,0x59,0x99,0x7,0x58,0x74,0x1a,0x45,0x35, + 0x1a,0x5c,0x92,0xaa,0xca,0xc2,0xe5,0xd6,0x4a,0x6e,0x8f,0x46,0x2b,0x49,0x6c,0x76, + 0x2b,0x9a,0x15,0x13,0x1f,0xd8,0xf1,0xf5,0xf1,0xf0,0xce,0xeb,0x6e,0x1b,0x7a,0xae, + 0x4e,0xa3,0x3c,0x6f,0x89,0x6c,0x94,0x13,0xe3,0xeb,0x63,0xa3,0xcc,0x36,0xf4,0x7a, + 0xf,0xc8,0xe0,0x74,0xeb,0xb0,0xd9,0x8d,0x1c,0xaa,0x8c,0xad,0xaf,0x6f,0x88,0x38, + 0xa8,0xa8,0x9a,0xeb,0x8e,0x97,0xf7,0x3e,0x2e,0x1,0xd0,0x9a,0xbe,0xba,0x7d,0x64, + 0xa2,0xc6,0xe3,0x4a,0xf3,0x48,0x92,0x53,0xab,0xca,0xd5,0xae,0xc8,0xb8,0x9a,0xae, + 0xe,0x7e,0xec,0x11,0xe0,0xae,0x9c,0xaa,0xd5,0xd8,0x6a,0xa6,0xe8,0x65,0xd7,0xd5, + 0x92,0xcc,0x68,0x21,0xa4,0x78,0x40,0x2b,0x49,0x6a,0x29,0xf0,0xbd,0x47,0xd1,0xbc, + 0x3f,0xe1,0x81,0x9d,0xef,0xd2,0x4b,0xbd,0xd4,0x4b,0xbd,0x74,0x5c,0xd0,0xff,0x3, + 0x9b,0xf6,0x95,0x13,0xab,0xdd,0xf2,0x89,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44, + 0xae,0x42,0x60,0x82, + +}; + +static const unsigned char qt_resource_name[] = { + // icons + 0x0,0x5, + 0x0,0x6f,0xa6,0x53, + 0x0,0x69, + 0x0,0x63,0x0,0x6f,0x0,0x6e,0x0,0x73, + // resources + 0x0,0x9, + 0xa,0x6c,0x78,0x43, + 0x0,0x72, + 0x0,0x65,0x0,0x73,0x0,0x6f,0x0,0x75,0x0,0x72,0x0,0x63,0x0,0x65,0x0,0x73, + // fred.png + 0x0,0x8, + 0x8,0xb7,0x5a,0xe7, + 0x0,0x66, + 0x0,0x72,0x0,0x65,0x0,0x64,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, + +}; + +static const unsigned char qt_resource_struct[] = { + // : + 0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1, + // :/icons + 0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x2, + // :/icons/resources + 0x0,0x0,0x0,0x10,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x3, + // :/icons/resources/fred.png + 0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0, + +}; + +QT_BEGIN_NAMESPACE + +extern Q_CORE_EXPORT bool qRegisterResourceData + (int, const unsigned char *, const unsigned char *, const unsigned char *); + +extern Q_CORE_EXPORT bool qUnregisterResourceData + (int, const unsigned char *, const unsigned char *, const unsigned char *); + +QT_END_NAMESPACE + + +int QT_MANGLE_NAMESPACE(qInitResources_fred)() +{ + QT_PREPEND_NAMESPACE(qRegisterResourceData) + (0x01, qt_resource_struct, qt_resource_name, qt_resource_data); + return 1; +} + +Q_CONSTRUCTOR_FUNCTION(QT_MANGLE_NAMESPACE(qInitResources_fred)) + +int QT_MANGLE_NAMESPACE(qCleanupResources_fred)() +{ + QT_PREPEND_NAMESPACE(qUnregisterResourceData) + (0x01, qt_resource_struct, qt_resource_name, qt_resource_data); + return 1; +} + +Q_DESTRUCTOR_FUNCTION(QT_MANGLE_NAMESPACE(qCleanupResources_fred)) + diff --git a/tags/fred-0.1.0alpha1/registrykey.cpp b/tags/fred-0.1.0alpha1/registrykey.cpp new file mode 100644 index 0000000..f39945d --- /dev/null +++ b/tags/fred-0.1.0alpha1/registrykey.cpp @@ -0,0 +1,54 @@ +/******************************************************************************* +* fred Copyright (c) 2011 by Gillen Daniel * +* * +* Forensic Registry EDitor (fred) is a M$ registry hive editor for Linux with * +* special feautures useful during forensic analysis. * +* * +* This program is free software: you can redistribute it and/or modify it * +* under the terms of the GNU General Public License as published by the Free * +* Software Foundation, either version 3 of the License, or (at your option) * +* any later version. * +* * +* This program is distributed in the hope that it will be useful, but WITHOUT * +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * +* more details. * +* * +* You should have received a copy of the GNU General Public License along with * +* this program. If not, see . * +*******************************************************************************/ + +#include "registrykey.h" + +RegistryKey::RegistryKey(const QList &data) { + this->key_data=data; +} + +RegistryKey::~RegistryKey() { + qDeleteAll(this->keys); +} + +void RegistryKey::Append(RegistryKey *p_key) { + this->keys.append(p_key); +} + +RegistryKey* RegistryKey::Key(uint64_t row) { + return this->keys.value(row); +} + +uint64_t RegistryKey::RowCount() { + return this->keys.count(); +} + +QVariant RegistryKey::Data(uint64_t column) const { + if(column>=0 && column<3) { + return this->key_data.value(column); + } else { + return QVariant(); + } +} + +uint64_t RegistryKey::Row() const { + return this->keys.indexOf(const_cast(this)); +} + diff --git a/tags/fred-0.1.0alpha1/registrykey.h b/tags/fred-0.1.0alpha1/registrykey.h new file mode 100644 index 0000000..a320206 --- /dev/null +++ b/tags/fred-0.1.0alpha1/registrykey.h @@ -0,0 +1,44 @@ +/******************************************************************************* +* fred Copyright (c) 2011 by Gillen Daniel * +* * +* Forensic Registry EDitor (fred) is a M$ registry hive editor for Linux with * +* special feautures useful during forensic analysis. * +* * +* This program is free software: you can redistribute it and/or modify it * +* under the terms of the GNU General Public License as published by the Free * +* Software Foundation, either version 3 of the License, or (at your option) * +* any later version. * +* * +* This program is distributed in the hope that it will be useful, but WITHOUT * +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * +* more details. * +* * +* You should have received a copy of the GNU General Public License along with * +* this program. If not, see . * +*******************************************************************************/ + +#ifndef REGISTRYKEY_H +#define REGISTRYKEY_H + +#include +#include +#include + +class RegistryKey { + public: + RegistryKey(const QList &data); + ~RegistryKey(); + + void Append(RegistryKey *p_key); + RegistryKey *Key(uint64_t row); + uint64_t RowCount(); + QVariant Data(uint64_t column) const; + uint64_t Row() const; + + private: + QList keys; + QList key_data; +}; + +#endif // REGISTRYKEY_H diff --git a/tags/fred-0.1.0alpha1/registrykeytablemodel.cpp b/tags/fred-0.1.0alpha1/registrykeytablemodel.cpp new file mode 100644 index 0000000..8ae5a2a --- /dev/null +++ b/tags/fred-0.1.0alpha1/registrykeytablemodel.cpp @@ -0,0 +1,308 @@ +/******************************************************************************* +* fred Copyright (c) 2011 by Gillen Daniel * +* * +* Forensic Registry EDitor (fred) is a M$ registry hive editor for Linux with * +* special feautures useful during forensic analysis. * +* * +* This program is free software: you can redistribute it and/or modify it * +* under the terms of the GNU General Public License as published by the Free * +* Software Foundation, either version 3 of the License, or (at your option) * +* any later version. * +* * +* This program is distributed in the hope that it will be useful, but WITHOUT * +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * +* more details. * +* * +* You should have received a copy of the GNU General Public License along with * +* this program. If not, see . * +*******************************************************************************/ + +#include "registrykeytablemodel.h" + +#include + +RegistryKeyTableModel::RegistryKeyTableModel(hive_h *hhive, + hive_node_h hive_node, + QObject *p_parent) + : QAbstractTableModel(p_parent) +{ + // Create the "root" key. It's values will be used for as header values. + this->p_keys=new RegistryKey(QList()<< + tr("Key")<SetupModelData(hhive,hive_node); +} + +RegistryKeyTableModel::~RegistryKeyTableModel() { + delete this->p_keys; +} + +QVariant RegistryKeyTableModel::data(const QModelIndex &index, int role) const { + bool ok; + + if(!index.isValid()) return QVariant(); + + RegistryKey *p_key=static_cast(index.internalPointer()); + + switch(role) { + case Qt::DisplayRole: { + switch(index.column()) { + case RegistryKeyTableModel::ColumnContent_KeyName: { + return p_key->Data(index.column()); + break; + } + case RegistryKeyTableModel::ColumnContent_KeyType: { + int value_type=p_key->Data(index.column()).toInt(&ok); + if(!ok) return QVariant(); + return this->TypeToString(value_type); + break; + } + case RegistryKeyTableModel::ColumnContent_KeyValue: { + // Get index to value type + QModelIndex type_index=this->index(index.row(), + RegistryKeyTableModel:: + ColumnContent_KeyType); + // Get value type + int value_type=this->data(type_index, + RegistryKeyTableModel:: + AdditionalRoles_GetRawData).toInt(&ok); + if(!ok) return QVariant(); + // Return value converted to human readeable string + QByteArray value_array=p_key->Data(index.column()).toByteArray(); + return this->ValueToString(value_array,value_type); + break; + } + default: + return QVariant(); + } + break; + } + case RegistryKeyTableModel::AdditionalRoles_GetRawData: { + return p_key->Data(index.column()); + break; + } + default: + return QVariant(); + } + + /* + if(role!=Qt::DisplayRole) return QVariant(); + + RegistryKey *p_key=static_cast(index.internalPointer()); + + return p_key->Data(index.column()); + */ +} + +Qt::ItemFlags RegistryKeyTableModel::flags(const QModelIndex &index) const { + if(!index.isValid()) return 0; + + return Qt::ItemIsEnabled | Qt::ItemIsSelectable; +} + +QVariant RegistryKeyTableModel::headerData(int section, + Qt::Orientation orientation, + int role) const +{ + // Only horizontal header is supported + if(orientation!=Qt::Horizontal) return QVariant(); + + switch(role) { + case Qt::TextAlignmentRole: + // Handle text alignment + if(section==2) return Qt::AlignLeft; + else return Qt::AlignCenter; + break; + case Qt::DisplayRole: + // Header text + return this->p_keys->Data(section); + break; + default: + return QVariant(); + } +} + +QModelIndex RegistryKeyTableModel::index(int row, + int column, + const QModelIndex &parent) const +{ + if(!this->hasIndex(row,column,parent)) return QModelIndex(); + + RegistryKey *p_key=this->p_keys->Key(row); + + return this->createIndex(row,column,p_key); +} + +int RegistryKeyTableModel::rowCount(const QModelIndex &parent) const { + // According to Qt doc, when parent in TableModel is valid, we should return 0 + if(parent.isValid()) return 0; + // Get and return row count from the keys list + return this->p_keys->RowCount(); +} + +int RegistryKeyTableModel::columnCount(const QModelIndex &parent) const { + // According to Qt doc, when parent in TableModel is valid, we should return 0 + if(parent.isValid()) return 0; + // There are always 3 columns + return 3; +} + +void RegistryKeyTableModel::SetupModelData(hive_h *hhive, + hive_node_h hive_node) +{ + int i=0; + RegistryKey *p_key; + char *p_key_name; + char *key_value; + int key_value_type; + size_t key_value_len; + + // Get all (key,value) pairs for current node + hive_value_h *node_keys=hivex_node_values(hhive,hive_node); + if(node_keys==NULL) return; + + // Add all (key,value) pairs to the key list + while(node_keys[i]) { + // Get key name + p_key_name=hivex_value_key(hhive,node_keys[i]); + if(p_key_name==NULL) continue; + // Get key value and type + key_value=hivex_value_value(hhive, + node_keys[i], + (hive_type*)&key_value_type, + &key_value_len); + if(key_value==NULL) continue; + + // Add infos to key list + p_key=new RegistryKey(QList()<< + QString(strlen(p_key_name) ? + p_key_name : "(default)")<< + QVariant(key_value_type)<< + QByteArray(key_value,key_value_len)); + this->p_keys->Append(p_key); + i++; + } + free(node_keys); +} + +QString RegistryKeyTableModel::ValueToString(QByteArray &value, + int value_type) const +{ + QString ret=""; + int i=0; + + #define ToHexStr() { \ + for(i=0;i * +* * +* Forensic Registry EDitor (fred) is a M$ registry hive editor for Linux with * +* special feautures useful during forensic analysis. * +* * +* This program is free software: you can redistribute it and/or modify it * +* under the terms of the GNU General Public License as published by the Free * +* Software Foundation, either version 3 of the License, or (at your option) * +* any later version. * +* * +* This program is distributed in the hope that it will be useful, but WITHOUT * +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * +* more details. * +* * +* You should have received a copy of the GNU General Public License along with * +* this program. If not, see . * +*******************************************************************************/ + +#ifndef REGISTRYKEYTABLEMODEL_H +#define REGISTRYKEYTABLEMODEL_H + +#include + +#include "registrykey.h" + +#include + +class RegistryKeyTableModel : public QAbstractTableModel { + Q_OBJECT + + public: + enum AdditionalRoles { + AdditionalRoles_GetRawData=Qt::UserRole + }; + + RegistryKeyTableModel(hive_h *hhive, + hive_node_h hive_node, + QObject *p_parent=0); + ~RegistryKeyTableModel(); + + QVariant data(const QModelIndex &index, int role) const; + Qt::ItemFlags flags(const QModelIndex &index) const; + QVariant headerData(int section, + Qt::Orientation orientation, + int role=Qt::DisplayRole) const; + QModelIndex index(int row, + int column, + const QModelIndex &parent=QModelIndex()) const; + int rowCount(const QModelIndex &parent=QModelIndex()) const; + int columnCount(const QModelIndex &parent=QModelIndex()) const; + + private: + enum ColumnContent { + ColumnContent_KeyName=0, + ColumnContent_KeyType, + ColumnContent_KeyValue + }; + + RegistryKey *p_keys; + + void SetupModelData(hive_h *hhive, hive_node_h hive_node); + QString ValueToString(QByteArray &value, int value_type) const; + QString TypeToString(int value_type) const; +}; + +#endif // REGISTRYKEYTABLEMODEL_H diff --git a/tags/fred-0.1.0alpha1/registrynode.cpp b/tags/fred-0.1.0alpha1/registrynode.cpp new file mode 100644 index 0000000..0ce436d --- /dev/null +++ b/tags/fred-0.1.0alpha1/registrynode.cpp @@ -0,0 +1,61 @@ +/******************************************************************************* +* fred Copyright (c) 2011 by Gillen Daniel * +* * +* Forensic Registry EDitor (fred) is a M$ registry hive editor for Linux with * +* special feautures useful during forensic analysis. * +* * +* This program is free software: you can redistribute it and/or modify it * +* under the terms of the GNU General Public License as published by the Free * +* Software Foundation, either version 3 of the License, or (at your option) * +* any later version. * +* * +* This program is distributed in the hope that it will be useful, but WITHOUT * +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * +* more details. * +* * +* You should have received a copy of the GNU General Public License along with * +* this program. If not, see . * +*******************************************************************************/ + +#include "registrynode.h" + +RegistryNode::RegistryNode(const QString name, + RegistryNode *p_parent) +{ + this->p_parent_node=p_parent; + this->node_name=name; +} + +RegistryNode::~RegistryNode() { + qDeleteAll(this->child_nodes); +} + +void RegistryNode::AppendChild(RegistryNode *p_child) { + this->child_nodes.append(p_child); +} + +RegistryNode* RegistryNode::child(uint64_t row) { + return this->child_nodes.value(row); +} + +uint64_t RegistryNode::childCount() const { + return this->child_nodes.count(); +} + +QString RegistryNode::data() const { + return this->node_name; +} + +uint64_t RegistryNode::row() const { + if(this->p_parent_node) { + return this->p_parent_node-> + child_nodes.indexOf(const_cast(this)); + } else { + return 0; + } +} + +RegistryNode *RegistryNode::parent() { + return this->p_parent_node; +} diff --git a/tags/fred-0.1.0alpha1/registrynode.h b/tags/fred-0.1.0alpha1/registrynode.h new file mode 100644 index 0000000..27965d3 --- /dev/null +++ b/tags/fred-0.1.0alpha1/registrynode.h @@ -0,0 +1,47 @@ +/******************************************************************************* +* fred Copyright (c) 2011 by Gillen Daniel * +* * +* Forensic Registry EDitor (fred) is a M$ registry hive editor for Linux with * +* special feautures useful during forensic analysis. * +* * +* This program is free software: you can redistribute it and/or modify it * +* under the terms of the GNU General Public License as published by the Free * +* Software Foundation, either version 3 of the License, or (at your option) * +* any later version. * +* * +* This program is distributed in the hope that it will be useful, but WITHOUT * +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * +* more details. * +* * +* You should have received a copy of the GNU General Public License along with * +* this program. If not, see . * +*******************************************************************************/ + +#ifndef REGISTRYNODE_H +#define REGISTRYNODE_H + +#include +#include + +#include + +class RegistryNode { + public: + RegistryNode(const QString name, RegistryNode *p_parent=0); + ~RegistryNode(); + + void AppendChild(RegistryNode *p_child); + RegistryNode *child(uint64_t row); + uint64_t childCount() const; + QString data() const; + uint64_t row() const; + RegistryNode *parent(); + + private: + QList child_nodes; + QString node_name; + RegistryNode *p_parent_node; +}; + +#endif // REGISTRYNODE_H diff --git a/tags/fred-0.1.0alpha1/registrynodetreemodel.cpp b/tags/fred-0.1.0alpha1/registrynodetreemodel.cpp new file mode 100644 index 0000000..330878c --- /dev/null +++ b/tags/fred-0.1.0alpha1/registrynodetreemodel.cpp @@ -0,0 +1,141 @@ +/******************************************************************************* +* fred Copyright (c) 2011 by Gillen Daniel * +* * +* Forensic Registry EDitor (fred) is a M$ registry hive editor for Linux with * +* special feautures useful during forensic analysis. * +* * +* This program is free software: you can redistribute it and/or modify it * +* under the terms of the GNU General Public License as published by the Free * +* Software Foundation, either version 3 of the License, or (at your option) * +* any later version. * +* * +* This program is distributed in the hope that it will be useful, but WITHOUT * +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * +* more details. * +* * +* You should have received a copy of the GNU General Public License along with * +* this program. If not, see . * +*******************************************************************************/ + +#include "registrynodetreemodel.h" + +#include + +RegistryNodeTreeModel::RegistryNodeTreeModel(hive_h *hhive, + hive_node_h hive_root_node, + QObject *p_parent) + : QAbstractItemModel(p_parent) +{ + Q_UNUSED(p_parent); + this->p_root_node=new RegistryNode("ROOT"); + this->SetupModelData(hhive, + hive_root_node, + this->p_root_node); +} + +RegistryNodeTreeModel::~RegistryNodeTreeModel() { + delete this->p_root_node; +} + +QVariant RegistryNodeTreeModel::data(const QModelIndex &index, int role) const +{ + if(!index.isValid()) return QVariant(); + if(role!=Qt::DisplayRole) return QVariant(); + + RegistryNode *p_node=static_cast(index.internalPointer()); + + return p_node->data(); +} + +Qt::ItemFlags RegistryNodeTreeModel::flags(const QModelIndex &index) const { + if(!index.isValid()) return 0; + return Qt::ItemIsEnabled | Qt::ItemIsSelectable; +} + +QVariant RegistryNodeTreeModel::headerData(int section, + Qt::Orientation orientation, + int role) const +{ + Q_UNUSED(section); + if(orientation==Qt::Horizontal && role==Qt::DisplayRole) { + return QVariant("Registry key folders"); + } else { + return QVariant(); + } +} + +QModelIndex RegistryNodeTreeModel::index(int row, + int column, + const QModelIndex &parent) const +{ + if(!this->hasIndex(row,column,parent)) return QModelIndex(); + + RegistryNode *p_parent_node; + if(!parent.isValid()) { + p_parent_node=this->p_root_node; + } else { + p_parent_node=static_cast(parent.internalPointer()); + } + + RegistryNode *p_child_node=p_parent_node->child(row); + if(p_child_node) { + return this->createIndex(row,column,p_child_node); + } else { + return QModelIndex(); + } +} + +QModelIndex RegistryNodeTreeModel::parent(const QModelIndex &index) const { + if(!index.isValid()) return QModelIndex(); + + RegistryNode *p_child_node= + static_cast(index.internalPointer()); + RegistryNode *p_parent_node=p_child_node->parent(); + + if(p_parent_node==this->p_root_node) { + return QModelIndex(); + } else { + return this->createIndex(p_parent_node->row(),0,p_parent_node); + } +} + +int RegistryNodeTreeModel::rowCount(const QModelIndex &parent) const { + if(parent.column()>0) return 0; + + RegistryNode *p_parent_node; + if(!parent.isValid()) { + p_parent_node=this->p_root_node; + } else { + p_parent_node=static_cast(parent.internalPointer()); + } + + return p_parent_node->childCount(); +} + +int RegistryNodeTreeModel::columnCount(const QModelIndex &parent) const { + Q_UNUSED(parent); + return 1; +} + +void RegistryNodeTreeModel::SetupModelData(hive_h *hhive, + hive_node_h hive_node, + RegistryNode *p_parent) +{ + int i=0; + RegistryNode *p_node; + + // Get all sub nodes of current hive node + hive_node_h *p_hive_children=hivex_node_children(hhive,hive_node); + if(p_hive_children==NULL) return; + + // Recursivly iterate over all sub nodes + while(p_hive_children[i]) { + p_node=new RegistryNode(QString(hivex_node_name(hhive,p_hive_children[i])), + p_parent); + p_parent->AppendChild(p_node); + this->SetupModelData(hhive,p_hive_children[i],p_node); + i++; + } + free(p_hive_children); +} diff --git a/tags/fred-0.1.0alpha1/registrynodetreemodel.h b/tags/fred-0.1.0alpha1/registrynodetreemodel.h new file mode 100644 index 0000000..b699c2e --- /dev/null +++ b/tags/fred-0.1.0alpha1/registrynodetreemodel.h @@ -0,0 +1,58 @@ +/******************************************************************************* +* fred Copyright (c) 2011 by Gillen Daniel * +* * +* Forensic Registry EDitor (fred) is a M$ registry hive editor for Linux with * +* special feautures useful during forensic analysis. * +* * +* This program is free software: you can redistribute it and/or modify it * +* under the terms of the GNU General Public License as published by the Free * +* Software Foundation, either version 3 of the License, or (at your option) * +* any later version. * +* * +* This program is distributed in the hope that it will be useful, but WITHOUT * +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * +* more details. * +* * +* You should have received a copy of the GNU General Public License along with * +* this program. If not, see . * +*******************************************************************************/ + +#ifndef REGISTRYNODETREEMODEL_H +#define REGISTRYNODETREEMODEL_H + +#include + +#include "registrynode.h" + +#include + +class RegistryNodeTreeModel : public QAbstractItemModel { + Q_OBJECT + + public: + RegistryNodeTreeModel(hive_h *hhive, + hive_node_h hive_root_node, + QObject *p_parent=0); + ~RegistryNodeTreeModel(); + + QVariant data(const QModelIndex &index, int role) const; + Qt::ItemFlags flags(const QModelIndex &index) const; + QVariant headerData(int section, + Qt::Orientation orientation, + int role=Qt::DisplayRole) const; + QModelIndex index(int row, + int column, + const QModelIndex &parent=QModelIndex()) const; + QModelIndex parent(const QModelIndex &index) const; + int rowCount(const QModelIndex &parent=QModelIndex()) const; + int columnCount(const QModelIndex &parent=QModelIndex()) const; + + private: + void SetupModelData(hive_h *hhive, + hive_node_h hive_node, + RegistryNode *p_parent); + RegistryNode *p_root_node; +}; + +#endif // REGISTRYNODETREEMODEL_H diff --git a/tags/fred-0.1.0alpha1/resources/fred.desktop b/tags/fred-0.1.0alpha1/resources/fred.desktop new file mode 100755 index 0000000..8e16128 --- /dev/null +++ b/tags/fred-0.1.0alpha1/resources/fred.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Version=1.0 +Encoding=UTF-8 +Name=Fred +Type=Application +Comment=M$ registry hive editor +Terminal=false +Exec=fred +Icon=fred +Categories=System; +StartupNotify=true diff --git a/tags/fred-0.1.0alpha1/resources/fred.png b/tags/fred-0.1.0alpha1/resources/fred.png new file mode 100644 index 0000000..6e1124c Binary files /dev/null and b/tags/fred-0.1.0alpha1/resources/fred.png differ diff --git a/tags/fred-0.1.0alpha1/resources/regedit.gif b/tags/fred-0.1.0alpha1/resources/regedit.gif new file mode 100644 index 0000000..e66d4d4 Binary files /dev/null and b/tags/fred-0.1.0alpha1/resources/regedit.gif differ diff --git a/tags/fred-0.1.0alpha1/resources/tux.png b/tags/fred-0.1.0alpha1/resources/tux.png new file mode 100644 index 0000000..33294b0 Binary files /dev/null and b/tags/fred-0.1.0alpha1/resources/tux.png differ diff --git a/tags/fred-0.1.0alpha1/resources/tux.xcf b/tags/fred-0.1.0alpha1/resources/tux.xcf new file mode 100644 index 0000000..676afc2 Binary files /dev/null and b/tags/fred-0.1.0alpha1/resources/tux.xcf differ diff --git a/trunk/report_templates/SAM_UserAccounts.fred b/trunk/report_templates/SAM_UserAccounts.fred index 58a1efa..cab7036 100644 --- a/trunk/report_templates/SAM_UserAccounts.fred +++ b/trunk/report_templates/SAM_UserAccounts.fred @@ -1,9 +1,9 @@ - +