openlp-core team mailing list archive
-
openlp-core team
-
Mailing list archive
-
Message #33768
[Merge] lp:~raoul-snyman/openlp/wix-packaging into lp:openlp/packaging
Raoul Snyman has proposed merging lp:~raoul-snyman/openlp/wix-packaging into lp:openlp/packaging.
Commit message:
Build a Windows Installer (MSI) file instead of using InnoSetup
Requested reviews:
OpenLP Core (openlp-core)
For more details, see:
https://code.launchpad.net/~raoul-snyman/openlp/wix-packaging/+merge/365880
Build a Windows Installer (MSI) file instead of using InnoSetup
--
Your team OpenLP Core is requested to review the proposed merge of lp:~raoul-snyman/openlp/wix-packaging into lp:openlp/packaging.
=== modified file 'builders/builder.py'
--- builders/builder.py 2019-02-18 20:10:59 +0000
+++ builders/builder.py 2019-04-11 20:55:56 +0000
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
-# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
+# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
###############################################################################
# OpenLP - Open Source Lyrics Projection #
@@ -276,8 +276,11 @@
"""
self._print('Running PyInstaller...')
os.chdir(self.work_path)
- cmd = [self.python,
- self.pyinstaller_exe,
+ if self.pyinstaller_exe.endswith('.py'):
+ cmd = [self.python, self.pyinstaller_exe]
+ else:
+ cmd = [self.pyinstaller_exe]
+ cmd.extend([
'--clean',
'--noconfirm',
'--windowed',
@@ -287,7 +290,8 @@
'-i', self.icon_path,
'-n', 'OpenLP',
*self.get_extra_parameters(), # Adds any extra parameters we wish to use
- self.openlp_script]
+ self.openlp_script
+ ])
if self.args.verbose:
cmd.append('--log-level=DEBUG')
else:
=== modified file 'builders/windows-builder.py'
--- builders/windows-builder.py 2019-03-13 21:00:05 +0000
+++ builders/windows-builder.py 2019-04-11 20:55:56 +0000
@@ -1,10 +1,10 @@
# -*- coding: utf-8 -*-
-# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
+# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
-# Copyright (c) 2004-2016 OpenLP Developers #
+# Copyright (c) OpenLP Developers #
# --------------------------------------------------------------------------- #
# This program is free software; you can redistribute it and/or modify it #
# under the terms of the GNU General Public License as published by the Free #
@@ -36,8 +36,9 @@
This script expects the precompiled, installable version of PyEnchant to be
installed. You can find this on the PyEnchant site.
-Inno Setup 5
- Inno Setup should be installed into "C:\\%PROGRAMFILES%\\Inno Setup 5"
+WiX Toolset
+ The toolset should be installed into "C:\\%PROGRAMFILES%\\WiX Toolset v3.11"
+ or similar.
Sphinx
This is used to build the documentation. The documentation trunk must be at
@@ -61,15 +62,6 @@
This script, of course. It should be in the "windows-installer" directory
at the same level as OpenLP trunk.
-psvince.dll
- This dll is used during the actual install of OpenLP to check if OpenLP is
- running on the users machine prior to the setup. If OpenLP is running,
- the install will fail. The dll can be obtained from here:
-
- http://www.vincenzo.net/isxkb/index.php?title=PSVince
-
- The dll is presently included with this script.
-
Mako
Mako Templates for Python. This package is required for building the
remote plugin. It can be installed by going to your
@@ -83,11 +75,6 @@
mupdf.com, extract it, and set the mutoolbin option in the config file to
point to mutool.exe.
-MediaInfo
- Required for the media plugin. Download the 32-bit CLI windows build from
- https://mediaarea.net/nn/MediaInfo/Download/Windows and set the
- mediainfobin option in the config file to point to MediaInfo.exe.
-
Portable App Builds
The following are required if you are planning to make a portable build of
OpenLP. The portable build conforms to the standards published by
@@ -112,8 +99,12 @@
import glob
import sys
from distutils import dir_util
+from hashlib import md5
from shutil import copy, move, rmtree
+from lxml.etree import fromstring, tostring
+from lxml.builder import E
+
from builder import Builder
@@ -123,29 +114,107 @@
to build a Windows installer.
"""
- def _create_innosetup_file(self):
- """
- Create an InnoSetup file pointing to the branch being built.
- """
- self._print('Creating Inno Setup file...')
- config_dir = os.path.dirname(self.config_path)
- with open(os.path.join(config_dir, 'OpenLP.iss.default'), 'r') as input_file, \
- open(os.path.join(config_dir, 'OpenLP.iss'), 'w') as output_file:
- content = input_file.read()
- content = content.replace('%(branch)s', self.branch_path)
- content = content.replace('%(display_version)s', self.version.replace('-bzr', '.'))
- content = content.replace('%(arch)s', self.arch)
- output_file.write(content)
-
- def _run_innosetup(self):
- """
- Run InnoSetup to create an installer.
- """
- self._print('Running Inno Setup...')
- config_dir = os.path.dirname(self.config_path)
- os.chdir(config_dir)
- self._run_command([self.innosetup_exe, os.path.join(config_dir, 'OpenLP.iss'), '/q'],
- 'Error running InnoSetup')
+ def _walk_dirs(self, dir_dict, path):
+ """
+ Walk a dictionary according to path
+ """
+ parts = path.split(os.sep)
+ search_key = parts.pop(0)
+ if search_key in dir_dict.keys():
+ if not parts:
+ return dir_dict[search_key]
+ else:
+ return self._walk_dirs(dir_dict[search_key], os.sep.join(parts))
+ else:
+ return None
+
+ def _get_fragments_from_files(self, start_dir):
+ """
+ Walk down a directory recursively and build up the XML for WiX
+ """
+ start_base, start_path = os.path.split(start_dir)
+ element = E.DirectoryRef(Id='INSTALLDIR')
+ directories = {start_path: {'__dir__': element}}
+ components = []
+
+ for root, _, files in os.walk(start_dir):
+ parent = os.sep.join(root.replace(os.path.join(start_base, ''), '').split(os.sep)[:-1])
+ if root == start_dir:
+ path = ''
+ else:
+ path = root.replace(os.path.join(start_dir, ''), '')
+ base = os.path.basename(root)
+ if root != start_dir:
+ dir_id = 'dir_{parent}_{base}'.format(parent=parent.replace(os.sep, '_'), base=base)
+ element = E.Directory(Id=dir_id, Name=base)
+ new_dir = {'__dir__': element}
+ parent_dir = self._walk_dirs(directories, parent)
+ parent_dir[base] = new_dir
+ parent_dir['__dir__'].append(element)
+ for fname in files:
+ source = os.path.join(path, fname) if path else fname
+ source_id = md5(source.encode('utf8')).hexdigest()
+ file_id = 'file_{source_id}'.format(source_id=source_id)
+ component_id = 'cmp_{source_id}'.format(source_id=source_id)
+ if self.arch == 'x64':
+ file_ = E.File(Id=file_id, KeyPath="yes", Source=source, ProcessorArchitecture='x64')
+ component = E.Component(file_, Id=component_id, Guid='*', Win64='yes')
+ else:
+ file_ = E.File(Id=file_id, KeyPath="yes", Source=source)
+ component = E.Component(file_, Id=component_id, Guid='*')
+ element.append(component)
+ components.append(component)
+
+ files_fragment = E.Fragment(directories[start_path]['__dir__'])
+ comps_fragment = E.Fragment(E.ComponentGroup(*[E.ComponentRef(Id=c.attrib['Id']) for c in components],
+ Id='Files'))
+ return files_fragment, comps_fragment
+
+ def _create_wix_file(self):
+ """
+ Create a WiX project file
+ """
+ self._print('Creating WiX file...')
+ config_dir = os.path.dirname(self.config_path)
+ self._print_verbose('Reading base WiX file')
+ with open(os.path.join(config_dir, 'OpenLP-base.wxs'), 'rt') as base_file:
+ xml = base_file.read()
+ progfilefolder = 'ProgramFiles64Folder' if self.arch == 'x64' else 'ProgramFilesFolder'
+ xml = xml % dict(dialog=os.path.join(config_dir, 'WizardMain.bmp'),
+ banner=os.path.join(config_dir, 'WizardBanner.bmp'),
+ license=os.path.join(config_dir, 'gpl-2.0.rtf'),
+ platform=self.arch,
+ progfilefolder=progfilefolder)
+ tree = fromstring(xml.encode('utf8'))
+ self._print_verbose('Creating XML fragments from files and directories')
+ fragments = self._get_fragments_from_files(self.dist_path)
+ self._print_verbose('Inserting XML fragments into base WiX file')
+ for fragment in fragments:
+ tree.append(fragment)
+ self._print_verbose('Writing new WiX file')
+ with open(os.path.join(config_dir, 'OpenLP.wxs'), 'wb') as f:
+ f.write(tostring(tree, encoding='utf-8', xml_declaration=True, pretty_print=True))
+
+ def _run_wix_tools(self):
+ """
+ Run the WiX toolset to create an installer
+ """
+ self._print('Running WiX tools...')
+ if self.arch == 'x64':
+ version = '{}-x64'.format(self.version)
+ else:
+ version = self.version
+ msi_file = os.path.abspath(os.path.join(self.dist_path, '..', 'OpenLP-{}.msi'.format(version)))
+ if os.path.exists(msi_file):
+ self._print_verbose('Removing old MSI file')
+ os.unlink(msi_file)
+ config_dir = os.path.dirname(self.config_path)
+ os.chdir(self.dist_path)
+ self._run_command([self.candle_exe, '-ext', 'WiXUtilExtension', os.path.join(config_dir, 'OpenLP.wxs')],
+ 'Error running WiX tool: candle')
+ self._run_command([self.light_exe, '-ext', 'WiXUtilExtension', '-ext', 'WixUIExtension', 'OpenLP.wixobj',
+ '-o', msi_file],
+ 'Error running WiX tool: light')
def _create_portableapp_structure(self):
"""
@@ -303,8 +372,6 @@
copy(self.icon_path, os.path.join(self.dist_path, 'OpenLP.ico'))
self._print_verbose('... LICENSE.txt')
copy(self.license_path, os.path.join(self.dist_path, 'LICENSE.txt'))
- self._print_verbose('... psvince.dll')
- copy(self.psvince_exe, os.path.join(self.dist_path, 'psvince.dll'))
if os.path.isfile(os.path.join(self.helpfile_path, 'OpenLP.chm')):
self._print_verbose('... OpenLP.chm')
copy(os.path.join(self.helpfile_path, 'OpenLP.chm'), os.path.join(self.dist_path, 'OpenLP.chm'))
@@ -315,11 +382,6 @@
copy(os.path.join(self.mutool_exe), os.path.join(self.dist_path, 'mutool.exe'))
else:
self._print('... WARNING: mutool.exe not found')
- self._print_verbose('... MediaInfo.exe')
- if self.mediainfo_exe and os.path.isfile(self.mediainfo_exe):
- copy(os.path.join(self.mediainfo_exe), os.path.join(self.dist_path, 'MediaInfo.exe'))
- else:
- self._print('... WARNING: MediaInfo.exe not found')
def after_run_sphinx(self):
"""
@@ -333,8 +395,8 @@
"""
Build the installer
"""
- self._create_innosetup_file()
- self._run_innosetup()
+ self._create_wix_file()
+ self._run_wix_tools()
if self.args.portable:
self._run_portableapp_builder()
=== added file 'windows/OpenLP-base.wxs'
--- windows/OpenLP-base.wxs 1970-01-01 00:00:00 +0000
+++ windows/OpenLP-base.wxs 2019-04-11 20:55:56 +0000
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
+ xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
+ <Product Name="OpenLP" Manufacturer="OpenLP" Id="{98092172-3875-47d3-8DBE-3EB0D5A57CE7}"
+ UpgradeCode="{8C5881AC-8F1E-4937-BB99-B823FABF18F0}" Language="1033" Codepage="1252" Version="2.5.0">
+ <Package Id="*" Keywords="Installer" Description="Free open source church worship presentation software"
+ Comments="OpenLP is open source under the GNU General Public License" Manufacturer="OpenLP Developers"
+ InstallerVersion="251" Languages="1033" Compressed="yes" SummaryCodepage="1252" Platform="%(platform)s"/>
+ <Condition Message="You need to be an administrator to install this product.">Privileged</Condition>
+ <Media Id="1" Cabinet="openlp.cab" EmbedCab="yes" CompressionLevel="high"/>
+ <Property Id="WIXUI_INSTALLDIR" Value="INSTALLDIR" />
+ <Property Id="ARPPRODUCTICON" Value="OpenLP.ico" />
+ <Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Launch OpenLP" />
+ <Property Id="WixShellExecTarget" Value="[#file_e368869eb54b01e2288a3359b1cf51f8]" />
+ <CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" />
+ <UI>
+ <UIRef Id="WixUI_InstallDir" />
+ <Publish Dialog="ExitDialog"
+ Control="Finish"
+ Event="DoAction"
+ Value="LaunchApplication">WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed</Publish>
+ </UI>
+ <WixVariable Id="WixUILicenseRtf" Value="%(license)s" />
+ <WixVariable Id="WixUIDialogBmp" Value="%(dialog)s" />
+ <WixVariable Id="WixUIBannerBmp" Value="%(banner)s" />
+ <Directory Id="TARGETDIR" Name="SourceDir">
+ <Directory Id="%(progfilefolder)s">
+ <Directory Id="INSTALLDIR" Name="OpenLP"/>
+ </Directory>
+ <Directory Id="ProgramMenuFolder" Name="Programs">
+ <Directory Id="ProgramMenuDir" Name="OpenLP">
+ <Component Id="ProgramMenuDir" Guid="{7AABE54C-5B03-4049-AA85-E18B787A19C7}">
+ <RemoveFolder Id="ProgramMenuDir" On="uninstall" />
+ <RegistryValue Root="HKCU" Key="Software\OpenLP\OpenLP" Type="string" Value="" KeyPath="yes" />
+ <Shortcut Id="ApplicationStartMenuShortcut"
+ Name="OpenLP"
+ Description="Open Source Worship Presentation Software"
+ Target="[#file_e368869eb54b01e2288a3359b1cf51f8]"
+ Icon="OpenLP.ico"
+ WorkingDirectory="RootDirectory"/>
+ <Shortcut Id="DebugStartMenuShortcut"
+ Name="OpenLP (Debug)"
+ Description="Run OpenLP with debug logging enabled"
+ Target="[#file_e368869eb54b01e2288a3359b1cf51f8]"
+ Arguments="--log-level debug"
+ Icon="OpenLP.ico"
+ WorkingDirectory="RootDirectory"/>
+ <Shortcut Id="HelpStartMenuShortcut"
+ Name="OpenLP Help"
+ Description="Help file for OpenLP"
+ Target="[#file_436f15ee9b174c85745878fe09b6d47e]"
+ WorkingDirectory="RootDirectory"/>
+ <util:InternetShortcut Id="OpenLPWebSite"
+ Name="OpenLP on the Web"
+ Target="http://openlp.org/"/>
+ <util:InternetShortcut Id="OpenLPForums"
+ Name="Get support for OpenLP"
+ Target="http://forums.openlp.org/"/>
+ <Shortcut Id="UninstallProduct"
+ Name="Uninstall OpenLP"
+ Target="[SystemFolder]msiexec.exe"
+ Arguments="/x [ProductCode]"
+ Description="Removes OpenLP from your computer" />
+ </Component>
+ </Directory>
+ </Directory>
+ <Directory Id="DesktopFolder" Name="Desktop" />
+ </Directory>
+ <DirectoryRef Id="INSTALLDIR">
+ <Directory Id="RootDirectory" Name="OpenLP" />
+ </DirectoryRef>
+ <Feature Id="Complete" Title="Complete" Description="The OpenLP program files" Level="1"
+ ConfigurableDirectory="INSTALLDIR" AllowAdvertise="no" InstallDefault="local" Absent="disallow">
+ <ComponentGroupRef Id="Files"/>
+ <ComponentRef Id="ProgramMenuDir"/>
+ </Feature>
+ <Icon Id="OpenLP.ico" SourceFile="OpenLP.ico"/>
+ </Product>
+</Wix>
=== removed file 'windows/OpenLP.iss.default'
--- windows/OpenLP.iss.default 2019-03-11 13:46:12 +0000
+++ windows/OpenLP.iss.default 1970-01-01 00:00:00 +0000
@@ -1,187 +0,0 @@
-; Script generated by the Inno Setup Script Wizard.
-; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
-
-#define AppName "OpenLP"
-#define AppVerName "OpenLP %(display_version)s"
-#define AppVersion "%(display_version)s"
-#define AppPublisher "OpenLP Developers"
-#define AppURL "http://openlp.org/"
-#define AppExeName "OpenLP.exe"
-#define Arch "%(arch)s"
-
-#define FileHandle FileOpen("%(branch)s\dist\OpenLP\.version")
-#define FileLine FileRead(FileHandle)
-#define RealVersion FileLine
-#expr FileClose(FileHandle)
-
-[Setup]
-; NOTE: The value of AppId uniquely identifies this application.
-; Do not use the same AppId value in installers for other applications.
-; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
-AppID={{AA7699FA-B2D2-43F4-8A70-D497D03C9485}
-AppName={#AppName}
-AppVerName={cm:NameAndVersion,{#AppName},{#AppVersion}}
-AppVersion={#AppVersion}
-AppPublisher={#AppPublisher}
-AppPublisherURL={#AppURL}
-AppSupportURL={#AppURL}
-AppUpdatesURL={#AppURL}
-DefaultDirName={pf}\{#AppName}
-DefaultGroupName={#AppName}
-AllowNoIcons=true
-LicenseFile=LICENSE.txt
-OutputDir=%(branch)s\dist\
-OutputBaseFilename=OpenLP-{#RealVersion}-{#Arch}-setup
-Compression=lzma/Max
-SolidCompression=true
-SetupIconFile=OpenLP.ico
-VersionInfoVersion={#AppVersion}
-WizardImageFile=WizImageBig.bmp
-WizardSmallImageFile=WizImageSmall.bmp
-ChangesAssociations=true
-
-[Languages]
-Name: english; MessagesFile: compiler:Default.isl
-Name: brazilianportuguese; MessagesFile: compiler:Languages\BrazilianPortuguese.isl
-Name: catalan; MessagesFile: compiler:Languages\Catalan.isl
-Name: czech; MessagesFile: compiler:Languages\Czech.isl
-Name: danish; MessagesFile: compiler:Languages\Danish.isl
-Name: dutch; MessagesFile: compiler:Languages\Dutch.isl
-Name: finnish; MessagesFile: compiler:Languages\Finnish.isl
-Name: french; MessagesFile: compiler:Languages\French.isl
-Name: german; MessagesFile: compiler:Languages\German.isl
-Name: hebrew; MessagesFile: compiler:Languages\Hebrew.isl
-Name: hungarian; MessagesFile: compiler:Languages\Hungarian.isl
-Name: italian; MessagesFile: compiler:Languages\Italian.isl
-Name: japanese; MessagesFile: compiler:Languages\Japanese.isl
-Name: norwegian; MessagesFile: compiler:Languages\Norwegian.isl
-Name: polish; MessagesFile: compiler:Languages\Polish.isl
-Name: portuguese; MessagesFile: compiler:Languages\Portuguese.isl
-Name: russian; MessagesFile: compiler:Languages\Russian.isl
-Name: slovenian; MessagesFile: compiler:Languages\Slovenian.isl
-Name: spanish; MessagesFile: compiler:Languages\Spanish.isl
-
-[Tasks]
-Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}
-Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; OnlyBelowVersion: 0, 6.1
-
-[Files]
-Source: %(branch)s\dist\OpenLP\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
-; DLL used to check if the target program is running at install time
-Source: psvince.dll; flags: dontcopy
-; psvince is installed in {app} folder, so it will be loaded at
-; uninstall time to check if the target program is running
-Source: psvince.dll; DestDir: {app}
-
-[Icons]
-Name: {group}\{#AppName}; Filename: {app}\{#AppExeName}
-Name: {group}\{#AppName} (Debug); Filename: {app}\{#AppExeName}; Parameters: -l debug
-Name: {group}\{#AppName} Help; Filename: {app}\{#AppName}.chm; Check: FileExists(ExpandConstant('{app}\{#AppName}.chm'))
-Name: {group}\{cm:ProgramOnTheWeb,{#AppName}}; Filename: {#AppURL}
-Name: {group}\{cm:UninstallProgram,{#AppName}}; Filename: {uninstallexe}
-Name: {commondesktop}\{#AppName}; Filename: {app}\{#AppExeName}; Tasks: desktopicon
-Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#AppName}; Filename: {app}\{#AppExeName}; Tasks: quicklaunchicon
-
-[Run]
-Filename: {app}\{#AppExeName}; Description: {cm:LaunchProgram,{#AppName}}; Flags: nowait postinstall skipifsilent
-
-[Registry]
-Root: HKCR; Subkey: .osz; ValueType: string; ValueName: ; ValueData: OpenLP; Flags: uninsdeletevalue
-Root: HKCR; Subkey: .oszl; ValueType: string; ValueName: ; ValueData: OpenLP; Flags: uninsdeletevalue
-Root: HKCR; Subkey: OpenLP; ValueType: string; ValueName: ; ValueData: OpenLP Service; Flags: uninsdeletekey
-Root: HKCR; Subkey: OpenLP\DefaultIcon; ValueType: string; ValueName: ; ValueData: {app}\OpenLP.exe,0
-Root: HKCR; Subkey: OpenLP\shell\open\command; ValueType: string; ValueName: ; ValueData: """{app}\OpenLP.exe"" ""%1"""
-
-[UninstallDelete]
-; Remove support directory created when program is run:
-Type: filesandordirs; Name: {app}\support
-; Remove program directory if empty:
-Name: {app}; Type: dirifempty
-
-[Code]
-// Function to call psvince.dll at install time
-function IsModuleLoadedInstall(modulename: AnsiString ): Boolean;
-external 'IsModuleLoaded@files:psvince.dll stdcall setuponly';
-
-// Function to call psvince.dll at uninstall time
-function IsModuleLoadedUninstall(modulename: AnsiString ): Boolean;
-external 'IsModuleLoaded@{app}\psvince.dll stdcall uninstallonly' ;
-
-function GetUninstallString(): String;
-var
- sUnInstPath: String;
- sUnInstallString: String;
-begin
- sUnInstPath := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\{#emit SetupSetting("AppId")}_is1');
- sUnInstallString := '';
- if not RegQueryStringValue(HKLM, sUnInstPath, 'UninstallString', sUnInstallString) then
- RegQueryStringValue(HKCU, sUnInstPath, 'UninstallString', sUnInstallString);
- Result := sUnInstallString;
-end;
-
-function IsUpgrade(): Boolean;
-begin
- Result := (GetUninstallString() <> '');
-end;
-
-// Return Values:
-// 1 - uninstall string is empty
-// 2 - error executing the UnInstallString
-// 3 - successfully executed the UnInstallString
-function UnInstallOldVersion(): Integer;
-var
- sUnInstallString: String;
- iResultCode: Integer;
-begin
- Result := 0;
- sUnInstallString := GetUninstallString();
- if sUnInstallString <> '' then
- begin
- sUnInstallString := RemoveQuotes(sUnInstallString);
- if Exec(sUnInstallString, '/SILENT /NORESTART /SUPPRESSMSGBOXES','', SW_HIDE, ewWaitUntilTerminated, iResultCode) then
- Result := 3
- else
- Result := 2;
- end
- else
- Result := 1;
-end;
-
-function InitializeSetup(): Boolean;
-begin
- Result := true;
- while IsModuleLoadedInstall( 'OpenLP.exe' ) and Result do
- begin
- if MsgBox( 'Openlp is currently running, please close it to continue the install.',
- mbError, MB_OKCANCEL ) = IDCANCEL then
- begin
- Result := false;
- end;
- end;
-end;
-
-procedure CurStepChanged(CurStep: TSetupStep);
-begin
- if (CurStep=ssInstall) then
- begin
- if (IsUpgrade()) then
- begin
- UnInstallOldVersion();
- end;
- end;
-end;
-
-function InitializeUninstall(): Boolean;
-begin
- Result := true;
- while IsModuleLoadedUninstall( 'OpenLP.exe' ) and Result do
- begin
- if MsgBox( 'Openlp is currently running, please close it to continue the uninstall.',
- mbError, MB_OKCANCEL ) = IDCANCEL then
- begin
- Result := false;
- end;
- end;
-// Unload psvince.dll, otherwise it is not deleted
- UnloadDLL(ExpandConstant('{app}\psvince.dll'));
-end;
=== added file 'windows/WizardBanner.bmp'
Binary files windows/WizardBanner.bmp 1970-01-01 00:00:00 +0000 and windows/WizardBanner.bmp 2019-04-11 20:55:56 +0000 differ
=== added file 'windows/WizardMain.bmp'
Binary files windows/WizardMain.bmp 1970-01-01 00:00:00 +0000 and windows/WizardMain.bmp 2019-04-11 20:55:56 +0000 differ
=== modified file 'windows/config-appveyor.ini'
--- windows/config-appveyor.ini 2019-02-15 21:34:14 +0000
+++ windows/config-appveyor.ini 2019-04-11 20:55:56 +0000
@@ -1,14 +1,13 @@
[executables]
-innosetup = %(progfiles)s\Inno Setup 5\ISCC.exe
sphinx = %(pyroot)s\Scripts\sphinx-build.exe
pyinstaller = %(pyroot)s\Scripts\pyinstaller-script.py
htmlhelp = %(progfiles)s\HTML Help Workshop\hhc.exe
-psvince = %(here)s\psvince.dll
lrelease = C:\Qt\5.12\msvc2017\bin\lrelease.exe
portablelauncher = %(here)s\..\..\PortableApps.comLauncher\PortableApps.comLauncherGenerator.exe
portableinstaller = %(here)s\..\..\PortableApps.comInstaller\PortableApps.comInstaller.exe
mutool = %(here)s\..\..\mupdf-1.14.0-windows\mutool.exe
-mediainfo = %(here)s\..\..\MediaInfo\MediaInfo.exe
+candle = %(progfiles)s\WiX Toolset v3.11\bin\candle.exe
+light = %(progfiles)s\WiX Toolset v3.11\bin\light.exe
[paths]
branch = %(projects)s\openlp-branch
=== modified file 'windows/config.ini.default'
--- windows/config.ini.default 2019-02-15 20:19:31 +0000
+++ windows/config.ini.default 2019-04-11 20:55:56 +0000
@@ -1,22 +1,21 @@
[executables]
-innosetup = %(progfiles)s\Inno Setup 5\ISCC.exe
sphinx = %(pyroot)s\Scripts\sphinx-build.exe
pyinstaller = %(here)s\..\pyinstaller\pyinstaller.py
htmlhelp = %(progfiles)s\HTML Help Workshop\hhc.exe
-psvince = %(here)s\psvince.dll
lrelease = %(sitepackages)s\PyQt5\bin\lrelease.exe
portablelauncher = %(progfiles)s\PortableApps.comLauncher\PortableApps.comLauncherGenerator.exe
portableinstaller = %(progfiles)s\PortableApps.comInstaller\PortableApps.comInstaller.exe
mutool = %(here)s\..\mupdf-1.9a-windows\mutool.exe
-mediainfo = %(here)s\..\MediaInfo\MediaInfo.exe
+candle = %(progfiles)s\WiX Toolset v3.11\bin\candle.exe
+light = %(progfiles)s\WiX Toolset v3.11\bin\light.exe
[paths]
branch = %(projects)s\trunk
documentation = %(projects)s\documentation
-icon = %(here)s\OpenLP.ico
-hooks = %(here)s\..\pyinstaller-hooks
+icon = %(here)s\windows\OpenLP.ico
+hooks = %(here)s\pyinstaller-hooks
license = %(here)s\LICENSE.txt
-portable_source = %(here)s\OpenLPPortable
+portable_source = %(here)s\windows\OpenLPPortable
portable_dest = %(projects)s\OpenLPPortable
[transifex]
=== added file 'windows/gpl-2.0.rtf'
--- windows/gpl-2.0.rtf 1970-01-01 00:00:00 +0000
+++ windows/gpl-2.0.rtf 2019-04-11 20:55:56 +0000
@@ -0,0 +1,95 @@
+{\rtf1\ansi\ansicpg1252\uc1\deff0\deflang1033\deflangfe1033{\fonttbl{\f0\fcharset128 Tahoma;}{\f1\fcharset0 Tahoma;}}
+\f0{\colortbl;\red0\green0\blue0;}{\*\generator Wine Riched20 2.0.????;}\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone GNU GENERAL PUBLIC LICENSE}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone Version }{\cf1\fs24\ulnone 2}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone June }{\cf1\fs24\ulnone 1991}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone Copyright }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone C}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone 1989}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone 1991 }{\cf1\fs24\ulnone Free Software Foundation}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone Inc}{\cf1\fs24\ulnone . }\line
+{\cf1\fs24\ulnone 51 }{\cf1\fs24\ulnone Franklin Street}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone Fifth Floor}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone Boston}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone MA }{\cf1\fs24\ulnone 02110}{\cf1\fs24\ulnone -}{\cf1\fs24\ulnone 1301}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone USA}\line
+\line
+{\cf1\fs24\ulnone Everyone is permitted to copy and distribute verbatim copies}\line
+{\cf1\fs24\ulnone of this license document}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone but changing it is not allowed}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone Preamble}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone The licenses for most software are designed to take away your freedom to share and change it}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone By contrast}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone the GNU General Public License is intended to guarantee your}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone freedom to share and change free software}{\cf1\fs24\ulnone --}{\cf1\fs24\ulnone to make sure the software is free for all its users}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone This General Public License applies to most of the Free Software Foundation}{\cf1\fs24\ulnone '}{\cf1\fs24\ulnone s}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone software and to any other program whose authors commit to using it}{\cf1\fs24\ulnone . (}{\cf1\fs24\ulnone Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead}{\cf1\fs24\ulnone .)}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone You can apply it to your programs}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone too}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone When we speak of free software}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone we are referring to freedom}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone not price}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone Our General Public Licenses are designed to make sure that you have the freedom to distribute copies}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone of free software}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone and charge for this service if you wish}{\cf1\fs24\ulnone )}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone that you receive source code or can get it if you want it}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone that you can change the software or use pieces of it in}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone new free programs}{\cf1\fs24\ulnone ; }{\cf1\fs24\ulnone and that you know you can do these things}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone To protect your rights}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone These restrictions translate to}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone certain responsibilities for you if you distribute copies of the software}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone or if you modify it}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone For example}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone if you distribute copies of such a program}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone whether gratis or for a fee}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone you must give the recipients all the rights that you have}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone You must make sure that they}{\cf1\fs24\ulnone ,}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone too}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone receive or can get the source code}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone And you must show them these terms so they know their rights}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone We protect your rights with two steps}{\cf1\fs24\ulnone : (}{\cf1\fs24\ulnone 1}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone copyright the software}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone and }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone 2}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone offer you this license which gives you legal permission to copy}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone distribute and}{\cf1\fs24\ulnone /}{\cf1\fs24\ulnone or modify the}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone software}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone Also}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone for each author}{\cf1\fs24\ulnone '}{\cf1\fs24\ulnone s protection and ours}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone we want to make certain that everyone understands that there is no warranty for this free software}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone If the software is modified}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone by someone else and passed on}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone we want its recipients to know that what they have is not the original}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone so that any problems introduced by others will not reflect on the}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone original authors}{\cf1\fs24\ulnone ' }{\cf1\fs24\ulnone reputations}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone Finally}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone any free program is threatened constantly by software patents}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone We wish to avoid the danger that redistributors of a free program will individually obtain patent}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone licenses}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone in effect making the program proprietary}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone To prevent this}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone we have made it clear that any patent must be licensed for everyone}{\cf1\fs24\ulnone '}{\cf1\fs24\ulnone s free use or not licensed at all}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone The precise terms and conditions for copying}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone distribution and modification follow}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone TERMS AND CONDITIONS FOR COPYING}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone DISTRIBUTION AND MODIFICATION}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone 0}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone Public License}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone The }{\cf1\fs24\ulnone "}{\cf1\fs24\ulnone Program}{\cf1\fs24\ulnone "}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone below}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone refers to any such program or work}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone and a }{\cf1\fs24\ulnone "}{\cf1\fs24\ulnone work based on the Program}{\cf1\fs24\ulnone " }{\cf1\fs24\ulnone means either the Program or any derivative work under copyright }{\cf1\fs24\ulnone law}{\cf1\fs24\ulnone :}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone that is to say}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone a work containing the Program or a portion of it}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone either verbatim or with modifications and}{\cf1\fs24\ulnone /}{\cf1\fs24\ulnone or translated into another language}{\cf1\fs24\ulnone . (}{\cf1\fs24\ulnone Hereinafter}{\cf1\fs24\ulnone ,}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone translation is included without limitation in the term}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone "}{\cf1\fs24\ulnone modification}{\cf1\fs24\ulnone ".) }{\cf1\fs24\ulnone Each licensee is addressed as }{\cf1\fs24\ulnone "}{\cf1\fs24\ulnone you}{\cf1\fs24\ulnone ".}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone Activities other than copying}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone distribution and modification are not covered by this License}{\cf1\fs24\ulnone ; }{\cf1\fs24\ulnone they are outside its scope}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone The act of running the Program is not restricted}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone and}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone the output from the Program is covered only if its contents constitute a work based on the Program}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone independent of having been made by running the Program}{\cf1\fs24\ulnone ). }{\cf1\fs24\ulnone Whether that is}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone true depends on what the Program does}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone 1}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone You may copy and distribute verbatim copies of the Program}{\cf1\fs24\ulnone '}{\cf1\fs24\ulnone s source code as you receive it}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone in any medium}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone provided that you conspicuously and appropriately publish on}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone each copy an appropriate copyright notice and disclaimer of warranty}{\cf1\fs24\ulnone ; }{\cf1\fs24\ulnone keep intact all the notices that refer to this License and to the absence of any warranty}{\cf1\fs24\ulnone ; }{\cf1\fs24\ulnone and give any}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone other recipients of the Program a copy of this License along with the Program}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone You may charge a fee for the physical act of transferring a copy}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone and you may at your option offer warranty protection in exchange for a fee}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone 2}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone You may modify your copy or copies of the Program or any portion of it}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone thus forming a work based on the Program}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone and copy and distribute such modifications or work under}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone the terms of Section}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone 1 }{\cf1\fs24\ulnone above}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone provided that you also meet all of these conditions}{\cf1\fs24\ulnone :}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa0\sb0\s-1\cfpat0\cbpat0
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi360\ri0\sa0\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone a}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa0\sb0\s-1\cfpat0\cbpat0
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi360\ri0\sa0\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone b}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone You must cause any work that you distribute or publish}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone that in whole or in part contains or is derived from the Program or any part thereof}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone to be licensed as a whole}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone at no charge to all third parties under the terms of this License}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa0\sb0\s-1\cfpat0\cbpat0
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi360\ri0\sa0\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone c}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone If the modified program normally reads commands interactively when run}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone you must cause it}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone when started running for such interactive use in the most ordinary way}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone to}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone print or display an announcement including an appropriate copyright notice and a notice that there is no warranty}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone or else}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone saying that you provide a warranty}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone and that}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone users may redistribute the program under these conditions}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone and telling the user how to view a copy of this License}{\cf1\fs24\ulnone . (}{\cf1\fs24\ulnone Exception}{\cf1\fs24\ulnone : }{\cf1\fs24\ulnone if the Program itself is interactive but}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone does not normally print such an announcement}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone your work based on the Program is not required to print an announcement}{\cf1\fs24\ulnone .)}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone These requirements apply to the modified work as a whole}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone If identifiable sections of that work are not derived from the Program}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone and can be reasonably considered independent}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone and separate works in themselves}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone then this License}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone and its terms}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone do not apply to those sections when you distribute them as separate works}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone But when you distribute the same}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone sections as part of a whole which is a work based on the Program}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone the distribution of the whole must be on the terms of this License}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone whose permissions for other licensees}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone extend to the entire whole}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone and thus to each and every part regardless of who wrote it}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone Thus}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone it is not the intent of this section to claim rights or contest your rights to work written entirely by you}{\cf1\fs24\ulnone ; }{\cf1\fs24\ulnone rather}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone the intent is to exercise the right to control the}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone distribution of derivative or collective works based on the Program}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone In addition}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone mere aggregation of another work not based on the Program with the Program }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone or with a work based on the Program}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone on a volume of a storage or distribution medium}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone does not bring the other work under the scope of this License}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone 3}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone You may copy and distribute the Program }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone or a work based on it}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone under Section }{\cf1\fs24\ulnone 2}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone in object code or executable form under the terms of Sections }{\cf1\fs24\ulnone 1 }{\cf1\fs24\ulnone and }{\cf1\fs24\ulnone 2 }{\cf1\fs24\ulnone above provided that}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone you also do one of the following}{\cf1\fs24\ulnone :}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa0\sb0\s-1\cfpat0\cbpat0
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi360\ri0\sa0\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone a}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone Accompany it with the complete corresponding machine}{\cf1\fs24\ulnone -}{\cf1\fs24\ulnone readable source code}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone which must be distributed under the terms of Sections }{\cf1\fs24\ulnone 1 }{\cf1\fs24\ulnone and }{\cf1\fs24\ulnone 2 }{\cf1\fs24\ulnone above on a medium customarily}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone used for software interchange}{\cf1\fs24\ulnone ; }{\cf1\fs24\ulnone or}{\cf1\fs24\ulnone ,}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa0\sb0\s-1\cfpat0\cbpat0
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi360\ri0\sa0\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone b}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone Accompany it with a written offer}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone valid for at least three years}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone to give any third party}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone for a charge no more than your cost of physically performing source}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone distribution}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone a complete machine}{\cf1\fs24\ulnone -}{\cf1\fs24\ulnone readable copy of the corresponding source code}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone to be distributed under the terms of Sections }{\cf1\fs24\ulnone 1 }{\cf1\fs24\ulnone and }{\cf1\fs24\ulnone 2 }{\cf1\fs24\ulnone above on a medium customarily used}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone for software interchange}{\cf1\fs24\ulnone ; }{\cf1\fs24\ulnone or}{\cf1\fs24\ulnone ,}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa0\sb0\s-1\cfpat0\cbpat0
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi360\ri0\sa0\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone c}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone Accompany it with the information you received as to the offer to distribute corresponding source code}{\cf1\fs24\ulnone . (}{\cf1\fs24\ulnone This alternative is allowed only for noncommercial distribution}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone and only if you received the program in object code or executable form with such an offer}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone in accord with Subsection b above}{\cf1\fs24\ulnone .)}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone The source code for a work means the preferred form of the work for making modifications to it}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone For an executable work}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone complete source code means all the source code for}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone all modules it contains}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone plus any associated interface definition files}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone plus the scripts used to control compilation and installation of the executable}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone However}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone as a special}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone exception}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone the source code distributed need not include anything that is normally distributed }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone in either source or binary form}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone with the major components }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone compiler}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone kernel}{\cf1\fs24\ulnone ,}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone and so on}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone of the operating system on which the executable runs}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone unless that component itself accompanies the executable}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone If distribution of executable or object code is made by offering access to copy from a designated place}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone then offering equivalent access to copy the source code from the}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone same place counts as distribution of the source code}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone even though third parties are not compelled to copy the source along with the object code}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone 4}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone You may not copy}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone modify}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone sublicense}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone or distribute the Program except as expressly provided under this License}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone Any attempt otherwise to copy}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone modify}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone sublicense or}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone distribute the Program is void}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone and will automatically terminate your rights under this License}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone However}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone parties who have received copies}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone or rights}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone from you under this}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone License will not have their licenses terminated so long as such parties remain in full compliance}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone 5}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone You are not required to accept this License}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone since you have not signed it}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone However}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone nothing else grants you permission to modify or distribute the Program or its}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone derivative works}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone These actions are prohibited by law if you do not accept this License}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone Therefore}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone by modifying or distributing the Program }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone or any work based on the }{\cf1\fs24\ulnone Program}{\cf1\fs24\ulnone )}{\cf1\fs24\ulnone ,}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone you indicate your acceptance of this License to do so}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone and all its terms and conditions for copying}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone distributing or modifying the Program or works based on it}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone 6}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone Each time you redistribute the Program }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone or any work based on the Program}{\cf1\fs24\ulnone )}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone the recipient automatically receives a license from the original licensor to copy}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone distribute}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone or modify the Program subject to these terms and conditions}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone You may not impose any further restrictions on the recipients}{\cf1\fs24\ulnone ' }{\cf1\fs24\ulnone exercise of the rights granted herein}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone You are}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone not responsible for enforcing compliance by third parties to this License}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone 7}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone If}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone as a consequence of a court judgment or allegation of patent infringement or for any other reason }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone not limited to patent issues}{\cf1\fs24\ulnone )}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone conditions are imposed on you}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone whether by court order}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone agreement or otherwise}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone that contradict the conditions of this License}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone they do not excuse you from the conditions of this License}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone If you cannot}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone then as a consequence you may not distribute the Program at}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone all}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone For example}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone if a patent license would not permit royalty}{\cf1\fs24\ulnone -}{\cf1\fs24\ulnone free redistribution of the Program by all those who receive copies directly or indirectly through you}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone then the}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone If any portion of this section is held invalid or unenforceable under any particular circumstance}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone the balance of the section is intended to apply and the section as a whole}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone is intended to apply in other circumstances}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims}{\cf1\fs24\ulnone ; }{\cf1\fs24\ulnone this section has the}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone sole purpose of protecting the integrity of the free software distribution system}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone which is implemented by public license practices}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone Many people have made generous}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone contributions to the wide range of software distributed through that system in reliance on consistent application of that system}{\cf1\fs24\ulnone ; }{\cf1\fs24\ulnone it is up to the author}{\cf1\fs24\ulnone /}{\cf1\fs24\ulnone donor to decide if he}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone or she is willing to distribute software through any other system and a licensee cannot impose that choice}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone 8}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone If the distribution and}{\cf1\fs24\ulnone /}{\cf1\fs24\ulnone or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone the original copyright holder who places}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone the Program under this License may add an explicit geographical distribution limitation excluding those countries}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone so that distribution is permitted only in or among}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone countries not thus excluded}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone In such case}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone this License incorporates the limitation as if written in the body of this License}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone 9}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone The Free Software Foundation may publish revised and}{\cf1\fs24\ulnone /}{\cf1\fs24\ulnone or new versions of the General Public License from time to time}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone Such new versions will be similar in spirit to the}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone present version}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone but may differ in detail to address new problems or concerns}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone Each version is given a distinguishing version number}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone If the Program specifies a version number of this License which applies to it and }{\cf1\fs24\ulnone "}{\cf1\fs24\ulnone any later version}{\cf1\fs24\ulnone "}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone you have the}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone If the Program does not specify a}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone version number of this License}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone you may choose any version ever published by the Free Software Foundation}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone 10}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone write to the author to ask for permission}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone For}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone software which is copyrighted by the Free Software Foundation}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone write to the Free Software Foundation}{\cf1\fs24\ulnone ; }{\cf1\fs24\ulnone we sometimes make exceptions for this}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone Our decision will be guided by}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone NO WARRANTY}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone 11}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone THERE IS NO WARRANTY FOR THE PROGRAM}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone TO THE EXTENT PERMITTED BY APPLICABLE LAW}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone EXCEPT WHEN OTHERWISE STATED IN WRITING THE}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone COPYRIGHT HOLDERS AND}{\cf1\fs24\ulnone /}{\cf1\fs24\ulnone OR OTHER PARTIES PROVIDE THE PROGRAM }{\cf1\fs24\ulnone "}{\cf1\fs24\ulnone AS IS}{\cf1\fs24\ulnone " }{\cf1\fs24\ulnone WITHOUT WARRANTY OF ANY KIND}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone EITHER EXPRESSED OR IMPLIED}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone INCLUDING}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone BUT NOT LIMITED TO}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone THE IMPLIED WARRANTIES}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone SHOULD THE PROGRAM PROVE DEFECTIVE}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone YOU}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone ASSUME THE COST OF ALL NECESSARY SERVICING}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone REPAIR OR CORRECTION}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone 12}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone OR ANY OTHER PARTY WHO MAY MODIFY AND}{\cf1\fs24\ulnone /}{\cf1\fs24\ulnone OR REDISTRIBUTE THE PROGRAM AS PERMITTED}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone ABOVE}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone BE LIABLE TO YOU FOR DAMAGES}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone INCLUDING ANY GENERAL}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone SPECIAL}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone INCLUDING BUT NOT}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS}{\cf1\fs24\ulnone )}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone EVEN IF SUCH}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone END OF TERMS AND CONDITIONS}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone How to Apply These Terms to Your New Programs}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone If you develop a new program}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone and you want it to be of the greatest possible use to the public}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone the best way to achieve this is to make it free software which everyone can}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone redistribute and change under these terms}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone To do so}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone attach the following notices to the program}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty}{\cf1\fs24\ulnone ; }{\cf1\fs24\ulnone and}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone each file should have at least the}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone "}{\cf1\fs24\ulnone copyright}{\cf1\fs24\ulnone " }{\cf1\fs24\ulnone line and a pointer to where the full notice is found}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone one line to give the program}{\cf1\fs24\ulnone '}{\cf1\fs24\ulnone s name and an idea of what it does}{\cf1\fs24\ulnone .}\line
+{\cf1\fs24\ulnone Copyright }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone C}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone yyyy name of author}\line
+\line
+{\cf1\fs24\ulnone This program is free software}{\cf1\fs24\ulnone ; }{\cf1\fs24\ulnone you can redistribute it and}{\cf1\fs24\ulnone /}{\cf1\fs24\ulnone or modify it under the terms of the GNU General Public License as published by the Free Software Foundation}{\cf1\fs24\ulnone ; }{\cf1\fs24\ulnone either}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone version}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone 2 }{\cf1\fs24\ulnone of the License}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone or }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone at your option}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone any later version}{\cf1\fs24\ulnone .}\line
+\line
+{\cf1\fs24\ulnone This program is distributed in the hope that it will be useful}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone but WITHOUT ANY WARRANTY}{\cf1\fs24\ulnone ; }{\cf1\fs24\ulnone without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone PURPOSE}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone See the GNU General Public License for more details}{\cf1\fs24\ulnone .}\line
+\line
+{\cf1\fs24\ulnone You should have received a copy of the GNU General Public License along with this program}{\cf1\fs24\ulnone ; }{\cf1\fs24\ulnone if not}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone write to the Free Software Foundation}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone Inc}{\cf1\fs24\ulnone .}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone 51 }{\cf1\fs24\ulnone Franklin Street}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone Fifth }{\cf1\fs24\ulnone Floor}{\cf1\fs24\ulnone ,}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone Boston}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone MA }{\cf1\fs24\ulnone 02110}{\cf1\fs24\ulnone -}{\cf1\fs24\ulnone 1301}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone USA}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone Also add information on how to contact you by electronic and paper mail}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone If the program is interactive}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone make it output a short notice like this when it starts in an interactive mode}{\cf1\fs24\ulnone :}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone Gnomovision version }{\cf1\fs24\ulnone 69}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone Copyright }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone C}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone year name of author}\line
+{\cf1\fs24\ulnone Gnomovision comes with ABSOLUTELY NO WARRANTY}{\cf1\fs24\ulnone ; }{\cf1\fs24\ulnone for details}\line
+{\cf1\fs24\ulnone type }{\cf1\fs24\ulnone `}{\cf1\fs24\ulnone show w}{\cf1\fs24\ulnone '}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone This is free software}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone and you are welcome}\line
+{\cf1\fs24\ulnone to redistribute it under certain conditions}{\cf1\fs24\ulnone ; }{\cf1\fs24\ulnone type }{\cf1\fs24\ulnone `}{\cf1\fs24\ulnone show c}{\cf1\fs24\ulnone ' }\line
+{\cf1\fs24\ulnone for details}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone The hypothetical commands }{\cf1\fs24\ulnone `}{\cf1\fs24\ulnone show w}{\cf1\fs24\ulnone ' }{\cf1\fs24\ulnone and }{\cf1\fs24\ulnone `}{\cf1\fs24\ulnone show c}{\cf1\fs24\ulnone ' }{\cf1\fs24\ulnone should show the appropriate parts of the General Public License}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone Of course}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone the commands you use may be called something}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone other than}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone `}{\cf1\fs24\ulnone show w}{\cf1\fs24\ulnone ' }{\cf1\fs24\ulnone and }{\cf1\fs24\ulnone `}{\cf1\fs24\ulnone show c}{\cf1\fs24\ulnone '; }{\cf1\fs24\ulnone they could even be mouse}{\cf1\fs24\ulnone -}{\cf1\fs24\ulnone clicks or menu items}{\cf1\fs24\ulnone --}{\cf1\fs24\ulnone whatever suits your program}{\cf1\fs24\ulnone .}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone You should also get your employer }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone if you work as a programmer}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone or your school}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone if any}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone to sign a }{\cf1\fs24\ulnone "}{\cf1\fs24\ulnone copyright disclaimer}{\cf1\fs24\ulnone " }{\cf1\fs24\ulnone for the program}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone if necessary}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone Here is a sample}{\cf1\fs24\ulnone ;}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone alter the names}{\cf1\fs24\ulnone :}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone Yoyodyne}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone Inc}{\cf1\fs24\ulnone .}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone hereby disclaims all copyright interest in the program }{\cf1\fs24\ulnone `}{\cf1\fs24\ulnone Gnomovision}{\cf1\fs24\ulnone ' }{\cf1\fs24\ulnone (}{\cf1\fs24\ulnone which makes passes at compilers}{\cf1\fs24\ulnone ) }{\cf1\fs24\ulnone written by James Hacker}{\cf1\fs24\ulnone .}\line
+\line
+{\cf1\fs24\ulnone signature of Ty Coon}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone 1 }{\cf1\fs24\ulnone April }{\cf1\fs24\ulnone 1989}\line
+{\cf1\fs24\ulnone Ty Coon}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone President of Vice}
+\par\pard\sl-240\slmult1\nowidctlpar\li0\fi0\ri0\sa180\sb0\s-1\cfpat0\cbpat0{\cf1\fs24\ulnone This General Public License does not permit incorporating your program into proprietary programs}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone If your program is a subroutine library}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone you may consider it more useful to}{\cf1\fs24\ulnone }{\cf1\fs24\ulnone permit linking proprietary applications with the library}{\cf1\fs24\ulnone . }{\cf1\fs24\ulnone If this is what you want to do}{\cf1\fs24\ulnone , }{\cf1\fs24\ulnone use the instead of this License}{\cf1\fs24\ulnone .}
+\par}
\ No newline at end of file
=== removed file 'windows/psvince.dll'
Binary files windows/psvince.dll 2012-06-09 19:02:47 +0000 and windows/psvince.dll 1970-01-01 00:00:00 +0000 differ
Follow ups