[gimp] Installer: simplify file inclusion rules



commit 6f0bb88e43b5cdc6785cac86c02c12d4d2a1ee15
Author: Jernej Simončič <jernej|s-cccp eternallybored org>
Date:   Sun Oct 9 00:23:26 2016 +0200

    Installer: simplify file inclusion rules
    
    No more separate GIMP/everything else directories, also got rid of some old cruft

 build/windows/installer/.gitignore                 |    4 +
 build/windows/installer/32on64.isi                 |   60 +
 build/windows/installer/32on64.list                |    9 +
 build/windows/installer/MessageWithURL.isi         |  505 ++++++
 build/windows/installer/associations.isi           |  318 ++++
 build/windows/installer/compile.bat                |   36 +
 build/windows/installer/configoverride.isi         |   35 +
 build/windows/installer/directories.isi            |   45 +
 build/windows/installer/files.isi                  |   23 +
 build/windows/installer/gimp3264.iss               | 1632 ++++++++++++++++++++
 build/windows/installer/gpl+python.rtf             |  179 +++
 build/windows/installer/installsplash.bmp          |  Bin 0 -> 770874 bytes
 build/windows/installer/installsplash_small.bmp    |  Bin 0 -> 537174 bytes
 build/windows/installer/lang/ca.setup.isl          |    2 +-
 build/windows/installer/lang/da.setup.isl          |  113 ++
 build/windows/installer/lang/de.setup.isl          |  113 ++
 build/windows/installer/lang/en.setup.isl          |  112 ++
 build/windows/installer/lang/es.setup.isl          |  113 ++
 build/windows/installer/lang/fr.setup.isl          |  113 ++
 build/windows/installer/lang/hu.setup.isl          |  113 ++
 build/windows/installer/lang/it.setup.isl          |  113 ++
 build/windows/installer/lang/nl.setup.isl          |  113 ++
 build/windows/installer/lang/pl.setup.isl          |    2 +-
 build/windows/installer/lang/pt_BR.setup.isl       |    8 +-
 build/windows/installer/lang/ru.setup.isl          |  113 ++
 build/windows/installer/lang/sl.setup.isl          |  105 ++
 build/windows/installer/rebootcontinue.isi         |  131 ++
 build/windows/installer/setup.ini                  |   29 +
 build/windows/installer/uninst.isi                 |  269 ++++
 build/windows/installer/utils.isi                  |  148 ++
 build/windows/installer/version.isi                |   25 +
 build/windows/installer/wilber.bmp                 |  Bin 0 -> 4158 bytes
 .../installer/windows-installer-intro-big.bmp      |  Bin 0 -> 221814 bytes
 .../installer/windows-installer-intro-small.bmp    |  Bin 0 -> 154542 bytes
 34 files changed, 4575 insertions(+), 6 deletions(-)
---
diff --git a/build/windows/installer/.gitignore b/build/windows/installer/.gitignore
new file mode 100644
index 0000000..bd934db
--- /dev/null
+++ b/build/windows/installer/.gitignore
@@ -0,0 +1,4 @@
+Preprocessed.iss
+compile.log
+_Output/
+_Uninst/
diff --git a/build/windows/installer/32on64.isi b/build/windows/installer/32on64.isi
new file mode 100644
index 0000000..5443e6c
--- /dev/null
+++ b/build/windows/installer/32on64.isi
@@ -0,0 +1,60 @@
+#if 0
+[Files]
+#endif
+//process list of 32bit GIMP files that are installed on x64 (for TWAIN and Python support)
+#pragma option -e-
+
+#define protected
+
+#define FileHandle
+#define FileLine
+
+#define ReplPos
+#define ReplStr
+
+#define Line=0
+#define SRC_DIR GIMP_DIR32
+
+//avoid too much nesting
+#sub DoActualWork
+       #if Copy(FileLine,Len(FileLine),1)=="\"
+               //include whole directory
+Source: "{#SRC_DIR}\{#FileLine}*"; DestDir: "{app}\32\{#Copy(FileLine,1,Len(FileLine)-1)}"; Components: 
gimp32on64; Flags: recursesubdirs restartreplace comparetimestamp uninsrestartdelete
+       #else
+               //include files from a certain directory
+               #define OutputDir Copy(FileLine,1,RPos("\",FileLine)-1)
+Source: "{#SRC_DIR}\{#FileLine}"; DestDir: "{app}\32\{#OutputDir}"; Components: gimp32on64; Flags: 
restartreplace comparetimestamp uninsrestartdelete
+       #endif
+#endsub
+
+#sub Process32on64Line
+       #if !defined(Finished)
+               //show that something's happening
+               #expr Line=Line+1
+               #pragma message "Processing 32on64.list line " + Str(Line)
+
+               #if Copy(FileLine,1,1)=="#" || FileLine==""
+                       //skip comments and empty lines
+               #elif Copy(FileLine,1,1)=="!"
+                       #if Copy(FileLine,2)=="GIMP"
+                               #expr SRC_DIR=GIMP_DIR32
+                       #elif Copy(FileLine,2)=="GTK"
+                               #expr SRC_DIR=GIMP_DIR32
+                       #elif Copy(FileLine,2)=="end"
+                               #define public Finished 1
+                               //finished
+                       #else
+                               #error "Unknown command: "+FileLine
+                       #endif
+               #else
+                       #expr DoActualWork
+               #endif
+       #endif
+#endsub
+
+#for {FileHandle = FileOpen(AddBackslash(SourcePath)+"32on64.list"); \
+  FileHandle && !FileEof(FileHandle); FileLine = FileRead(FileHandle)} \
+  Process32on64Line
+#if FileHandle
+  #expr FileClose(FileHandle)
+#endif
diff --git a/build/windows/installer/32on64.list b/build/windows/installer/32on64.list
new file mode 100644
index 0000000..d9acb6b
--- /dev/null
+++ b/build/windows/installer/32on64.list
@@ -0,0 +1,9 @@
+#list of 32bit files to install on x64
+!GTK
+etc\fonts\
+lib\gtk-2.0\2.10.0\engines\
+lib\gtk-2.0\modules\
+share\themes\
+bin\gspawn*.exe
+bin\*.dll
+!end
diff --git a/build/windows/installer/MessageWithURL.isi b/build/windows/installer/MessageWithURL.isi
new file mode 100644
index 0000000..3763da8
--- /dev/null
+++ b/build/windows/installer/MessageWithURL.isi
@@ -0,0 +1,505 @@
+[Code]
+(* MessageWithURL
+ *
+ * Copyright (c) 2010-2011 Jernej Simon�i�
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ *    1. The origin of this software must not be misrepresented; you must
+ *       not claim that you wrote the original software. If you use this
+ *       software in a product, an acknowledgment in the product
+ *       documentation would be appreciated but is not required.
+ *
+ *    2. Altered source versions must be plainly marked as such, and must
+ *       not be misrepresented as being the original software.
+ *
+ *    3. This notice may not be removed or altered from any source
+ *       distribution.
+ *)
+
+(* * * * * * * * * *
+ * MessageWithURL(Message: TArrayOfString; Title: String: ButtonText: TArrayOfString; Typ: TMsgBoxType;
+ *                DefaultButton, CancelButton: Integer): Integer;
+ *
+ * Parameters:
+ *   Title          dialog box caption
+ *   Message        messages to display; if a message starts with _, the text following it up to the first 
space character
+ *                  is interpreted as URL, and the rest of the message is used as clickable text for that URL
+ *   Typ            icon to show
+ *   ButtonText     buttons to show under the text
+ *   DefaultButton  default button (first button = 1)
+ *   CancelButton   cancel button (first button = 1)
+ *
+ * Return value     button that was clicked (first button = 1); if running in silent mode, DefaultButton is 
returned
+ *)
+function MessageWithURL(Message: TArrayOfString; const Title: String; ButtonText: TArrayOfString; const Typ: 
TMsgBoxType;
+                        const DefaultButton, CancelButton: Integer): Integer; forward;
+
+function GetSystemMetrics(nIndex: Integer): Integer; external 'GetSystemMetrics@User32 stdcall';
+function GetDialogBaseUnits(): Integer; external 'GetDialogBaseUnits@User32 stdcall';
+
+//function GetSysColor(nIndex: Integer): DWORD; external 'GetSysColor user32 dll stdcall';
+
+function LoadIcon(hInstance: Integer; lpIconName: Integer): Integer; external 'LoadIconW@user32 stdcall';
+//function LoadImage(hinst: Integer; lpszName: Integer; uType: Cardinal; cxDesired, cyDesired: Integer; 
fuLoad: Cardinal): Integer; external 'LoadImageW@user32 stdcall';
+function DrawIcon(hdc: HBitmap; x,y: Integer; hIcon: Integer): Integer; external 'DrawIcon@user32 stdcall';
+//function DrawIconEx(hdc: HBitmap; xLeft,yTop: Integer; hIcon: Integer; cxWidth, cyWidth: Integer; 
istepIfAniCur: Cardinal; hbrFlickerFreeDraw: Integer; diFlags: Cardinal): Integer; external 
'DrawIconEx@user32 stdcall';
+//function DestroyIcon(hIcon: Integer): Integer; external 'DestroyIcon@user32 stdcall';
+
+function DrawFocusRect(hDC: Integer; var lprc: TRect): BOOL; external 'DrawFocusRect@user32 stdcall';
+
+type
+       TArrayOfButton = Array of TNewButton;
+
+const
+       //borders around message
+       MWU_LEFTBORDER = 25;
+       MWU_RIGHTBORDER = MWU_LEFTBORDER;
+       MWU_TOPBORDER = 26;
+       MWU_BOTTOMBORDER = MWU_TOPBORDER;
+    //space between elements (icon-text and between buttons)
+       MWU_HORZSPACING = 8;
+    //space between labels
+       MWU_VERTSPACING = 4;
+    //button sizes
+       MWU_BUTTONHEIGHT = 24;
+       MWU_MINBUTTONWIDTH = 86;
+    //height of area where buttons are placed
+       MWU_BUTTONAREAHEIGHT = 45;
+
+       SM_CXSCREEN = 0;
+       SM_CXICON = 11;
+       SM_CYICON = 12;
+       SM_CXICONSPACING = 38;
+       SM_CYICONSPACING = 39;
+
+       //COLOR_HOTLIGHT = 26;
+
+       OIC_HAND = 32513;
+       OIC_QUES = 32514;
+       OIC_BANG = 32515;
+       OIC_NOTE = 32516;
+
+       LR_DEFAULTSIZE = $00000040;
+       LR_SHARED = $00008000;
+
+       IMAGE_BITMAP = 0;
+       IMAGE_ICON = 1;
+       IMAGE_CURSOR = 2;
+
+       DI_IMAGE = 1;
+       DI_MASK = 2;
+       DI_NORMAL = DI_IMAGE or DI_MASK;
+       DI_DEFAULTSIZE = 8;
+
+var
+       URLList: TArrayOfString;
+       TextLabel: Array of TNewStaticText;
+       URLFocusImg: Array of TBitmapImage;
+       SingleLineHeight: Integer;
+
+
+procedure UrlClick(Sender: TObject);
+var ErrorCode: Integer;
+begin
+       
ShellExecAsOriginalUser('open',URLList[TNewStaticText(Sender).Tag],'','',SW_SHOWNORMAL,ewNoWait,ErrorCode);
+end;
+
+
+// calculates maximum width of text labels
+// also counts URLs, and sets the length of URLList accordingly
+function Message_CalcLabelWidth(var Message: TArrayOfString; MessageForm: TSetupForm): Integer;
+var    MeasureLabel: TNewStaticText;
+       i,URLCount,DlgUnit,ScreenWidth: Integer;
+begin
+       MeasureLabel := TNewStaticText.Create(MessageForm);
+       with MeasureLabel do
+       begin
+               Parent := MessageForm;
+               Left := 0;
+               Top := 0;
+               AutoSize := True;
+       end;
+
+       MeasureLabel.Caption := 'X';
+       SingleLineHeight := MeasureLabel.Height;
+
+       Result := 0; //minimum width
+       URLCount := 0;
+       for i := 0 to GetArrayLength(Message) - 1 do
+       begin
+               if Length(Message[i]) < 1 then //simplifies things
+                       Message[i] := ' ';
+
+               if Message[i][1] <> '_' then
+                       MeasureLabel.Caption := Message[i] //not an URL
+               else
+               begin //URL - check only the displayed text
+                       if Pos(' ',Message[i]) > 0 then
+                               MeasureLabel.Caption := Copy(Message[i],Pos(' 
',Message[i])+1,Length(Message[i]))
+                       else
+                               MeasureLabel.Caption := Copy(Message[i],2,Length(Message[i]));
+
+                       URLCount := URLCount + 1;
+               end;
+
+               if MeasureLabel.Width > Result then
+                       Result := MeasureLabel.Width;
+       end;
+       MeasureLabel.Free;
+
+       SetArrayLength(URLList,URLCount); //needed later - no need to do a special loop just for this
+       SetArrayLength(URLFocusImg,URLCount);
+
+       DlgUnit := GetDialogBaseUnits() and $FFFF;  //ensure the dialog isn't too wide
+       ScreenWidth := GetSystemMetrics(SM_CXSCREEN);
+       if Result > ((278 * DlgUnit) div 4) then //278 is from 
http://blogs.msdn.com/b/oldnewthing/archive/2011/06/24/10178386.aspx
+               Result := ((278 * DlgUnit) div 4);
+       if Result > (ScreenWidth * 3) div 4 then
+               Result := (ScreenWidth * 3) div 4;
+
+end;
+
+
+//find the longest button
+function Message_CalcButtonWidth(const ButtonText: TArrayOfString; MessageForm: TSetupForm): Integer;
+var    MeasureLabel: TNewStaticText;
+       i: Integer;
+begin
+       MeasureLabel := TNewStaticText.Create(MessageForm);
+       with MeasureLabel do
+       begin
+               Parent := MessageForm;
+               Left := 0;
+               Top := 0;
+               AutoSize := True;
+       end;
+
+       Result := ScaleX(MWU_MINBUTTONWIDTH - MWU_HORZSPACING * 2); //minimum width
+       for i := 0 to GetArrayLength(ButtonText) - 1 do
+       begin
+               MeasureLabel.Caption := ButtonText[i]
+
+               if MeasureLabel.Width > Result then
+                       Result := MeasureLabel.Width;
+       end;
+       MeasureLabel.Free;
+
+       Result := Result + ScaleX(MWU_HORZSPACING * 2); //account for borders
+end;
+
+
+procedure Message_Icon(const Typ: TMsgBoxType; TypImg: TBitmapImage);
+var    TypRect: TRect;
+       Icon: THandle;
+       TypIcon: Integer;
+begin
+       TypRect.Left := 0;
+       TypRect.Top := 0;
+       TypRect.Right := GetSystemMetrics(SM_CXICON);
+       TypRect.Bottom := GetSystemMetrics(SM_CYICON);
+
+       case Typ of
+       mbInformation:
+               TypIcon := OIC_NOTE;
+       mbConfirmation:
+               TypIcon := OIC_QUES;
+       mbError:
+               TypIcon := OIC_BANG;
+       else
+               TypIcon := OIC_HAND;
+       end;
+
+       //TODO: icon loads with wrong size when using Large Fonts (SM_CXICON/CYICON is 40, but 32x32 icon 
loads - find out how to get the right size)
+       Icon := LoadIcon(0,TypIcon);
+       //Icon := LoadImage(0,TypIcon,IMAGE_ICON,0,0,LR_SHARED or LR_DEFAULTSIZE);
+       with TypImg do
+       begin
+               Left := ScaleX(MWU_LEFTBORDER);
+               Top := ScaleY(MWU_TOPBORDER);
+               Center := False;
+               Stretch := False;
+               AutoSize := True;
+               Bitmap.Width := GetSystemMetrics(SM_CXICON);
+               Bitmap.Height := GetSystemMetrics(SM_CYICON);
+               Bitmap.Canvas.Brush.Color := TPanel(Parent).Color;
+               Bitmap.Canvas.FillRect(TypRect);
+               DrawIcon(Bitmap.Canvas.Handle,0,0,Icon); //draws icon scaled
+               //DrawIconEx(Bitmap.Canvas.Handle,0,0,Icon,0,0,0,0,DI_NORMAL {or DI_DEFAULTSIZE}); //draws 
icon without scaling
+       end;
+       //DestroyIcon(Icon); //not needed with LR_SHARED or with LoadIcon
+end;
+
+
+procedure Message_SetUpURLLabel(URLLabel: TNewStaticText; const Msg: String; const URLNum: Integer);
+var Blank: TRect;
+begin
+       with URLLabel do
+       begin
+               if Pos(' ',Msg) > 0 then
+               begin
+                       Caption := Copy(Msg,Pos(' ',Msg)+1,Length(Msg));
+                       URLList[URLNum] := Copy(Msg, 2, Pos(' ',Msg)-1);
+               end
+               else
+               begin //no text after URL - display just URL
+                       URLList[URLNum] := Copy(Msg, 2, Length(Msg));
+                       Caption := URLList[URLNum];
+               end;
+
+               Hint := URLList[URLNum];
+               ShowHint := True;
+
+               Font.Color := GetSysColor(COLOR_HOTLIGHT);
+               Font.Style := [fsUnderline];
+               Cursor := crHand;
+               OnClick := @UrlClick;
+
+               Tag := URLNum; //used to find the URL to open and bitmap to draw focus rectangle on
+
+               if Height = SingleLineHeight then //shrink label to actual text width
+                       WordWrap := False;
+
+               TabStop := True; //keyboard accessibility
+               TabOrder := URLNum;
+       end;
+
+       URLFocusImg[URLNum] := TBitmapImage.Create(URLLabel.Parent); //focus rectangle needs a bitmap - 
prepare it here
+       with URLFocusImg[URLNum] do
+       begin
+               Left := URLLabel.Left - 1;
+               Top := URLLabel.Top - 1;
+               Stretch := False;
+               AutoSize := True;
+               Parent := URLLabel.Parent;
+               Bitmap.Width := URLLabel.Width + 2;
+               Bitmap.Height := URLLabel.Height + 2;
+
+               SendToBack;
+
+               Blank.Left := 0;
+               Blank.Top := 0;
+               Blank.Right := Width;
+               Blank.Bottom := Height;
+               Bitmap.Canvas.Brush.Color := TPanel(Parent).Color;
+               Bitmap.Canvas.FillRect(Blank);          
+       end;
+end;
+
+
+procedure Message_SetUpLabels(Message: TArrayOfString; TypImg: TBitmapImage;
+                              const DialogTextWidth: Integer; MessagePanel: TPanel);
+var    i,URLNum,dy: Integer;
+begin
+       SetArrayLength(TextLabel,GetArrayLength(Message));
+       URLNum := 0;
+       for i := 0 to GetArrayLength(TextLabel) - 1 do
+       begin
+               TextLabel[i] := TNewStaticText.Create(MessagePanel);
+               with TextLabel[i] do
+               begin
+                       Parent := MessagePanel;
+                       Left := TypImg.Left + TypImg.Width + ScaleX(MWU_HORZSPACING);
+                       if i = 0 then
+                               Top := TypImg.Top
+                       else
+                               Top := TextLabel[i-1].Top + TextLabel[i-1].Height + ScaleY(MWU_VERTSPACING);
+                       
+                       WordWrap := True;
+                       AutoSize := True;
+                       Width := DialogTextWidth;
+
+                       if Message[i][1] <> '_' then
+                               Caption := Message[i]
+                       else
+                       begin // apply URL formatting
+                               Message_SetUpURLLabel(TextLabel[i], Message[i], URLNum);
+                               URLNum := URLNum + 1;
+                       end;
+
+               end;
+       end;
+
+       i := GetArrayLength(TextLabel) - 1;
+       if TextLabel[i].Top + TextLabel[i].Height < TypImg.Top + TypImg.Height then //center labels vertically
+       begin
+               dy := (TypImg.Top + TypImg.Height - TextLabel[i].Top - TextLabel[i].Height) div 2;
+               for i := 0 to GetArrayLength(TextLabel) - 1 do
+                       TextLabel[i].Top := TextLabel[i].Top + dy;
+       end;
+end;
+
+
+procedure Message_SetUpButtons(var Button: TArrayOfButton; ButtonText: TArrayOfString;
+                              const ButtonWidth, DefaultButton, CancelButton: Integer; MessageForm: 
TSetupForm);
+var    i: Integer;
+begin
+       SetArrayLength(Button,GetArrayLength(ButtonText));
+       for i := 0 to GetArrayLength(Button) - 1 do
+       begin
+               Button[i] := TNewButton.Create(MessageForm);
+               with Button[i] do
+               begin
+                       Parent := MessageForm;
+                       Width := ButtonWidth;
+                       Height := ScaleY(MWU_BUTTONHEIGHT);
+
+                       if i = 0 then
+                       begin
+                               Left := MessageForm.ClientWidth - (ScaleX(MWU_HORZSPACING) + ButtonWidth) * 
GetArrayLength(ButtonText);
+                               Top := MessageForm.ClientHeight - ScaleY(MWU_BUTTONAREAHEIGHT) +
+                                      ScaleY(MWU_BUTTONAREAHEIGHT - MWU_BUTTONHEIGHT) div 2;
+                       end else
+                       begin
+                               Left := Button[i-1].Left + ScaleX(MWU_HORZSPACING) + ButtonWidth;
+                               Top := Button[i-1].Top;
+                       end;
+
+                       Caption := ButtonText[i];
+                       ModalResult := i + 1;
+
+                       //set the initial focus to the default button
+                       TabOrder := ((i - (DefaultButton - 1)) + GetArrayLength(Button)) mod 
(GetArrayLength(Button));
+
+                       if DefaultButton = i + 1 then
+                               Default := True;
+
+                       if CancelButton = i + 1 then
+                               Cancel := True;
+
+               end;
+       end;
+end;
+
+
+//find out if URL label has focus, draw focus rectange around it if it is, and return index of focused label
+function Message_FocusLabel(): Integer;
+var    i: Integer;
+       FocusRect: TRect;
+begin
+       Result := -1;
+
+       for i := 0 to GetArrayLength(URLFocusImg) - 1 do //clear existing focus rectangle
+       begin
+               FocusRect.Left := 0;
+               FocusRect.Top := 0;
+               FocusRect.Right := URLFocusImg[i].Bitmap.Width;
+               FocusRect.Bottom := URLFocusImg[i].Bitmap.Height;
+               URLFocusImg[i].Bitmap.Canvas.FillRect(FocusRect);
+       end;
+
+       for i := 0 to GetArrayLength(TextLabel) - 1 do
+       begin
+               if TextLabel[i].Focused then
+               begin
+                       Result := i;
+
+                       FocusRect.Left := 0;
+                       FocusRect.Top := 0;
+                       FocusRect.Right := URLFocusImg[TextLabel[i].Tag].Bitmap.Width;
+                       FocusRect.Bottom := URLFocusImg[TextLabel[i].Tag].Bitmap.Height;
+
+                       DrawFocusRect(URLFocusImg[TextLabel[i].Tag].Bitmap.Canvas.Handle, FocusRect);
+               end;
+       end;
+end;
+
+
+//TNewStaticText doesn't have OnFocus - handle that here
+//(not perfect - if you focus label with keyboard, then focus a button with mouse, the label keeps it's 
underline)
+procedure Message_KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
+var URLIdx: Integer;
+begin
+       case Key of
+       9,37..40: //tab, arrow keys
+               begin
+                       Message_FocusLabel();
+               end;
+       13,32: //enter, spacebar
+               begin
+                       URLIdx := Message_FocusLabel(); //get focused label
+                       if URLIdx > -1 then
+                               UrlClick(TextLabel[URLIdx]);
+               end;
+       end;
+end;
+
+
+function MessageWithURL(Message: TArrayOfString; const Title: String; ButtonText: TArrayOfString; const Typ: 
TMsgBoxType;
+                        const DefaultButton, CancelButton: Integer): Integer;
+var MessageForm: TSetupForm;
+       Button: TArrayOfButton;
+       DialogTextWidth, ButtonWidth: Integer;
+       MessagePanel: TPanel;
+       TypImg: TBitmapImage;
+       i: Integer;
+begin
+       if (not IsUninstaller and WizardSilent) or (IsUninstaller and UninstallSilent) then
+       begin
+               Result := DefaultButton;
+               exit;
+       end;
+
+       MessageForm := CreateCustomForm();
+
+       MessageForm.Caption := Title;
+       if (CancelButton = 0) or (CancelButton > GetArrayLength(ButtonText)) then //no cancel button - remove 
close button
+               MessageForm.BorderIcons := MessageForm.BorderIcons - [biSystemMenu];
+
+       MessagePanel := TPanel.Create(MessageForm); //Vista-style background
+       with MessagePanel do
+       begin
+               Parent := MessageForm;
+               BevelInner := bvNone;
+               BevelOuter := bvNone;
+               BevelWidth := 0;
+               ParentBackground := False;
+               Color := clWindow;
+               Left := 0;
+               Top := 0;
+       end;
+
+       DialogTextWidth := Message_CalcLabelWidth(Message, MessageForm);
+       ButtonWidth := Message_CalcButtonWidth(ButtonText, MessageForm);
+
+       TypImg := TBitmapImage.Create(MessagePanel);
+       TypImg.Parent := MessagePanel;
+       Message_Icon(Typ, TypImg);
+
+       Message_SetUpLabels(Message, TypImg, DialogTextWidth, MessagePanel);
+
+       i := GetArrayLength(TextLabel) - 1;
+       MessagePanel.ClientHeight := TextLabel[i].Top + TextLabel[i].Height + ScaleY(MWU_BOTTOMBORDER);
+
+       MessagePanel.ClientWidth := DialogTextWidth + TypImg.Width + TypImg.Left + ScaleX(MWU_HORZSPACING + 
MWU_RIGHTBORDER);
+       if MessagePanel.ClientWidth <
+          (ButtonWidth + ScaleX(MWU_HORZSPACING)) * GetArrayLength(ButtonText) + ScaleX(MWU_HORZSPACING) 
then //ensure buttons fit
+               MessagePanel.ClientWidth := (ButtonWidth + ScaleX(MWU_HORZSPACING)) * 
GetArrayLength(ButtonText) + ScaleX(MWU_HORZSPACING);
+
+       MessageForm.ClientWidth := MessagePanel.Width;
+       MessageForm.ClientHeight := MessagePanel.Height + ScaleY(MWU_BUTTONAREAHEIGHT);
+
+       Message_SetUpButtons(Button, ButtonText, ButtonWidth, DefaultButton, CancelButton, MessageForm);
+
+       MessageForm.Center;
+
+       MessageForm.OnKeyUp := @Message_KeyUp; //needed for keyboard access of URL labels
+       MessageForm.KeyPreView := True;
+
+       Result := MessageForm.ShowModal;
+
+       for i := 0 to GetArrayLength(TextLabel) - 1 do
+               TextLabel[i].Free;
+       SetArrayLength(TextLabel,0);
+       for i := 0 to GetArrayLength(URLFocusImg) - 1 do
+               URLFocusImg[i].Free;
+       SetArrayLength(URLFocusImg,0);
+
+       MessageForm.Release;
+end;
diff --git a/build/windows/installer/associations.isi b/build/windows/installer/associations.isi
new file mode 100644
index 0000000..e3541ce
--- /dev/null
+++ b/build/windows/installer/associations.isi
@@ -0,0 +1,318 @@
+#if 0
+//for syntax hilighting
+[Code]
+#endif
+
+//Encode registry keys saved to uninst.inf
+function Encode(pText: String): String;
+begin
+       pText := Replace('%','%25', pText);
+       Result := Replace('\','%5c', pText);
+end;
+
+//reverse encoding done by Encode
+function Decode(pText: String): String;
+var p: Integer;
+       tmp: String;
+begin
+       if Pos('%',pText) = 0 then
+               Result := pText
+       else
+       begin           
+               Result := '';
+               while Length(pText) > 0 do
+               begin
+                       p := Pos('%',pText);
+                       if p = 0 then
+                       begin
+                               Result := Result + pText;
+                               break;
+                       end;
+                       Result := Result + Copy(pText,1,p-1);
+                       tmp := '$' + Copy(pText,p+1,2);
+                       Result := Result + Chr(StrToIntDef(tmp,32));
+                       pText := Copy(pText,p+3,Length(pText));
+               end;
+       end;
+end;
+
+
+function Associations_Write(const pSubKey,pValue,pData: String): Boolean;
+begin
+       Result := RegWriteStringValue(HKCR,pSubKey,pValue,pData)
+       SaveToUninstInf('RegVal:HKCR/'+pSubKey+'\'+Encode(pValue));
+end;
+
+
+function Associations_Read(const pSubKey,pValue: String; var pData: String): Boolean;
+begin
+       Result := RegQueryStringValue(HKCR,pSubKey,pValue,pData)
+end;
+
+
+procedure Association_Fix(const pKey: String);
+begin
+       if RegKeyExists(HKCR,pKey+'\shell\Open with GIMP') then
+       begin
+               if RegDeleteKeyIncludingSubkeys(HKCR,pKey+'\shell\Open with GIMP') then
+                       DebugMsg('Association_Fix','Removed leftover Open with GIMP from ' + pKey)
+               else
+                       DebugMsg('Association_Fix','Failed removing leftover Open with GIMP from ' + pKey)
+       end;
+end;
+
+
+procedure Associations_Create();
+var i,j: Integer;
+       sIconFile: String;
+begin
+
+       for i := 0 to GetArrayLength(Associations.Association) - 1 do
+       begin
+               for j := 0 to GetArrayLength(Associations.Association[i].Extensions) - 1 do
+               begin                   
+
+                       if Associations.Association[i].Selected then //user wants to use the GIMP as default 
program for this type of image
+                       begin
+
+                               DebugMsg('Create associations',Associations.Association[i].Extensions[j]);
+
+                               StatusLabel(CustomMessage('SettingUpAssociations'), 
Associations.Association[i].Description + ' ('
+                                           + Associations.Association[i].Extensions[j]+')');
+
+                               SaveToUninstInf('RegKeyEmpty:HKCR/GIMP-{#ASSOC_VERSION}-'+
+                                               Associations.Association[i].Extensions[0]);
+                               SaveToUninstInf('RegKeyEmpty:HKCR/GIMP-{#ASSOC_VERSION}-'+
+                                               Associations.Association[i].Extensions[0]+'\DefaultIcon');
+                               SaveToUninstInf('RegKeyEmpty:HKCR/GIMP-{#ASSOC_VERSION}-'+
+                                               Associations.Association[i].Extensions[0]+'\shell');
+                               SaveToUninstInf('RegKeyEmpty:HKCR/GIMP-{#ASSOC_VERSION}-'+
+                                               Associations.Association[i].Extensions[0]+'\shell\open');
+                               SaveToUninstInf('RegKeyEmpty:HKCR/GIMP-{#ASSOC_VERSION}-'+
+                                               
Associations.Association[i].Extensions[0]+'\shell\open\command');
+                               
SaveToUninstInf('RegKeyEmpty:HKCR/.'+Associations.Association[i].Extensions[j]);
+
+                               if not 
Associations_Write('GIMP-{#ASSOC_VERSION}-'+Associations.Association[i].Extensions[0],'',
+                                                         Associations.Association[i].Description) then
+                                       continue; //something's very wrong in user's registry if any of these 
continues are called
+
+                               if Associations.Association[i].Extensions[0] <> 'ico' then //special case for 
icons
+                                       sIconFile := 
ExpandConstant('{app}\bin\gimp-{#MAJOR}.{#MINOR}.exe')+',1'
+                               else
+                                       sIconFile := '%1';
+
+                               if not 
Associations_Write('GIMP-{#ASSOC_VERSION}-'+Associations.Association[i].Extensions[0]+'\DefaultIcon',
+                                                         '',sIconFile) then
+                                       continue;
+
+                               if not 
Associations_Write('GIMP-{#ASSOC_VERSION}-'+Associations.Association[i].Extensions[0]+'\shell\open\command',
+                                                         
'','"'+ExpandConstant('{app}\bin\gimp-{#MAJOR}.{#MINOR}.exe')+'" "%1"') then
+                                       continue;
+
+                               if not Associations_Write('.'+Associations.Association[i].Extensions[j],'',
+                                                         
'GIMP-{#ASSOC_VERSION}-'+Associations.Association[i].Extensions[0]) then
+                                       continue;
+
+                       end else //add "Open with GIMP" to another program's association
+                       begin
+
+                               if Associations.Association[i].AssociatedElsewhere <> '' then
+                               begin
+
+                                       DebugMsg('Adding Open with 
GIMP',Associations.Association[i].Extensions[j]);
+
+                                       
SaveToUninstInf('RegKey:HKCR/'+Associations.Association[i].AssociatedElsewhere+
+                                                       '\shell\'+CustomMessage('OpenWithGIMP'));
+
+                                       if not 
Associations_Write(Associations.Association[i].AssociatedElsewhere+'\shell\'+
+                                                                 CustomMessage('OpenWithGIMP'),
+                                                                 '',CustomMessage('OpenWithGimp')) then
+                                               continue;
+
+                                       if not 
Associations_Write(Associations.Association[i].AssociatedElsewhere+'\shell\'+
+                                                                 CustomMessage('OpenWithGIMP')+'\command','',
+                                                                 
'"'+ExpandConstant('{app}\bin\gimp-{#MAJOR}.{#MINOR}.exe')+'" "%1"') then
+                                               continue;
+                               end else
+                               begin
+                                       DebugMsg('Skipping 
association',Associations.Association[i].Extensions[j]);
+                                       //TODO: decide what to do here (user doesn't want to associate file 
type with GIMP, and there's no existing assoc.)
+                               end;
+
+                       end;
+
+               end;
+       end;
+end;
+
+
+procedure Associations_Init();
+var i,j,c,d,iNumAssoc: Integer;
+       sAssociation,sExt,sCheck: String;
+       CmdLineAssoc: TArrayOfString;
+       CmdLine: String;
+begin
+       iNumAssoc := 0;
+       while IniKeyExists('File Associations', IntToStr(iNumAssoc + 1), SetupINI) do
+               iNumAssoc := iNumAssoc + 1;
+
+       DebugMsg('Associations_Init','Found ' + IntToStr(iNumAssoc) + ' associations');
+
+       SetArrayLength(Associations.Association,iNumAssoc);
+
+       CmdLine := ExpandConstant('{param:assoc|}');
+       if CmdLine <> '' then
+       begin
+               DebugMsg('Associations_Init','Associations requested through command-line: ' + CmdLine);
+               Explode(CmdLineAssoc,LowerCase(CmdLine),',');
+       end;
+       
+       for i := 1 to iNumAssoc do
+       begin
+               sAssociation := GetIniString('File Associations',IntToStr(i),'',SetupINI);
+
+               DebugMsg('Associations Init',sAssociation);
+               
+               d := Pos(':',sAssociation);
+               if d = 0 then
+               begin
+                       DebugMsg('InitAssociations',': not found');
+                       MsgBox(FmtMessage(CustomMessage('InternalError'),['10']),mbError,MB_OK);
+                       exit;
+               end;
+
+               Associations.Association[i-1].Description := Copy(sAssociation,1,d-1); //split description
+               sAssociation := Copy(sAssociation,d+1,Length(sAssociation));
+
+               Explode(Associations.Association[i-1].Extensions, LowerCase(sAssociation), ':'); //split 
extensions
+
+               Associations.Association[i-1].Associated := False; //initialize structure (not sure if 
needed, but better safe than sorry)
+               Associations.Association[i-1].Selected := False;
+               Associations.Association[i-1].AssociatedElsewhere := '';
+
+               for j := 0 to GetArrayLength(Associations.Association[i - 1].Extensions) - 1 do
+               begin
+                       sExt := LowerCase(Associations.Association[i-1].Extensions[j]);
+
+                       for c := 0 to GetArrayLength(CmdLineAssoc) - 1 do //association requested through 
command line
+                               if CmdLineAssoc[c] = sExt then
+                                       Associations.Association[i-1].Selected := True;
+       
+                       sCheck := '';
+                       if Associations_Read('.'+sExt,'',sCheck) then //check if anything else claims this 
association
+                       begin
+                               if (Pos('GIMP-{#ASSOC_VERSION}',sCheck) = 1) //already associated by this 
version of GIMP
+                                  or (Pos('GIMP-2.0',sCheck) = 1) //associated by previous GIMP version
+                                  then 
+                               begin
+                                       Associations.Association[i-1].Associated := True;
+                                       Associations.Association[i-1].Selected := True;
+                                       DebugMsg('InitAssociations','Associated in 
registry:'+Associations.Association[i-1].Extensions[0]);
+                               end else
+                               begin                                      //associated by something else
+                                       if RegKeyExists(HKCR,sCheck) or 
RegKeyExists(HKCU,'SOFTWARE\Classes\'+sCheck) then //ensure that "something else"
+                                       begin                                                                 
             //still actually exists
+                                               Associations.Association[i-1].AssociatedElsewhere := sCheck;
+                                               Association_Fix(sCheck);  //clean up after old broken 
installers
+                                       end;
+                               end;
+                       end else
+                       begin
+                       
+                               if Pos('GIMP',Associations.Association[i-1].Description) > 0 then
+                                       Associations.Association[i-1].Selected := True; //select GIMP's types 
by default if it's not associated by anything yet
+
+                       end;
+               end;
+       end;
+end;
+
+
+procedure Associations_OnClick(Sender: TObject);
+var i,j: Integer;
+       ext: String;
+begin
+       DebugMsg('Associations_OnClick','');
+
+       for i := 0 to GetArrayLength(Associations.Association) - 1 do
+       begin
+               if TNewCheckListbox(Sender).Selected[i] then
+               begin
+                       ext := '';
+                       for j := 0 to GetArrayLength(Associations.Association[i].Extensions) - 1 do
+                               ext := ext + LowerCase(Associations.Association[i].Extensions[j]) + ', ';
+                       ext := Copy(ext, 1, Length(ext) - 2);
+                       
+                       Associations.AssociationsPage.lblAssocInfo2.Caption := 
#13+CustomMessage('SelectAssociationsExtensions')+' ' + ext;
+
+               end;
+               if TNewCheckListbox(Sender).Checked[i] then
+                       Associations.Association[i].Selected := True
+               else
+                       Associations.Association[i].Selected := False;
+       end;
+end;
+
+
+procedure Associations_SelectAll(Sender: TObject);
+var i: Integer;
+       SelAll, UnSelAll: String;
+begin
+
+       SelAll := CustomMessage('SelectAssociationsSelectAll')
+       UnselAll := CustomMessage('SelectAssociationsUnselectAll');
+
+       if TNewButton(Sender).Caption = SelAll then
+       begin
+       
+               for i := 0 to GetArrayLength(Associations.Association) - 1 do
+                       Associations.AssociationsPage.clbAssociations.Checked[i] := True;
+
+               TNewButton(Sender).Caption := UnselAll;
+
+       end else
+       begin
+
+               for i := 0 to GetArrayLength(Associations.Association) - 1 do
+                       if Associations.Association[i].Associated = False then //don't uncheck associations 
that are already active
+                               Associations.AssociationsPage.clbAssociations.Checked[i] := False;
+
+               TNewButton(Sender).Caption := SelAll;
+
+       end;
+
+       Associations_OnClick(Associations.AssociationsPage.clbAssociations);
+
+end;
+
+
+procedure Associations_SelectUnused(Sender: TObject);
+var i: Integer;
+begin
+
+       for i := 0 to GetArrayLength(Associations.Association) - 1 do
+               if Associations.Association[i].AssociatedElsewhere = '' then
+                       Associations.AssociationsPage.clbAssociations.Checked[i] := True;
+
+       Associations_OnClick(Associations.AssociationsPage.clbAssociations);
+
+end;
+
+
+function Associations_GetSelected(): String;
+var Selected: String;
+       i: Integer;
+begin
+
+       Selected := '';
+
+       for i := 0 to GetArrayLength(Associations.Association) - 1 do
+               if Associations.Association[i].Selected then
+                       if Selected = '' then
+                               Selected := Associations.Association[i].Extensions[0]
+                       else
+                               Selected := Selected + ',' + Associations.Association[i].Extensions[0];
+
+       Result := Selected;
+
+end;
diff --git a/build/windows/installer/compile.bat b/build/windows/installer/compile.bat
new file mode 100755
index 0000000..0def1e3
--- /dev/null
+++ b/build/windows/installer/compile.bat
@@ -0,0 +1,36 @@
+@echo off
+if [%1]==[] goto help
+if [%2]==[] goto help
+if [%3]==[] goto help
+if [%4]==[] goto help
+set VER=%~1
+set GIMPDIR=%~2
+set DIR32=%~3
+set DIR64=%~4
+
+FOR /F "usebackq tokens=5,* skip=2" %%A IN (`REG QUERY 
"HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\Inno Setup 5_is1" /v "Inno Setup: App Path" 
/reg:32`) DO set INNOPATH=%%B
+if not exist "%INNOPATH%\iscc.exe" goto noinno
+
+::i'd use %*, but shift has no effect on it
+shift
+shift
+shift
+shift
+set PARAMS=
+:doparams
+if "%1"=="" goto paramsdone
+set PARAMS=%PARAMS% %1
+shift
+goto doparams
+:paramsdone
+
+"%INNOPATH%\iscc.exe" -DVERSION="%VER%" -DGIMP_DIR="%GIMPDIR%" -DDIR32="%DIR32%" -DDIR64="%DIR64%" %PARAMS% 
gimp3264.iss
+goto :eof
+
+:help
+echo Usage: %~n0%~x0 ver.si.on base_dir gimp_x86_dir gimp_x64_dir
+echo Example: %~n0%~x0 2.9.4 X:\gimp-output\2.9-dev gimp-dev-i686-2016-10-08 gimp-dev-x86_64-2016-10-08 
+goto :eof
+:noinno
+echo Inno Setup path could not be read from Registry
+goto :eof
diff --git a/build/windows/installer/configoverride.isi b/build/windows/installer/configoverride.isi
new file mode 100644
index 0000000..13f9a64
--- /dev/null
+++ b/build/windows/installer/configoverride.isi
@@ -0,0 +1,35 @@
+;allow specific configuration files to be overriden by files in a specific directory
+#if 0
+[Files]
+#endif
+
+#define FindHandle
+#define FindResult
+
+#sub ProcessConfigFile
+  #define FileName FindGetFileName(FindHandle)
+Source: "{code:GetExternalConfDir}\{#FileName}"; DestDir: "{app}\{#ConfigDir}"; Flags: external 
recursesubdirs restartreplace; Check: CheckExternalConf('{#FileName}')
+  #if BaseDir != GIMP_DIR32
+Source: "{code:GetExternalConfDir}\{#FileName}"; DestDir: "{app}\32\{#ConfigDir}"; Components: gimp32on64; 
Flags: external recursesubdirs restartreplace; Check: CheckExternalConf('{#FileName}')
+  #endif
+#endsub
+
+#sub ProcessConfigDir
+  #emit ';; ' + ConfigDir
+  #emit ';; ' + BaseDir
+  #for {FindHandle = FindResult = FindFirst(AddBackslash(BaseDir) + AddBackSlash(ConfigDir) + "*", 0); \
+      FindResult; FindResult = FindNext(FindHandle)} ProcessConfigFile
+  #if FindHandle
+    #expr FindClose(FindHandle)
+  #endif
+#endsub
+
+#define public BaseDir GIMP_DIR32
+#define public ConfigDir "etc\gimp\2.0"
+#expr ProcessConfigDir
+
+#define public ConfigDir "etc\gtk-2.0"
+#expr ProcessConfigDir
+
+#define public ConfigDir "etc\fonts"
+#expr ProcessConfigDir
diff --git a/build/windows/installer/directories.isi b/build/windows/installer/directories.isi
new file mode 100644
index 0000000..79bfe76
--- /dev/null
+++ b/build/windows/installer/directories.isi
@@ -0,0 +1,45 @@
+//directories to source files from
+#if !defined(VERSION)
+  #error "VERSION must be defined"
+#endif
+
+#define public
+
+#if !defined(VER_DIR)
+       #if defined(REVISION)
+               #define VER_DIR VERSION + "-" + REVISION
+       #else
+               #define VER_DIR VERSION
+       #endif
+#endif
+
+#ifndef DIR32
+#define DIR32 "i686"
+#endif
+#ifndef DIR64
+#define DIR64 "amd64"
+#endif
+
+#ifndef GIMP_DIR
+       #define GIMP_DIR "N:\_newdev\output\gimp\" + VER_DIR
+#endif
+
+//32-bit GIMP base directory (result of make install)
+#ifndef GIMP_DIR32
+       #define GIMP_DIR32 GIMP_DIR + "\" + DIR32
+#endif
+//64-bit GIMP base directory (result of make install)
+#ifndef GIMP_DIR64
+       #define GIMP_DIR64 GIMP_DIR + "\" + DIR64
+#endif
+
+#define DDIR32 DIR32 + "-w64-mingw32\sys-root\mingw"
+#define DDIR64 DIR64 + "-w64-mingw32\sys-root\mingw"
+
+#ifdef PYTHON
+
+       //python source directory
+       #ifndef PY_DIR
+               #define PY_DIR "N:\_newdev\deps\gimp\python"
+       #endif
+#endif
diff --git a/build/windows/installer/files.isi b/build/windows/installer/files.isi
new file mode 100644
index 0000000..2e11860
--- /dev/null
+++ b/build/windows/installer/files.isi
@@ -0,0 +1,23 @@
+#if 0
+[Files]
+#endif
+
+#if PLATFORM==32
+       #define DIR DIR32
+#elif PLATFORM==64
+       #define DIR DIR64
+#else
+       #error "Unknown PLATFORM:" + PLATFORM
+#endif
+
+Source: "{#GIMP_DIR}\{#DIR}\*.dll"; DestDir: "{app}"; Components: gimp{#PLATFORM}; Flags: recursesubdirs 
restartreplace comparetimestamp uninsrestartdelete
+Source: "{#GIMP_DIR}\{#DIR}\*.exe"; DestDir: "{app}"; Excludes: 
"\lib\gimp\2.0\plug-ins\twain.exe,\lib\gimp\2.0\plug-ins\file-ps.exe,\bin\gimp.exe,\bin\gimp-console.exe"; 
Components: gimp{#PLATFORM}; Flags: recursesubdirs restartreplace comparetimestamp uninsrestartdelete
+
+Source: "{#GIMP_DIR}\{#DIR}\lib\gimp\2.0\plug-ins\file-ps.exe"; DestDir: "{app}\lib\gimp\2.0\plug-ins"; 
Components: gimp{#PLATFORM}; Flags: restartreplace comparetimestamp uninsrestartdelete
+
+Source: "{#GIMP_DIR}\{#DIR}\*.dll"; DestDir: "{app}"; Excludes: "\bin\libgs-8.dll"; Components: 
gimp{#PLATFORM}; Flags: recursesubdirs restartreplace comparetimestamp uninsrestartdelete
+Source: "{#GIMP_DIR}\{#DIR}\bin\libgs-8.dll"; DestDir: "{app}\bin"; Components: gimp{#PLATFORM}; Flags: 
recursesubdirs restartreplace comparetimestamp uninsrestartdelete
+
+Source: "{#GIMP_DIR}\{#DIR}\bin\gspawn-win*.exe"; DestDir: "{app}\bin"; Components: gimp{#PLATFORM}; Flags: 
recursesubdirs restartreplace comparetimestamp uninsrestartdelete
+;Source: "{#GIMP_DIR}\{#DIR}\bin\bzip2.exe"; DestDir: "{app}\bin"; Components: gimp{#PLATFORM}; Flags: 
recursesubdirs restartreplace uninsrestartdelete
+Source: "{#GIMP_DIR}\{#DIR}\lib\*.dll"; DestDir: "{app}\lib"; Components: gimp{#PLATFORM}; Flags: 
recursesubdirs restartreplace comparetimestamp uninsrestartdelete
diff --git a/build/windows/installer/gimp3264.iss b/build/windows/installer/gimp3264.iss
new file mode 100644
index 0000000..5eab918
--- /dev/null
+++ b/build/windows/installer/gimp3264.iss
@@ -0,0 +1,1632 @@
+;.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,
+;                                                                       ;
+;Copyright (c) 2002-2010 Jernej Simončič                                ;
+;                                                                       ;
+;This software is provided 'as-is', without any express or implied      ;
+;warranty. In no event will the authors be held liable for any damages  ;
+;arising from the use of this software.                                 ;
+;                                                                       ;
+;Permission is granted to anyone to use this software for any purpose,  ;
+;including commercial applications, and to alter it and redistribute it ;
+;freely, subject to the following restrictions:                         ;
+;                                                                       ;
+;   1. The origin of this software must not be misrepresented; you must ;
+;      not claim that you wrote the original software. If you use this  ;
+;      software in a product, an acknowledgment in the product          ;
+;      documentation would be appreciated but is not required.          ;
+;                                                                       ;
+;   2. Altered source versions must be plainly marked as such, and must ;
+;      not be misrepresented as being the original software.            ;
+;                                                                       ;
+;   3. This notice may not be removed or altered from any source        ;
+;      distribution.                                                    ;
+;.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.;
+;
+;Install script for GIMP and GTK+
+;requires Inno Setup 5.4.2 unicode + ISPP
+;
+;See directories.isi 
+;
+;Changelog:
+;
+;2012-05-05
+;- check for SSE support
+;- remove obsolete 2.6 plugins when installing over 2.6.12 combined installer
+;
+;2011-12-18
+;- display a picture on the first install screen
+;- add a development version warning back
+;- clean gegl's DLLs on install as some files have changed names
+;
+;2011-08-30
+;- only uninstall previous GIMP version when installing over existing installation
+;  TODO: offer the option to uninstall 32bit version when installing on x64 system
+;- install 32bit plugins to same directory as 64bit plugins on x64 installs to
+;  avoid problems when upgrading
+;
+;2010-07-08
+;- clean up entire Python subdirectory (since the .pyc files are generated when
+;  scripts are run)
+;- use crHand instead of crHandPoint for the billboard URL
+;
+;2010-07-02
+;- add libraries for compatibility with old 32-bit plug-ins as a component
+;- remove a few unused RTF ready-memo related things
+;- uninst.inf is now processed as the first step of uninstall, as otherwise the
+;  uninstaller could leave behind empty directories
+;
+;2010-06-29
+;- fix SuppressibleMsgBox calls to use proper button ID for default button
+;- simplify the wizard - skip Welcome page, and make the Next button from
+;  InfoBefore/License page invoke install immediately (custom install is still
+;  possible by clicking the Customize button)
+;
+;2010-05-15
+;- rewrote script mostly from scratch
+;- combine 32 and 64bit GIMP versions to a single installer
+;  - install enough 32bit support files even with 64bit version to allow running 32bit
+;    plug-ins on 64bit version (used by Python scriptin support [as there's no 64-bit
+;    PyGTK+ on Windows available yet] and TWAIN plug-in, which only works in 32-bit
+;    version)
+;- Python with PyGTK is included in the installer now
+;- install GIMP to new directory by default ({pf}\GIMP 2 instead of {pf}\GIMP-2.0)
+;- uninstall previous GIMP versions as the first step of install (both 32 and 64-bit)
+;  - require reboot if installing to directory from which GIMP was just uninstalled,
+;    and this directory wasn't removed by the uninstaller; the installer will continue
+;    automatically after reboot
+;- fixed a long standing bug where "Open with GIMP" menu entries would be left after
+;  uninstalling
+;
+#pragma option -e+
+
+#ifndef VERSION
+       #define VERSION "2.7.0"
+       #define REVISION "20100414"
+       #define NOFILES
+#endif
+
+#include "directories.isi"
+#include "version.isi"
+
+[Setup]
+AppName=GIMP
+#if Defined(DEVEL) && DEVEL != ""
+AppID=GIMP-{#MAJOR}.{#MINOR}
+#else
+AppID=GIMP-{#MAJOR}
+#endif
+VersionInfoVersion={#VERSION}
+#if !defined(REVISION)
+AppVerName=GIMP {#VERSION}
+#else
+AppVerName=GIMP {#VERSION}-{#REVISION}
+#endif
+AppPublisherURL=http://gimp-win.sourceforge.net/
+AppSupportURL=http://www.gimp.org/docs/
+AppUpdatesURL=http://gimp-win.sourceforge.net/
+AppPublisher=The GIMP Team
+AppVersion={#VERSION}
+DisableProgramGroupPage=yes
+DisableWelcomePage=no
+DisableDirPage=auto
+
+#if Defined(DEVEL) && DEVEL != ""
+DefaultDirName={pf}\GIMP {#MAJOR}.{#MINOR}
+LZMANumBlockThreads=4
+LZMABlockSize=76800
+#else
+DefaultDirName={pf}\GIMP {#MAJOR}
+#endif
+
+;AllowNoIcons=true
+FlatComponentsList=yes
+InfoBeforeFile=gpl+python.rtf
+ChangesAssociations=true
+
+WizardImageFile=windows-installer-intro-big.bmp
+WizardImageStretch=yes
+WizardSmallImageFile=wilber.bmp
+
+UninstallDisplayIcon={app}\bin\gimp-{#MAJOR}.{#MINOR}.exe
+UninstallFilesDir={app}\uninst
+
+MinVersion=0,5.01sp3
+//MinVersion=0,5.0
+
+#ifdef NOCOMPRESSION
+UseSetupLdr=no
+OutputDir=_Output\unc
+Compression=none
+InternalCompressLevel=0
+#else
+OutputDir=_Output
+Compression=lzma2/ultra64
+InternalCompressLevel=ultra
+SolidCompression=yes
+LZMAUseSeparateProcess=yes
+LZMANumFastBytes=273
+LZMADictionarySize=524288
+
+#if !defined(REVISION)
+OutputBaseFileName=gimp-{#VERSION}-setup
+#else
+OutputBaseFileName=gimp-{#VERSION}-{#REVISION}-setup
+#endif
+ArchitecturesInstallIn64BitMode=x64
+
+;SignTool=Default
+SignedUninstaller=yes
+SignedUninstallerDir=_Uninst
+
+#endif //NOCOMPRESSION
+
+[Languages]
+Name: "en"; MessagesFile: "compiler:Default.isl,lang\en.setup.isl"
+Name: "ca"; MessagesFile: "compiler:Languages\Catalan.isl,lang\ca.setup.isl"
+Name: "da"; MessagesFile: "compiler:Languages\Danish.isl,lang\da.setup.isl"
+Name: "de"; MessagesFile: "compiler:Languages\German.isl,lang\de.setup.isl"
+Name: "es"; MessagesFile: "compiler:Languages\Spanish.isl,lang\es.setup.isl"
+Name: "fr"; MessagesFile: "compiler:Languages\French.isl,lang\fr.setup.isl"
+Name: "hu"; MessagesFile: "compiler:Languages\Hungarian.isl,lang\hu.setup.isl"
+Name: "it"; MessagesFile: "compiler:Languages\Italian.isl,lang\it.setup.isl"
+Name: "nl"; MessagesFile: "compiler:Languages\Dutch.isl,lang\nl.setup.isl"
+Name: "pl"; MessagesFile: "compiler:Languages\Polish.isl,lang\pl.setup.isl"
+Name: "pt_BR"; MessagesFile: "compiler:Languages\BrazilianPortuguese.isl,lang\pt_BR.setup.isl"
+Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl,lang\ru.setup.isl"
+Name: "sl"; MessagesFile: "compiler:Languages\Slovenian.isl,lang\sl.setup.isl"
+;Name: "ro"; MessagesFile: "Romanian.islu,ro.setup.islu"
+
+[Types]
+;Name: normal; Description: "{cm:TypeTypical}"
+Name: full; Description: "{cm:TypeFull}"
+Name: compact; Description: "{cm:TypeCompact}"
+Name: custom; Description: "{cm:TypeCustom}"; Flags: iscustom
+
+[Components]
+Name: gimp32; Description: "{cm:ComponentsGimp,{#VERSION}}"; Types: full compact custom; Flags: fixed; 
Check: Check3264('32')
+Name: gimp64; Description: "{cm:ComponentsGimp,{#VERSION}}"; Types: full compact custom; Flags: fixed; 
Check: Check3264('64')
+
+Name: wimp; Description: "{cm:ComponentsGtkWimp}"; Types: full custom; Flags: dontinheritcheck 
disablenouninstallwarning
+
+Name: loc; Description: "{cm:ComponentsTranslations}"; Types: full custom
+
+#ifdef PYTHON
+Name: py; Description: "{cm:ComponentsPython}"; Types: full custom; Check: Check3264('32')
+#endif
+
+Name: gimp32on64; Description: "{cm:ComponentsGimp32}"; Types: full custom; Flags: checkablealone; Check: 
Check3264('64')
+#ifdef PYTHON
+Name: gimp32on64\py; Description: "{cm:ComponentsPython}"; Types: full custom; Check: Check3264('64')
+#endif
+
+[Tasks]
+Name: desktopicon; Description: "{cm:AdditionalIconsDesktop}"; GroupDescription: "{cm:AdditionalIcons}"; 
Flags: unchecked
+Name: quicklaunchicon; Description: "{cm:AdditionalIconsQuickLaunch}"; GroupDescription: 
"{cm:AdditionalIcons}"; Flags: unchecked
+
+[Icons]
+#if Defined(DEVEL) && DEVEL != ""
+       #define ICON_VERSION=MAJOR + "." + MINOR
+#else
+       #define ICON_VERSION=MAJOR
+#endif
+Name: "{commonprograms}\GIMP {#ICON_VERSION}"; Filename: "{app}\bin\gimp-{#MAJOR}.{#MINOR}.exe"; WorkingDir: 
"%USERPROFILE%"; Comment: "GIMP {#VERSION}"
+Name: "{commondesktop}\GIMP {#ICON_VERSION}"; Filename: "{app}\bin\gimp-{#MAJOR}.{#MINOR}.exe"; WorkingDir: 
"%USERPROFILE%"; Comment: "GIMP {#VERSION}"; Tasks: desktopicon
+Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\GIMP {#ICON_VERSION}"; Filename: 
"{app}\bin\gimp-{#MAJOR}.{#MINOR}.exe"; WorkingDir: "%USERPROFILE%"; Comment: "GIMP {#VERSION}"; Tasks: 
quicklaunchicon
+
+[Files]
+;setup files
+Source: "setup.ini"; Flags: dontcopy
+Source: "windows-installer-intro-small.bmp"; Flags: dontcopy
+Source: "installsplash.bmp"; Flags: dontcopy
+Source: "installsplash_small.bmp"; Flags: dontcopy
+
+#ifndef NOFILES
+;files common to both 32 and 64-bit versions
+Source: "{#GIMP_DIR32}\etc\*"; DestDir: "{app}\etc"; Components: gimp32 or gimp64; Flags: recursesubdirs 
restartreplace uninsrestartdelete
+Source: "{#GIMP_DIR32}\lib\gimp\2.0\environ\*"; DestDir: "{app}\lib\gimp\2.0\environ"; Components: gimp32 or 
gimp64; Flags: recursesubdirs restartreplace uninsrestartdelete
+Source: "{#GIMP_DIR32}\lib\gimp\2.0\interpreters\*"; DestDir: "{app}\lib\gimp\2.0\interpreters"; Components: 
gimp32 or gimp64; Flags: recursesubdirs restartreplace uninsrestartdelete
+Source: "{#GIMP_DIR32}\share\gimp\*"; DestDir: "{app}\share\gimp"; Components: gimp32 or gimp64; Flags: 
recursesubdirs restartreplace uninsrestartdelete
+;Source: "{#GIMP_DIR32}\share\enchant\*"; DestDir: "{app}\share\enchant"; Components: gimp32 or gimp64; 
Flags: recursesubdirs restartreplace uninsrestartdelete
+;Source: "{#GIMP_DIR32}\share\libwmf\*"; DestDir: "{app}\share\libwmf"; Components: gimp32 or gimp64; Flags: 
recursesubdirs restartreplace uninsrestartdelete
+Source: "{#GIMP_DIR32}\share\themes\*"; DestDir: "{app}\share\themes"; Components: gimp32 or gimp64; Flags: 
recursesubdirs restartreplace uninsrestartdelete
+Source: "{#GIMP_DIR32}\share\xml\*"; DestDir: "{app}\share\xml"; Components: gimp32 or gimp64; Flags: 
recursesubdirs restartreplace uninsrestartdelete
+
+Source: "{#GIMP_DIR32}\share\poppler\*.*"; DestDir: "{app}\share\poppler"; Components: gimp32 or gimp64; 
Flags: recursesubdirs restartreplace uninsrestartdelete
+
+Source: "{#GIMP_DIR32}\share\locale\*"; DestDir: "{app}\share\locale"; Components: loc; Flags: 
recursesubdirs restartreplace uninsrestartdelete
+Source: "{#GIMP_DIR32}\share\locale\*"; DestDir: "{app}\share\locale"; Components: loc; Flags: 
recursesubdirs restartreplace uninsrestartdelete
+
+Source: "{#GIMP_DIR32}\etc\fonts\*"; DestDir: "{app}\etc\fonts"; Components: gimp32 or gimp64; Flags: 
recursesubdirs restartreplace uninsrestartdelete
+Source: "{#GIMP_DIR32}\etc\gtk-2.0\*"; DestDir: "{app}\etc\gtk-2.0"; Excludes: gtkrc; Components: gimp32 or 
gimp64; Flags: recursesubdirs restartreplace uninsrestartdelete
+Source: "{#GIMP_DIR32}\etc\gtk-2.0\gtkrc"; DestDir: "{app}\etc\gtk-2.0"; Components: wimp; Flags: 
recursesubdirs restartreplace uninsrestartdelete
+
+;ghostscript TODO: detect version automatically
+Source: "{#GIMP_DIR32}\share\ghostscript\8.71\lib\*.*"; DestDir: "{app}\share\ghostscript\8.71\lib"; 
Components: gimp32 or gimp64; Flags: recursesubdirs restartreplace uninsrestartdelete
+Source: "{#GIMP_DIR32}\share\ghostscript\8.71\Resource\*.*"; DestDir: 
"{app}\share\ghostscript\8.71\Resource"; Components: gimp32 or gimp64; Flags: recursesubdirs restartreplace 
uninsrestartdelete
+
+;32-on-64bit
+#include "32on64.isi"
+;prefer 32bit twain plugin over 64bit because 64bit twain drivers are rare
+Source: "{#GIMP_DIR32}\lib\gimp\2.0\plug-ins\twain.exe"; DestDir: "{app}\lib\gimp\2.0\plug-ins"; Components: 
gimp32on64; Flags: recursesubdirs restartreplace uninsrestartdelete
+Source: "{#GIMP_DIR64}\lib\gimp\2.0\plug-ins\twain.exe"; DestDir: "{app}\lib\gimp\2.0\plug-ins"; Components: 
(not gimp32on64) and gimp64; Flags: recursesubdirs restartreplace uninsrestartdelete
+;special case due to MS-Windows engine
+Source: "{#GIMP_DIR32}\etc\gtk-2.0\*"; DestDir: "{app}\32\etc\gtk-2.0"; Excludes: gtkrc; Components: 
gimp32on64; Flags: recursesubdirs restartreplace uninsrestartdelete
+Source: "{#GIMP_DIR32}\etc\gtk-2.0\gtkrc"; DestDir: "{app}\32\etc\gtk-2.0"; Components: gimp32on64 and wimp; 
Flags: recursesubdirs restartreplace uninsrestartdelete
+;python scripts
+#ifdef PYTHON
+Source: "{#GIMP_DIR32}\lib\gimp\2.0\plug-ins\*.py"; DestDir: "{app}\lib\gimp\2.0\plug-ins"; Components: 
gimp32on64\py; Flags: recursesubdirs restartreplace uninsrestartdelete
+Source: "{#GIMP_DIR32}\lib\gimp\2.0\python\*.p*"; DestDir: "{app}\32\lib\gimp\2.0\python"; Components: 
gimp32on64\py; Flags: recursesubdirs restartreplace uninsrestartdelete
+#endif
+
+;32bit
+#define PLATFORM 32
+#include "files.isi"
+;special case, since 64bit version doesn't work, and is excluded in files.isi
+Source: "{#GIMP_DIR32}\lib\gimp\2.0\plug-ins\twain.exe"; DestDir: "{app}\lib\gimp\2.0\plug-ins"; Components: 
gimp32; Flags: recursesubdirs restartreplace uninsrestartdelete
+;python scripts
+#ifdef PYTHON
+Source: "{#GIMP_DIR32}\lib\gimp\2.0\plug-ins\*.py"; DestDir: "{app}\lib\gimp\2.0\plug-ins"; Components: py; 
Flags: recursesubdirs restartreplace uninsrestartdelete
+Source: "{#GIMP_DIR32}\lib\gimp\2.0\python\*.p*"; DestDir: "{app}\lib\gimp\2.0\python"; Components: py; 
Flags: recursesubdirs restartreplace uninsrestartdelete
+#endif
+
+;64bit
+#define PLATFORM 64
+#include "files.isi"
+
+;upgrade zlib1.dll in System32 if it's present there to avoid breaking plugins
+;sharedfile flag will ensure that the upgraded file is left behind on uninstall to avoid breaking other 
programs that use the file
+Source: "{#GIMP_DIR32}\bin\zlib1.dll"; DestDir: "{sys}"; Components: gimp32 or gimp64; Flags: restartreplace 
sharedfile 32bit uninsrestartdelete; Check: BadSysDLL('zlib1.dll',32)
+Source: "{#GIMP_DIR64}\bin\zlib1.dll"; DestDir: "{sys}"; Components: gimp64; Flags: restartreplace 
sharedfile uninsrestartdelete; Check: BadSysDLL('zlib1.dll',64)
+
+;overridden configuration files
+#include "configoverride.isi"
+
+;python
+#ifdef PYTHON
+Source: "{#PY_DIR}\pythonw.exe"; DestDir: "{app}\Python"; Components: py or gimp32on64\py; Flags: 
restartreplace uninsrestartdelete
+Source: "{#PY_DIR}\python.exe"; DestDir: "{app}\Python"; Components: py or gimp32on64\py; Flags: 
restartreplace uninsrestartdelete
+Source: "{#PY_DIR}\python27.dll"; DestDir: "{app}\Python"; Components: py or gimp32on64\py; Flags: 
restartreplace uninsrestartdelete
+Source: "{#PY_DIR}\DLLs\*"; DestDir: "{app}\Python\DLLs"; Components: py or gimp32on64\py; Flags: 
recursesubdirs restartreplace uninsrestartdelete
+Source: "{#PY_DIR}\Lib\*"; DestDir: "{app}\Python\Lib"; Components: py or gimp32on64\py; Flags: 
recursesubdirs restartreplace uninsrestartdelete
+#endif
+#endif //NOFILES
+
+[InstallDelete]
+Type: files; Name: "{app}\bin\gimp-?.?.exe"
+Type: files; Name: "{app}\bin\gimp-console-?.?.exe"
+Type: files; Name: "{app}\lib\gegl-0.1\*.dll"
+;obsolete plugins from gimp 2.6
+Type: files; Name: "{app}\lib\gimp\2.0\plug-ins\file-pdf.exe"
+Type: files; Name: "{app}\lib\gimp\2.0\plug-ins\gee.exe"
+Type: files; Name: "{app}\lib\gimp\2.0\plug-ins\gee-zoom.exe"
+
+[UninstallDelete]
+Type: files; Name: "{app}\uninst\uninst.inf"
+;need to clean out all the generated .pyc files
+Type: filesandordirs; Name: "{app}\Python\*"
+
+[Code]
+
+function WideCharToMultiByte(CodePage: Cardinal; dwFlags: DWORD; lpWideCharStr: String; cchWideCharStr: 
Integer;
+                             lpMultiByteStr: PAnsiChar; cbMultiByte: Integer; lpDefaultChar: Integer;
+                             lpUsedDefaultChar: Integer): Integer; external 'WideCharToMultiByte@Kernel32 
stdcall';
+
+function MultiByteToWideChar(CodePage: Cardinal; dwFlags: DWORD; lpMultiByteStr: PAnsiChar; cbMultiByte: 
Integer;
+                             lpWideCharStr: String; cchWideChar: Integer): Integer;
+                             external 'MultiByteToWideChar@Kernel32 stdcall';
+
+function GetLastError(): DWORD; external 'GetLastError@Kernel32 stdcall';
+
+function GetSysColor(nIndex: Integer): DWORD; external 'GetSysColor user32 dll stdcall';
+
+function IsProcessorFeaturePresent(ProcessorFeature: DWORD): LongBool; external 
'IsProcessorFeaturePresent@kernel32 stdcall';
+
+//functions needed to get BPP
+function GetDC(hWnd: Integer): Integer; external 'GetDC@User32 stdcall';
+function ReleaseDC(hWnd, hDC: Integer): Integer; external 'ReleaseDC@User32 stdcall';
+function GetDeviceCaps(hDC, nIndex: Integer): Integer; external 'GetDeviceCaps@GDI32 stdcall';
+
+
+procedure ComponentsListOnClick(pSender: TObject); forward;
+procedure SaveToUninstInf(const pText: AnsiString); forward;
+procedure CreateRunOnceEntry; forward;
+function RestartSetupAfterReboot(): Boolean; forward;
+
+const
+       CP_ACP = 0;
+       CP_UTF8 = 65001;
+
+       COLOR_HOTLIGHT = 26;
+
+       PF_XMMI_INSTRUCTIONS_AVAILABLE = 6;
+
+       BITSPIXEL = 12;
+       PLANES = 14;
+
+       GIMP_URL = 'http://www.gimp.org/';
+
+       RTFHeader = '{\rtf1\deff0{\fonttbl{\f0\fswiss\fprq2\fcharset0 Tahoma;}{\f1\fnil\fcharset2 
Symbol;}}\viewkind4\uc1\fs16';
+       //RTFBullet = '{\pntext\f1\''B7\tab}';
+       RTFPara   = '\par ';
+
+       RunOnceName = 'Resume GIMP {#VERSION} install';
+
+       CONFIG_OVERRIDE_PARAM = 'configoverride';
+
+       UNINSTALL_MAX_WAIT_TIME = 10000;
+       UNINSTALL_CHECK_TIME    =   250;
+
+type
+       TRemoveOldGIMPResult = (rogContinue, rogRestartRequired, rogUninstallFailed, rogCantUninstall);
+
+var
+       lblComponentDescription: TNewStaticText;
+
+       SetupINI: String;
+
+       ReadyMemoRichText: String;
+
+       WelcomeBitmapBottom: TBitmapImage;
+
+       Associations: record
+               AssociationsPage: record
+                       Page: TWizardPage;
+                       clbAssociations: TNewCheckListBox;
+                       lblAssocInfo2: TNewStaticText;
+               end;
+               Association: array of record
+                       Description: String;
+                       Extensions: TArrayOfString;
+                       Selected: Boolean;
+                       Associated: Boolean;
+                       AssociatedElsewhere: String;
+               end;
+       end;
+
+       //pgSimple: TWizardPage;
+       btnInstall, btnCustomize: TNewButton;
+
+       InstallMode: (imNone, imSimple, imCustom, imRebootContinue);
+
+       ConfigOverride: (coUndefined, coOverride, coDontOverride);
+
+       Force32bitInstall: Boolean;
+
+       asUninstInf: TArrayOfString; //uninst.inf contents (loaded at start of uninstall, exectued at the end)
+
+
+#include "MessageWithURL.isi"
+
+function Check3264(const pWhich: String): Boolean;
+begin
+       if pWhich = '64' then
+               Result := Is64BitInstallMode() and (not Force32bitInstall)
+       else if pWhich = '32' then
+               Result := (not Is64BitInstallMode()) or Force32bitInstall
+       else
+               RaiseException('Unknown check');
+end;
+
+
+#include "utils.isi"
+
+
+//some programs inproperly install libraries to the System32 directory, which then causes problems with 
plugins
+//this function checks if such file exists in System32, and lets setup update the file when it exists
+function BadSysDLL(const pFile: String; const pPlatform: Integer): Boolean;
+var    OldRedir: Boolean;
+begin
+       Result := False;
+
+       if pPlatform = 64 then
+       begin
+               if Is64BitInstallMode() then //only check when installing in 64bit mode
+               begin
+                       OldRedir := EnableFsRedirection(False);
+                       DebugMsg('BadSysDLL','64: ' + ExpandConstant('{sys}\' + pFile));
+                       Result := FileExists(ExpandConstant('{sys}\' + pFile));
+                       EnableFsRedirection(OldRedir);
+               end;
+       end
+       else if pPlatform = 32 then
+       begin
+               if Is64BitInstallMode() then //check 32bit system directory on x64 windows
+               begin
+                       DebugMsg('BadSysDLL','32on64: ' + ExpandConstant('{syswow64}\' + pFile));
+                       Result := FileExists(ExpandConstant('{syswow64}\' + pFile));
+               end
+               else
+               begin
+                       DebugMsg('BadSysDLL','32: ' + ExpandConstant('{sys}\' + pFile));
+                       Result := FileExists(ExpandConstant('{sys}\' + pFile));
+               end;
+       end
+       else
+       begin
+               RaiseException('Unsupported platform');
+       end;
+
+       DebugMsg('BadSysDLL','Result: ' + BoolToStr(Result));
+end;
+
+
+function DoConfigOverride: Boolean;
+var i: Integer;
+begin
+
+       if ConfigOverride = coUndefined then
+       begin
+
+               DebugMsg('DoConfigOverride', 'First call');
+               
+               Result := False;
+               ConfigOverride := coDontOverride;
+
+               for i := 0 to ParamCount() do //use ParamCount/ParamStr to allow specifying /configoverride 
without any parameters
+                       if LowerCase(Copy(ParamStr(i),1,15)) = '/' + CONFIG_OVERRIDE_PARAM then
+                       begin
+                               Result := True;
+                               ConfigOverride := coOverride;
+                               break;
+                       end;
+
+       end
+       else if ConfigOverride = coOverride then
+               Result := True
+       else
+               Result := False;
+
+       DebugMsg('DoConfigOverride', BoolToStr(Result));
+end;
+
+function GetExternalConfDir(Unused: String): String;
+begin
+       if ExpandConstant('{param:' + CONFIG_OVERRIDE_PARAM + '|<>}') = '<>' then
+               Result := ExpandConstant('{src}\')
+       else
+               Result := ExpandConstant('{param:' + CONFIG_OVERRIDE_PARAM + '|<>}\');
+       DebugMsg('GetExternalConfDir', Result);
+end;
+
+function CheckExternalConf(const pFile: String): Boolean;
+begin
+
+       if not DoConfigOverride then //no config override
+               Result := False
+       else
+       begin
+               if FileExists(GetExternalConfDir('') + pFile) then //config file override only applies when 
that file exists
+                       Result := True
+               else
+                       Result := False;
+       end;
+       DebugMsg('CheckExternalConf', pFile + ': ' + BoolToStr(Result));
+end;
+
+
+#include "associations.isi"
+
+
+procedure PreparePyGimp();
+var PyGimpInterp,Interp: String;
+begin
+       if IsComponentSelected('py') or IsComponentSelected('gimp32on64\py') then
+       begin
+               StatusLabel(CustomMessage('SettingUpPyGimp'),'');
+
+               PyGimpInterp := ExpandConstant('{app}\lib\gimp\2.0\interpreters\pygimp.interp');
+        DebugMsg('PreparePyGimp','Writing interpreter file for gimp-python: ' + PyGimpInterp);
+               
+               Interp := 'python=' + ExpandConstant('{app}\Python\pythonw.exe') + #10 + 
+                          '/usr/bin/python=' + ExpandConstant('{app}\Python\pythonw.exe') + 
#10':Python:E::py::python:'#10
+
+               if not SaveStringToUTF8File(PyGimpInterp,Interp,False) then
+               begin
+                       DebugMsg('PreparePyGimp','Problem writing the file. [' + Interp + ']');
+                       SuppressibleMsgBox(CustomMessage('ErrorUpdatingPython') + ' 
(2)',mbInformation,mb_ok,IDOK);
+               end;
+
+       end;
+end;
+
+
+procedure PrepareGimpPath();
+var DefaultEnv,Env: String;
+begin
+       
+       StatusLabel(CustomMessage('SettingUpEnvironment'),'');
+
+       //set PATH to be used by plug-ins
+       DefaultEnv := ExpandConstant('{app}\lib\gimp\2.0\environ\default.env');
+       DebugMsg('PrepareGimpPath','Setting environment in ' + DefaultEnv);
+
+       Env := #10'PATH=${gimp_installation_dir}\bin';
+       
+       if IsComponentSelected('gimp32on64') then
+       begin
+
+               Env := Env + ';${gimp_installation_dir}\32\bin' + #10;
+
+               if IsComponentSelected('gimp32on64\py') then
+                       Env := Env + 'PYTHONPATH=${gimp_installation_dir}\32\lib\gimp\2.0\python' + #10;
+
+       end else
+       begin
+
+               Env := Env + #10;
+
+       end;
+
+       if IsComponentSelected('py') then
+               Env := Env + 'PYTHONPATH=${gimp_installation_dir}\lib\gimp\2.0\python' + #10;
+
+       DebugMsg('PrepareGimpPath','Appending ' + Env);
+
+       if not SaveStringToUTF8File(DefaultEnv,Env,True) then
+       begin
+               DebugMsg('PrepareGimpPath','Problem appending');
+               
SuppressibleMsgBox(FmtMessage(CustomMessage('ErrorChangingEnviron'),[DefaultEnv]),mbInformation,mb_ok,IDOK);
+       end;
+end;
+
+
+#if 0
+procedure PrepareGimpRC();
+var GimpRC,GimpRCText: String;
+       GimpRCTextA: AnsiString;
+begin
+       if IsComponentSelected('gimp32on64') then
+       begin
+               StatusLabel(CustomMessage('SettingUpGimpRC'),'');
+
+               GimpRC := ExpandConstant('{app}\etc\gimp\2.0\gimprc');
+        DebugMsg('PrepareGimpRC','Updating gimprc: ' + GimpRC);
+
+        if not LoadStringFromFile(GimpRC,GimpRCTextA) then
+        begin
+                       DebugMsg('PrepareGimpRC','Problem loading');
+                       
SuppressibleMsgBox(FmtMessage(CustomMessage('ErrorReadingGimpRC'),[GimpRC]),mbInformation,mb_ok,IDOK);
+        end;
+
+        GimpRCText := GimpRCTextA;
+        
+        StringChangeEx(GimpRCText,'# (plug-in-path', //add (relative) path to 32-bit plugin dir
+                       '(plug-in-path 
"${gimp_dir}\\plug-ins;${gimp_plug_in_dir}\\plug-ins;${gimp_plug_in_dir}\\..\\..\\..\\32\\lib\\gimp\\2.0\\plug-ins")'#10'#
 (plug-in-path',
+                       False);
+
+        if not SaveStringToUTF8File(GimpRC,GimpRCText,False) then
+        begin
+                       DebugMsg('PrepareGimpRC','Problem saving');
+                       
SuppressibleMsgBox(FmtMessage(CustomMessage('ErrorUpdatingGimpRC'),[GimpRC]),mbInformation,mb_ok,IDOK);
+        end;
+       end;
+end;
+#endif
+
+
+procedure CleanUpCustomWelcome();
+begin
+       WizardForm.NextButton.Visible := True;
+       btnInstall.Visible := False;
+       btnCustomize.Visible := False;
+
+       WizardForm.Bevel.Visible := True;
+       WelcomeBitmapBottom.Visible := False;
+end;
+
+
+procedure InstallOnClick(Sender: TObject);
+begin
+       DebugMsg('Install mode','Simple');
+       InstallMode := imSimple;
+
+       CleanUpCustomWelcome();
+
+       WizardForm.NextButton.OnClick(TNewButton(Sender).Parent);
+end;
+
+
+procedure CustomizeOnClick(Sender: TObject);
+begin
+       DebugMsg('Install mode','Custom');
+       InstallMode := imCustom;
+       
+       CleanUpCustomWelcome();
+
+       WizardForm.NextButton.OnClick(TNewButton(Sender).Parent);
+end;
+
+
+function GetButtonWidth(const Texts: TArrayOfString; const Minimum: Integer): Integer;
+var MeasureLabel: TNewStaticText;
+       i: Integer;
+begin
+       MeasureLabel := TNewStaticText.Create(WizardForm);
+       with MeasureLabel do
+       begin
+               Parent := WizardForm;
+               Left := 0;
+               Top := 0;
+               AutoSize := True;
+       end;
+
+       Result := Minimum;
+
+       for i := 0 to GetArrayLength(Texts) - 1 do
+       begin
+               MeasureLabel.Caption := Texts[i];
+               if (MeasureLabel.Width + ScaleX(16)) > Result then
+                       Result := (MeasureLabel.Width + ScaleX(16));
+       end;
+
+       MeasureLabel.Free;
+end;
+
+
+procedure InitCustomPages();
+var lblAssocInfo: TNewStaticText;
+       btnSelectAll,btnSelectUnused: TNewButton;
+       i,ButtonWidth: Integer;
+       ButtonText: TArrayOfString;
+       MeasureLabel: TNewStaticText;
+       //lblInfo: TNewStaticText;
+begin
+       DebugMsg('InitCustomPages','pgAssociations');
+       Associations.AssociationsPage.Page := 
CreateCustomPage(wpSelectComponents,CustomMessage('SelectAssociationsCaption'),CustomMessage('SelectAssociationsCaption'));
+
+       lblAssocInfo := TNewStaticText.Create(Associations.AssociationsPage.Page);
+       with lblAssocInfo do
+       begin
+               Parent := Associations.AssociationsPage.Page.Surface;
+               Left := 0;
+               Top := 0;
+               Width := Associations.AssociationsPage.Page.SurfaceWidth;
+               Height := ScaleY(13);
+               WordWrap := True;
+               AutoSize := True;
+               Caption := 
CustomMessage('SelectAssociationsInfo1')+#13+CustomMessage('SelectAssociationsInfo2')+#13;
+       end;    
+       Associations.AssociationsPage.lblAssocInfo2 := 
TNewStaticText.Create(Associations.AssociationsPage.Page);
+       with Associations.AssociationsPage.lblAssocInfo2 do
+       begin
+               Parent := Associations.AssociationsPage.Page.Surface;
+               Left := 0;
+               Width := Associations.AssociationsPage.Page.SurfaceWidth;
+               Height := 13;
+               AutoSize := True;
+               Caption := #13+CustomMessage('SelectAssociationsExtensions');
+       end;
+       
+       Associations.AssociationsPage.clbAssociations := 
TNewCheckListBox.Create(Associations.AssociationsPage.Page);
+       with Associations.AssociationsPage.clbAssociations do
+       begin
+               Parent := Associations.AssociationsPage.Page.Surface;
+               Left := 0;
+               Top := lblAssocInfo.Top + lblAssocInfo.Height;
+               Width := Associations.AssociationsPage.Page.SurfaceWidth;
+               Height := Associations.AssociationsPage.Page.SurfaceHeight - lblAssocInfo.Height - 
Associations.AssociationsPage.lblAssocInfo2.Height - ScaleX(8);
+               TabOrder := 1;
+               Flat := True;
+
+               Associations.AssociationsPage.lblAssocInfo2.Top := Height + Top;
+
+               OnClick := @Associations_OnClick;
+
+               for i := 0 to GetArrayLength(Associations.Association) - 1 do
+                       AddCheckBox(Associations.Association[i].Description,
+                                   '',
+                                   0,
+                                   Associations.Association[i].Selected,
+                                   not Associations.Association[i].Associated, //don't allow unchecking 
associations that are already present
+                                   False,
+                                   False,
+                                   nil
+                                  );                   
+
+       end;
+
+       SetArrayLength(ButtonText, 3);
+       ButtonText[0] := CustomMessage('SelectAssociationsSelectUnused');
+       ButtonText[1] := CustomMessage('SelectAssociationsSelectAll');
+       ButtonText[2] := CustomMessage('SelectAssociationsUnselectAll');
+       ButtonWidth := GetButtonWidth(ButtonText, WizardForm.NextButton.Width);
+
+       btnSelectUnused := TNewButton.Create(Associations.AssociationsPage.Page);
+       with btnSelectUnused do
+       begin
+               Parent := Associations.AssociationsPage.Page.Surface;
+               Width := ButtonWidth;
+               Left := Associations.AssociationsPage.Page.SurfaceWidth - Width * 2;
+               Height := WizardForm.NextButton.Height;
+               Top := Associations.AssociationsPage.clbAssociations.Top + 
Associations.AssociationsPage.clbAssociations.Height + ScaleX(8);
+               Caption := CustomMessage('SelectAssociationsSelectUnused');
+               OnClick := @Associations_SelectUnused;
+       end;
+
+       btnSelectAll := TNewButton.Create(Associations.AssociationsPage.Page);
+       with btnSelectAll do
+       begin
+               Parent := Associations.AssociationsPage.Page.Surface;
+               Width := ButtonWidth;
+               Left := Associations.AssociationsPage.Page.SurfaceWidth - Width;
+               Height := WizardForm.NextButton.Height;
+               Top := Associations.AssociationsPage.clbAssociations.Top + 
Associations.AssociationsPage.clbAssociations.Height + ScaleX(8);
+               Caption := CustomMessage('SelectAssociationsSelectAll');
+               OnClick := @Associations_SelectAll;
+       end;
+
+       DebugMsg('InitCustomPages','wpLicense');
+
+       (*pgSimple := CreateCustomPage(wpInfoBefore,SetupMessage(msgWizardReady),
+                    Replace('[name]','{#SetupSetting("AppName")}',SetupMessage(msgReadyLabel1)));
+
+       lblInfo := TNewStaticText.Create(pgSimple);
+       with lblInfo do
+       begin
+               Parent := pgSimple.Surface;
+               Left := 0;
+               Top := 0;
+
+               WordWrap := True;
+               AutoSize := True;
+               Width := pgSimple.SurfaceWidth;
+
+               Caption := CustomMessage('InstallOrCustomize');
+       end;*)
+
+       btnInstall := TNewButton.Create(WizardForm);
+       with btnInstall do
+       begin
+               Parent := WizardForm;
+               Width := WizardForm.NextButton.Width;
+               Height := WizardForm.NextButton.Height;
+               Left := WizardForm.NextButton.Left;
+               Top := WizardForm.NextButton.Top;
+               Caption := CustomMessage('Install');
+               Default := True;
+               Visible := False;
+
+               OnClick := @InstallOnClick;
+       end;
+
+       //used to measure text width
+       MeasureLabel := TNewStaticText.Create(WizardForm);
+       with MeasureLabel do
+       begin
+               Parent := WizardForm;
+               Left := 0;
+               Top := 0;
+               AutoSize := True;
+               Caption := CustomMessage('Customize');
+       end;
+
+       btnCustomize := TNewButton.Create(WizardForm);
+       with btnCustomize do
+       begin
+               Parent := WizardForm;
+               Width := WizardForm.NextButton.Width;
+
+               if Width < (MeasureLabel.Width + ScaleX(8)) then
+                       Width := MeasureLabel.Width + ScaleX(8);
+
+               Height := WizardForm.NextButton.Height;
+               Left := WizardForm.ClientWidth - (WizardForm.CancelButton.Left + 
WizardForm.CancelButton.Width);
+               //Left := WizardForm.BackButton.Left;
+               Top := WizardForm.NextButton.Top;
+               Visible := False;
+
+               Caption := CustomMessage('Customize');
+
+               OnClick := @CustomizeOnClick;
+       end;
+
+       MeasureLabel.Free;
+
+end;
+
+
+procedure SelectComponentsFaceLift();
+var pnlDescription: TPanel;
+       lblDescription: TNewStaticText;
+begin
+       DebugMsg('SelectComponentsFaceLift','');
+
+       if WizardForm.ComponentsList.Width = WizardForm.SelectComponentsPage.Width then
+               WizardForm.ComponentsList.Width := Round(WizardForm.ComponentsList.Width * 0.6)
+       else
+               exit;
+       DebugMsg('SelectComponentsFaceLift','2');
+                       
+       WizardForm.ComponentsList.OnClick := @ComponentsListOnClick;
+                       
+       lblDescription := TNewStaticText.Create(WizardForm.ComponentsList.Parent)
+       with lblDescription do
+       begin
+               Left := WizardForm.ComponentsList.Left + WizardForm.ComponentsList.Width + ScaleX(16);
+               Top := WizardForm.ComponentsList.Top;
+               AutoSize := True;
+               Caption := CustomMessage('ComponentsDescription');
+       end;
+                       
+       pnlDescription := TPanel.Create(WizardForm.ComponentsList.Parent);
+       with pnlDescription do
+       begin
+               Parent := WizardForm.ComponentsList.Parent;
+               Left := WizardForm.ComponentsList.Left + WizardForm.ComponentsList.Width + ScaleX(8);
+               Width := WizardForm.TypesCombo.Width - WizardForm.ComponentsList.Width - ScaleX(8);
+               BevelOuter := bvLowered;
+               BevelInner := bvRaised;
+               Top := WizardForm.ComponentsList.Top + Round(lblDescription.Height * 0.4);
+               Height := WizardForm.ComponentsList.Height - Round(lblDescription.Height * 0.4);
+       end;
+
+       lblDescription.Parent := WizardForm.ComponentsList.Parent; //place lblDescription above pnlDescription
+                       
+       lblComponentDescription := TNewStaticText.Create(pnlDescription);
+       with lblComponentDescription do
+       begin
+               Parent := pnlDescription;
+               Left := ScaleX(8);
+               WordWrap := True;
+               AutoSize := False;
+               Width := Parent.Width - ScaleX(16);
+               Height := Parent.Height - ScaleY(20);
+               Top := ScaleY(12);
+       end;
+                       
+end;
+
+
+procedure ReadyFaceLift();
+var rtfNewReadyMemo: TRichEditViewer;
+begin
+       DebugMsg('ReadyFaceLift','');
+       WizardForm.ReadyMemo.Visible := False;
+               
+       rtfNewReadyMemo := TRichEditViewer.Create(WizardForm.ReadyMemo.Parent);
+       with rtfNewReadyMemo do
+       begin
+               Parent := WizardForm.ReadyMemo.Parent;
+               Scrollbars := ssVertical;
+               Color := WizardForm.Color;
+               UseRichEdit := True;
+               RTFText := ReadyMemoRichText;
+               ReadOnly := True;
+               Left := WizardForm.ReadyMemo.Left;
+               Top := WizardForm.ReadyMemo.Top;
+               Width := WizardForm.ReadyMemo.Width;
+               Height := WizardForm.ReadyMemo.Height;
+               Visible := True;
+       end;
+end;
+
+
+procedure lblURL_OnClick(Sender: TObject);
+var ErrorCode: Integer;
+begin
+       ShellExecAsOriginalUser('',GIMP_URL,'','',SW_SHOW,ewNoWait,ErrorCode);
+end;
+
+
+function MeasureLabel(const pText: String): Integer; //WordWrap + AutoSize works better with TNewStaticText 
than with TLabel,
+var lblMeasure: TNewStaticText;                      //abuse this
+begin
+       lblMeasure := TNewStaticText.Create(WizardForm.InstallingPage);
+       with lblMeasure do
+       begin
+               Parent := WizardForm.InstallingPage;
+
+               AutoSize := True;
+               WordWrap := True;
+               Width := Parent.ClientWidth;
+
+               Caption := pText;
+
+               Result := Height;
+       end;
+       lblMeasure.Free;
+end;
+
+
+procedure InstallingFaceLift();
+var lblMessage1,lblURL,lblMessage2: TLabel; //TNewStaticText doesn't support alignment
+begin
+       with WizardForm.ProgressGauge do
+       begin
+               Height := ScaleY(16);
+               Top := WizardForm.InstallingPage.ClientHeight - Top - Height;
+
+               WizardForm.StatusLabel.Top := Top - WizardForm.FilenameLabel.Height - ScaleY(4);
+               WizardForm.FilenameLabel.Top := Top + Height + ScaleY(4);
+       end;
+
+       lblMessage1 := TLabel.Create(WizardForm.InstallingPage);
+       with lblMessage1 do
+       begin
+               Parent := WizardForm.InstallingPage;
+
+               Alignment := taCenter;
+               WordWrap := True;
+               AutoSize := False;
+               Width := WizardForm.InstallingPage.ClientWidth;
+               Height := MeasureLabel(CustomMessage('Billboard1'));
+
+               Caption := CustomMessage('Billboard1');
+       end;
+
+       lblURL := TLabel.Create(WizardForm.InstallingPage);
+       with lblURL do
+       begin
+               Parent := WizardForm.InstallingPage;
+
+               AutoSize := True;
+               WordWrap := False;
+
+               Font.Color := GetSysColor(COLOR_HOTLIGHT);
+               Font.Style := [fsUnderline];
+               Font.Size := 12;
+
+               Cursor := crHand;
+
+               OnClick := @lblURL_OnClick;
+
+               Caption := 'http://www.gimp.org/';
+
+               Left := Integer(WizardForm.InstallingPage.ClientWidth / 2 - Width / 2);
+       end;
+
+       lblMessage2 := TLabel.Create(WizardForm.InstallingPage);
+       with lblMessage2 do
+       begin
+               Parent := WizardForm.InstallingPage;
+
+               Alignment := taCenter;
+               WordWrap := True;
+               AutoSize := False;
+               Width := WizardForm.InstallingPage.ClientWidth;
+               Height := MeasureLabel(CustomMessage('Billboard2'));
+
+               Caption := CustomMessage('Billboard2');
+       end;
+
+       lblMessage1.Top := Integer(WizardForm.StatusLabel.Top / 2 -
+                                  (lblMessage1.Height + ScaleY(4) + lblURL.Height + ScaleY(4) + 
lblMessage2.Height) / 2);
+       lblURL.Top := lblMessage1.Top + lblMessage1.Height + ScaleY(4);
+       lblMessage2.Top := lblURL.Top + lblURL.Height + ScaleY(4);
+
+end;
+
+
+procedure ComponentsListOnClick(pSender: TObject);
+var i,j: Integer;
+       Components: TArrayOfString;
+       ComponentDesc: String;
+begin
+       DebugMsg('ComponentsListOnClick','');
+
+       Components := ['Gimp','Deps','GtkWimp','Translations','Python','Ghostscript','Gimp32','Compat'];
+       ComponentDesc := '';
+       
+       for i := 0 to TNewCheckListBox(pSender).Items.Count - 1 do
+               if TNewCheckListBox(pSender).Selected[i] then
+               begin
+                       for j := 0 to Length(Components) - 1 do
+                       begin
+                               if TNewCheckListBox(pSender).Items.Strings[i] = CustomMessage('Components' + 
Components[j]) then
+                                       ComponentDesc := CustomMessage('Components' + Components[j] + 
'Description');
+                       end;
+
+                       if ComponentDesc <> '' then
+                               break;
+               end;
+
+       lblComponentDescription.Caption := ComponentDesc;
+
+end;
+
+
+function CopyW(const S: String; const Start, Len: Integer): String; //work-around for unicode-related bug in 
Copy
+begin
+       Result := Copy(S, Start, Len);
+end;
+
+function Unicode2RTF(const pIn: String): String; //convert to RTF-compatible unicode
+var    i: Integer;
+       c: SmallInt;
+begin
+       Result := '';
+       for i := 1 to Length(pIn) do
+               if Ord(pIn[i]) <= 127 then
+               begin
+                       Result := Result + pIn[i];
+               end else
+               begin
+                       c := Ord(pIn[i]); //code points above 7FFF must be expressed as negative numbers
+                       Result := Result + '\u' + IntToStr(c) + '?';
+               end;
+end;
+
+function ParseReadyMemoText(pSpaces,pText: String): String;
+var sTemp: String;
+begin
+
+       sTemp := CopyW(pText,Pos(#10,pText)+1,Length(pText));
+       sTemp := Replace('{','\{',sTemp);
+       sTemp := Replace('\','\\',sTemp);
+       sTemp := Replace(#13#10,RTFpara,sTemp);
+       sTemp := Replace(pSpaces,'',sTemp);
+       sTemp := '\b ' + CopyW(pText,1,Pos(#13,pText)-1) + '\par\sb0' +
+                                               '\li284\b0 ' + sTemp + '\par \pard';
+
+       Result := Unicode2RTF(sTemp);
+end;
+
+
+function UpdateReadyMemo(pSpace, pNewLine, pMemoUserInfo, pMemoDirInfo, pMemoTypeInfo, pMemoComponentsInfo, 
pMemoGroupInfo, pMemoTasksInfo: String): String;
+var sText: String;
+       bShowAssoc: Boolean;
+       i,j: Integer;
+begin
+       DebugMsg('UpdateReadyMemo','');
+       (* Prepare the text for new Ready Memo *)
+       
+       sText := RTFHeader;
+       if pMemoDirInfo <> '' then
+               sText := sText + ParseReadyMemoText(pSpace,pMemoDirInfo) + '\sb100';
+       sText := sText + ParseReadyMemoText(pSpace,pMemoTypeInfo);
+       sText := sText + '\sb100' + ParseReadyMemoText(pSpace,pMemoComponentsInfo);
+
+       for i := 0 to GetArrayLength(Associations.Association) - 1 do
+               if Associations.Association[i].Selected then
+                       bShowAssoc := True;
+
+       if bShowAssoc then
+       begin
+               sText := sText + '\sb100\b '+Unicode2RTF(CustomMessage('ReadyMemoAssociations'))+'\par 
\sb0\li284\b0 '; //which file types to associate
+
+               for i := 0 to GetArrayLength(Associations.Association) - 1 do                                 
                  
+                       if Associations.Association[i].Selected then
+                               for j := 0 to GetArrayLength(Associations.Association[i].Extensions) - 1 do
+                                       sText := sText + LowerCase(Associations.Association[i].Extensions[j]) 
+ ', ';
+                                       
+               sText := Copy(sText, 1, Length(sText) - 2) + '\par \pard';
+
+       end;
+       
+       //sText := sText + '\sb100' + ParseReadyMemoText(pSpace,pMemoGroupInfo);
+
+       If pMemoTasksInfo<>'' then
+               sText := sText + '\sb100' + ParseReadyMemoText(pSpace,pMemoTasksInfo);
+               
+       ReadyMemoRichText := Copy(sText,1,Length(sText)-6) + '}';
+
+       Result := 'If you see this, something went wrong';
+end;
+
+
+#if 0 && (Defined(DEVEL) && DEVEL != "")
+procedure chkTesting_onClick(Sender: TObject);
+begin
+       if TCheckBox(Sender).Checked then
+               WizardForm.NextButton.Enabled := True
+       else
+               WizardForm.NextButton.Enabled := False;
+end;
+
+
+procedure WarnTestingVersion();
+var lblTesting: TNewStaticText;
+       chkTesting: TCheckBox;
+begin
+       if not (WizardSilent or (InstallMode = imRebootContinue)) then
+               WizardForm.NextButton.Enabled := False;
+
+       chkTesting := TCheckBox.Create(WizardForm.WelcomePage);
+       with chkTesting do
+       begin
+               Parent := WizardForm.WelcomePage;
+               Caption := CustomMessage('TestingCheckBox');
+
+               Left := WizardForm.WelcomeLabel2.Left;
+               Width := WizardForm.WelcomeLabel2.Width;
+               Height := ScaleY(32);
+               Top := WizardForm.WelcomePage.ClientHeight - Height - ScaleY(8);
+
+               OnClick := @chkTesting_onClick;
+       end;
+
+       lblTesting := TNewStaticText.Create(WizardForm.WelcomePage);
+       with lblTesting do
+       begin
+               Parent := WizardForm.WelcomePage;
+               Left := WizardForm.WelcomeLabel2.Left;
+               Font.Color := $ff; //red
+               AutoSize := True;
+               WordWrap := True;
+               Width := WizardForm.WelcomeLabel2.Width;
+
+               Caption := CustomMessage('TestingWarning');
+               
+               Top := chkTesting.Top - Height - ScaleY(8);
+       end;
+end;
+#endif //(Defined(DEVEL) && DEVEL != "")
+
+
+procedure UpdateWizardImages();
+var NewBitmap1,NewBitmap2: TFileStream;
+begin
+       WelcomeBitmapBottom := TBitmapImage.Create(WizardForm);
+       with WelcomeBitmapBottom do
+       begin 
+               Left := 0;
+               Top := 0;
+               Parent := WizardForm;
+               Width := WizardForm.ClientWidth;
+               Height := WizardForm.ClientHeight;
+               Stretch := True;
+       end;
+
+       DebugMsg('UpdateWizardImages','Height: ' + IntToStr(WizardForm.WizardBitmapImage.Height));
+       
+       if WizardForm.WizardBitmapImage.Height < 386 then //use smaller image when not using Large Fonts
+       begin
+               try
+                       NewBitmap1 := 
TFileStream.Create(ExpandConstant('{tmp}\installsplash_small.bmp'),fmOpenRead);
+                       WizardForm.WizardBitmapImage.Bitmap.LoadFromStream(NewBitmap1);
+                       WelcomeBitmapBottom.Bitmap := WizardForm.WizardBitmapImage.Bitmap;
+                       try
+                               NewBitmap2 := 
TFileStream.Create(ExpandConstant('{tmp}\windows-installer-intro-small.bmp'),fmOpenRead);
+                               WizardForm.WizardBitmapImage2.Bitmap.LoadFromStream(NewBitmap2);
+                       except
+                               DebugMsg('UpdateWizardImages','Error loading image: ' + GetExceptionMessage);
+                       finally
+                               if NewBitmap2 <> nil then
+                                       NewBitmap2.Free;
+                       end;
+               except
+                       DebugMsg('UpdateWizardImages','Error loading image: ' + GetExceptionMessage);
+               finally
+                       if NewBitmap1 <> nil then
+                               NewBitmap1.Free;
+               end;
+       end
+       else
+       begin
+               try
+                       NewBitmap1 := 
TFileStream.Create(ExpandConstant('{tmp}\installsplash.bmp'),fmOpenRead);
+                       WizardForm.WizardBitmapImage.Bitmap.LoadFromStream(NewBitmap1);
+                       WelcomeBitmapBottom.Bitmap := WizardForm.WizardBitmapImage.Bitmap;
+               except
+                       DebugMsg('UpdateWizardImages','Error loading image: ' + GetExceptionMessage);
+               finally
+                       if NewBitmap1 <> nil then
+                               NewBitmap1.Free;
+               end;
+       end;
+       WizardForm.WizardBitmapImage.Width := WizardForm.ClientWidth;
+       WizardForm.WizardBitmapImage.Height := WizardForm.ClientHeight;
+end;
+
+
+procedure DoUninstall(const UninstStr, InstallDir: String; const pInfoLabel: TNewStaticText; var oResult: 
TRemoveOldGIMPResult);
+var InResult: TRemoveOldGIMPResult;
+       ResultCode, i: Integer;
+begin
+       InResult := oResult;
+       InstallDir := '';
+
+       DebugMsg('DoUninstall','Uninstall string: ' + UninstStr);
+
+       //when installing to same directory, assume that restart is required by default ...
+       if LowerCase(RemoveBackslashUnlessRoot(InstallDir)) = 
LowerCase(RemoveBackslashUnlessRoot(ExpandConstant('{app}'))) then
+               oResult := rogRestartRequired
+       else
+               oResult := rogContinue;
+
+       pInfoLabel.Caption := InstallDir;
+
+       if not Exec('>',UninstStr,'',SW_SHOW,ewWaitUntilTerminated,ResultCode) then
+       begin
+               DebugMsg('DoUninstall','Exec failed: ' + IntToStr(ResultCode));
+               oResult := rogUninstallFailed;
+               exit;
+       end;
+
+       DebugMsg('DoUninstall','Exec succeeded, uninstaller result: ' + IntToStr(ResultCode));
+
+       //... unless the complete installation directory was removed on uninstall
+       i := 0;
+       while i < (UNINSTALL_MAX_WAIT_TIME / UNINSTALL_CHECK_TIME) do
+       begin
+               DebugMsg('DoUninstall','Waiting for ' + ExpandConstant('{app}') + ' to disappear [' + 
IntToStr(i) + ']');
+               if not DirExists(ExpandConstant('{app}')) then
+               begin
+                       DebugMsg('DoUninstall','Existing GIMP directory removed, restoring previous restart 
requirement');
+                       oResult := InResult; //restore previous result
+                       break;
+               end;
+               Sleep(UNINSTALL_CHECK_TIME); //it may take a few seconds for the uninstaller to remove the 
directory after it's exited
+               Inc(i);
+       end;
+end;
+
+
+function RemoveOldGIMPVersions(): TRemoveOldGIMPResult;
+var lblInfo1,lblInfo2: TNewStaticText;
+       RootKey: Integer;
+       OldPath, UninstallString, WhichStr: String;
+begin
+       Result := rogContinue;
+
+       lblInfo1 := TNewStaticText.Create(WizardForm.PreparingPage);
+       with lblInfo1 do
+       begin
+               Parent := WizardForm.PreparingPage;
+               Left := 0;
+               Top := 0;
+               AutoSize := True;
+               WordWrap := True;
+               Width := WizardForm.PreparingPage.ClientWidth;
+
+               Caption := CustomMessage('RemovingOldVersion');
+       end;
+       lblInfo2 := TNewStaticText.Create(WizardForm.PreparingPage);
+       with lblInfo2 do
+       begin
+               Parent := WizardForm.PreparingPage;
+               Left := 0;
+               AutoSize := True;
+               WordWrap := True;
+               Width := WizardForm.PreparingPage.ClientWidth;
+               Top := lblInfo1.Height + ScaleY(8);
+       end;
+
+       if ExpandConstant('{param:debugresume|0}') = '1' then
+               Result := rogRestartRequired; //for testing
+
+       (*if DirExists(ExpandConstant('{app}')) then
+       begin
+               DebugMsg('RemoveOldGIMPVersions',ExpandConstant('{app}') + ' exists, checking if old GIMP 
version is in it');*)
+
+               if Is64BitInstallMode() then
+                       RootKey := HKLM32
+               else
+                       RootKey := HKLM;
+
+               if 
RegValueExists(RootKey,'Software\Microsoft\Windows\CurrentVersion\Uninstall\WinGimp-2.0_is1',
+                                 'Inno Setup: App Path') then
+               begin
+                       if 
RegQueryStringValue(RootKey,'Software\Microsoft\Windows\CurrentVersion\Uninstall\WinGimp-2.0_is1',
+                                              'Inno Setup: App Path',OldPath) then
+                       begin
+                               (*if LowerCase(RemoveBackslashUnlessRoot(OldPath)) = 
LowerCase(RemoveBackslashUnlessRoot(ExpandConstant('{app}'))) then
+                               begin //directory contains previous version of GIMP, run it's uninstaller*)
+                                       DebugMsg('RemoveOldGIMPVersions','Found legacy GIMP install, 
removing');
+
+                                       if 
RegValueExists(RootKey,'Software\Microsoft\Windows\CurrentVersion\Uninstall\WinGimp-2.0_is1',
+                                                         'QuietUninstallString') then
+                                               WhichStr := 'QuietUninstallString'
+                                       else if 
RegValueExists(RootKey,'Software\Microsoft\Windows\CurrentVersion\Uninstall\WinGimp-2.0_is1',
+                                                              'UninstallString') then
+                                               WhichStr := 'UninstallString'
+                                       else
+                                       begin
+                                               Result := rogCantUninstall;
+                                               exit;
+                                       end;
+
+                                       if not 
RegQueryStringValue(RootKey,'Software\Microsoft\Windows\CurrentVersion\Uninstall\WinGimp-2.0_is1',
+                                                                  WhichStr,UninstallString) then
+                                       begin
+                                               Result := rogCantUninstall;
+                                               exit;
+                                       end;
+
+                                       if WhichStr = 'UninstallString' then
+                                               UninstallString := UninstallString + ' /SILENT';
+
+                                       UninstallString := UninstallString + ' /NORESTART';
+
+                                       DoUninstall(UninstallString, OldPath, lblInfo2, Result);
+                                       
+                               //end;
+                       end;
+                       
+                       
+               end;
+
+       //end;
+
+       lblInfo1.Free;
+       lblInfo2.Free;
+end;
+
+
+procedure InfoBeforeLikeLicense();
+begin
+       WizardForm.InfoBeforeClickLabel.Visible := False;
+       WizardForm.InfoBeforeMemo.Height := WizardForm.InfoBeforeMemo.Height + WizardForm.InfoBeforeMemo.Top 
- WizardForm.InfoBeforeClickLabel.Top;
+       WizardForm.InfoBeforeMemo.Top := WizardForm.InfoBeforeClickLabel.Top;
+end;
+
+
+procedure PrepareWelcomePage();
+begin
+       if not WizardSilent then
+       begin
+               WizardForm.NextButton.Visible := False;
+
+               btnInstall.Visible := True;
+               btnInstall.TabOrder := 1;
+               btnCustomize.Visible := True;
+
+               WizardForm.Bevel.Visible := False;
+               WizardForm.WelcomeLabel1.Visible := False;
+               WizardForm.WelcomeLabel2.Visible := False;
+
+               WelcomeBitmapBottom.Visible := True;
+       end;
+end;
+
+
+procedure CurPageChanged(pCurPageID: Integer); 
+begin
+       DebugMsg('CurPageChanged','ID: '+IntToStr(pCurPageID));
+       case pCurPageID of
+#if 0 && (Defined(DEVEL) && DEVEL != "")
+               wpWelcome:
+                       WarnTestingVersion();
+#endif
+               wpWelcome:
+                       PrepareWelcomePage();
+               wpInfoBefore:
+                       InfoBeforeLikeLicense();
+               wpSelectComponents:
+                       SelectComponentsFaceLift();
+               wpReady:
+                       ReadyFaceLift();
+               wpInstalling:
+                       InstallingFaceLift();
+       end;
+end;
+
+
+function ShouldSkipPage(pPageID: Integer): Boolean;
+begin
+       DebugMsg('ShouldSkipPage','ID: '+IntToStr(pPageID));
+
+       Result := ((InstallMode = imSimple) or (InstallMode = imRebootContinue)) and (pPageID <> wpFinished);
+                                                                      //skip all pages except for the 
finished one if using simple
+                                                                      //install mode
+       (*case pPageID of
+       pgSimple.ID:
+               Result := InstallMode <> imNone; //only display the Install/Customize page once
+       end;*)
+
+       if Result then
+               DebugMsg('ShouldSkipPage','Yes')
+       else
+               DebugMsg('ShouldSkipPage','No');
+
+end;
+
+
+procedure CurStepChanged(pCurStep: TSetupStep);
+begin
+       case pCurStep of
+               ssPostInstall:
+               begin
+                       Associations_Create();
+                       PreparePyGimp();
+                       PrepareGimpPath();
+                       //PrepareGimpRC();
+               end;
+       end;
+end;
+
+
+function PrepareToInstall(var pNeedsRestart: Boolean): String;
+var    ChecksumBefore, ChecksumAfter: String;
+       RemoveResult: TRemoveOldGIMPResult;
+begin
+
+       ChecksumBefore := MakePendingFileRenameOperationsChecksum;
+
+       RemoveResult := RemoveOldGIMPVersions;
+
+       if RemoveResult = rogRestartRequired then //old version was uninstalled, but something was left 
behind, so to be safe a reboot
+       begin                                     //is enforced - this can only happen when reusing install 
directory
+
+               DebugMsg('PrepareToInstall','RemoveOldGIMPVersions requires restart');
+
+               ChecksumAfter := MakePendingFileRenameOperationsChecksum;
+               if (ChecksumBefore <> ChecksumAfter) or (ExpandConstant('{param:debugresume|0}') = '1') then
+               begin //this check is most likely redundant, since the uninstaller will be added to pending 
rename operations
+                       CreateRunOnceEntry;
+                       pNeedsRestart := True;
+                       Result := CustomMessage('RebootRequiredFirst');
+               end;
+       end else
+       if RemoveResult = rogContinue then
+       begin
+               DebugMsg('PrepareToInstall','RemoveOldGIMPVersions finished successfully');
+               Result := ''; //old version was uninstalled successfully, nothing was left behind, so install 
can continue immediately
+       end else
+       if RemoveResult = rogUninstallFailed then
+       begin
+               DebugMsg('PrepareToInstall','RemoveOldGIMPVersions failed to uninstall old GIMP version');
+               Result := 
FmtMessage(CustomMessage('RemovingOldVersionFailed'),['{#VERSION}',ExpandConstant('{app}')]);
+       end else
+       if RemoveResult = rogCantUninstall then
+       begin
+               DebugMsg('PrepareToInstall','RemoveOldGIMPVersions failed to uninstall old GIMP version [1]');
+               Result := 
FmtMessage(CustomMessage('RemovingOldVersionCantUninstall'),['{#VERSION}',ExpandConstant('{app}')]);
+       end else
+       begin
+               DebugMsg('PrepareToInstall','Internal error 11');
+               Result := FmtMessage(CustomMessage('InternalError'),['11']); //should never happen
+       end;
+
+end;
+
+
+procedure InitializeWizard();
+begin
+       UpdateWizardImages();
+       InitCustomPages();
+end;
+
+
+function BPPTooLowWarning(): Boolean;
+var hDC, bpp, pl: Integer;
+       Message,Buttons: TArrayOfString;
+begin
+       hDC := GetDC(0);
+       pl := GetDeviceCaps(hDC, PLANES);
+       bpp := GetDeviceCaps(hDC, BITSPIXEL);
+       ReleaseDC(0,hDC);
+
+       bpp := pl * bpp;
+
+       if bpp < 32 then
+       begin
+               SetArrayLength(Message,1);
+               SetArrayLength(Buttons,2);
+               Message[0] := CustomMessage('Require32BPP');
+               Buttons[0] := CustomMessage('Require32BPPContinue');
+               Buttons[1] := CustomMessage('Require32BPPExit');                
+               if (not WizardSilent) and 
+                  (MessageWithURL(Message, CustomMessage('Require32BPPTitle'), Buttons, mbError, 2, 2) = 2) 
then
+                       Result := False
+               else
+                       Result := True;
+       end
+       else
+               Result := True; 
+end;
+
+
+procedure Check32bitOverride;
+var i: Integer;
+       old: String;
+begin
+       Force32bitInstall := False;
+
+       old := LowerCase(GetPreviousData('32bitMode',''));
+
+       if old = 'true' then //ignore command line if previous install is already present
+               Force32bitInstall := True
+       else if old = 'false' then
+               Force32bitInstall := False
+       else
+               for i := 0 to ParamCount do //not a bug (in script anyway) - ParamCount returns the index of 
last ParamStr element, not the actual count
+                       if ParamStr(i) = '/32' then
+                       begin
+                               Force32bitInstall := True;
+                               break;
+                       end;
+
+       DebugMsg('Check32bitOverride',BoolToStr(Force32bitInstall) + '[' + old + ']');
+end;
+
+
+function InitializeSetup(): Boolean;
+#if (Defined(DEVEL) && DEVEL != "") || Defined(DEVEL_WARNING)
+var Message,Buttons: TArrayOfString;
+#endif
+begin
+       ConfigOverride := coUndefined;
+
+       if not IsProcessorFeaturePresent(PF_XMMI_INSTRUCTIONS_AVAILABLE) then
+       begin
+               SuppressibleMsgBox(CustomMessage('SSERequired'), mbCriticalError, MB_OK, 0);
+               Result := false;
+               exit;
+       end;
+
+       Check32bitOverride;
+
+       Result := RestartSetupAfterReboot(); //resume install after reboot - skip all setting pages, and 
install directly
+
+       if Result then
+               Result := BPPTooLowWarning();           
+
+       if not Result then //no need to do anything else
+               exit;
+
+#if (Defined(DEVEL) && DEVEL != "") || Defined(DEVEL_WARNING)
+       Explode(Message, CustomMessage('DevelopmentWarning'), #13#10);
+       SetArrayLength(Buttons,2);
+       Buttons[0] := CustomMessage('DevelopmentButtonContinue');
+       Buttons[1] := CustomMessage('DevelopmentButtonExit');
+       if (not WizardSilent) and 
+          (MessageWithURL(Message, CustomMessage('DevelopmentWarningTitle'), Buttons, mbError, 2, 2) = 2) 
then
+       begin
+               Result := False;
+               Exit;
+       end;
+#endif
+
+       try
+               ExtractTemporaryFile('setup.ini');
+               SetupINI := ExpandConstant('{tmp}\setup.ini');
+               ExtractTemporaryFile('windows-installer-intro-small.bmp');
+               ExtractTemporaryFile('installsplash.bmp');
+               ExtractTemporaryFile('installsplash_small.bmp');
+       except
+               DebugMsg('InitializeSetup','Error extracting temporary file: ' + GetExceptionMessage);
+               MsgBox(CustomMessage('ErrorExtractingTemp') + #13#13 + GetExceptionMessage,mbError,MB_OK);
+               Result := False;
+               exit;
+       end;
+
+       Associations_Init();
+
+       //if InstallMode <> imRebootContinue then
+       //      SuppressibleMsgBox(CustomMessage('UninstallWarning'),mbError,MB_OK,IDOK);
+
+end;
+
+
+procedure RegisterPreviousData(PreviousDataKey: Integer);
+begin
+       if Is64BitInstallMode() then
+               SetPreviousData(PreviousDataKey,'32BitMode',BoolToStr(Force32bitInstall));
+end;
+
+
+procedure SaveToUninstInf(const pText: AnsiString);
+var sUnInf: String;
+       sOldContent: String;
+begin
+       sUnInf := ExpandConstant('{app}\uninst\uninst.inf');
+
+       if not FileExists(sUnInf) then //save small header
+               SaveStringToUTF8File(sUnInf,#$feff+'#Additional uninstall tasks'#13#10+ //#$feff BOM is 
required for LoadStringsFromFile
+                                           '#This file uses UTF-8 encoding'#13#10+
+                                           '#'#13#10+
+                                           '#Empty lines and lines beginning with # are ignored'#13#10+
+                                           '#'#13#10+
+                                           '#Add uninstallers for GIMP add-ons that should be removed 
together with GIMP like this:'#13#10+
+                                           '#Run:<description>/<full path to uninstaller>/<parameters for 
automatic uninstall>'#13#10+
+                                           '#'#13#10+
+                                           '#The file is parsed in reverse order' + #13#10 +
+                                           '' + #13#10 //needs '' in front, otherwise preprocessor complains
+                                           ,False)
+       else
+       begin
+               LoadStringFromUTF8File(sUnInf,sOldContent);
+               if Pos(#13#10+pText+#13#10,sOldContent) > 0 then //don't write duplicate lines
+                       exit;
+       end;
+
+       SaveStringToUTF8File(sUnInf,pText+#13#10,True);
+end;
+
+#include "rebootcontinue.isi"
+
+#include "uninst.isi"
+
+#expr SaveToFile(AddBackslash(SourcePath) + "Preprocessed.iss")
+
diff --git a/build/windows/installer/gpl+python.rtf b/build/windows/installer/gpl+python.rtf
new file mode 100644
index 0000000..44cfb6c
--- /dev/null
+++ b/build/windows/installer/gpl+python.rtf
@@ -0,0 +1,179 @@
+{\rtf1\ansi\ansicpg1250\deff0\deflang1060\deflangfe1060{\fonttbl{\f0\fswiss\fprq2\fcharset238 
Verdana;}{\f1\fmodern\fprq1\fcharset238 Lucida Console;}}
+{\colortbl ;\red0\green0\blue255;}
+\viewkind4\uc1\pard\keepn\nowidctlpar\sb100\sa200\qc\b\f0\fs28 GNU GENERAL PUBLIC LICENSE\par
+\pard\nowidctlpar\sa60\qc\b0\fs16 Version 3, 29 June 2007\par
+\pard\sa60 Copyright \'a9 2007 Free Software Foundation, Inc. <{\field{\*\fldinst{HYPERLINK 
"http://fsf.org/"}}{\fldrslt{\ul\cf1 http://fsf.org/}}}\f0\fs16 >\par
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is 
not allowed.\par
+\pard\keepn\nowidctlpar\sb100\sa100\qc\b\fs20 Preamble\par
+\pard\nowidctlpar\sa60\b0\fs16 The GNU General Public License is a free, copyleft license for software and 
other kinds of works.\par
+The licenses for most software and other practical works are designed to take away your freedom to share and 
change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share 
and change all versions of a program--to make sure it remains free software for all its users. We, the Free 
Software Foundation, use the GNU General Public License for most of our software; it applies also to any 
other work released this way by its authors. You can apply it to your programs, too.\par
+When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are 
designed to make sure that you have the freedom to distribute copies of free software (and charge for them if 
you wish), that you receive source code or can get it if you want it, that you can change the software or use 
pieces of it in new free programs, and that you know you can do these things.\par
+To protect your rights, we need to prevent others from denying you these rights or asking you to surrender 
the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you 
modify it: responsibilities to respect the freedom of others.\par
+For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to 
the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the 
source code. And you must show them these terms so they know their rights.\par
+Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, 
and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.\par
+For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this 
free software. For both users' and authors' sake, the GPL requires that modified versions be marked as 
changed, so that their problems will not be attributed erroneously to authors of previous versions.\par
+Some devices are designed to deny users access to install or run modified versions of the software inside 
them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting 
users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products 
for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this 
version of the GPL to prohibit the practice for those products. If such problems arise substantially in other 
domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to 
protect the freedom of users.\par
+Finally, every program is threatened constantly by software patents. States should not allow patents to 
restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid 
the special danger that patents applied to a free program could make it effectively proprietary. To prevent 
this, the GPL assures that patents cannot be used to render the program non-free.\par
+The precise terms and conditions for copying, distribution and modification follow.\par
+\pard\keepn\nowidctlpar\sb100\sa100\qc\b\fs20 TERMS AND CONDITIONS\par
+\pard\keepn\nowidctlpar\sb100\sa100\fs16 0. Definitions.\par
+\pard\nowidctlpar\sa60\b0\ldblquote This License\rdblquote  refers to version 3 of the GNU General Public 
License.\par
+\ldblquote Copyright\rdblquote  also means copyright-like laws that apply to other kinds of works, such as 
semiconductor masks.\par
+\ldblquote The Program\rdblquote  refers to any copyrightable work licensed under this License. Each 
licensee is addressed as \ldblquote you\rdblquote . \ldblquote Licensees\rdblquote  and\ldblquote 
recipients\rdblquote  may be individuals or organizations.\par
+To \ldblquote modify\rdblquote  a work means to copy from or adapt all or part of the work in a fashion 
requiring copyright permission, other than the making of an exact copy. The resulting work is called a 
\ldblquote modified version\rdblquote  of the earlier work or a work \ldblquote based on\rdblquote  the 
earlier work.\par
+A \ldblquote covered work\rdblquote  means either the unmodified Program or a work based on the Program.\par
+To \ldblquote propagate\rdblquote  a work means to do anything with it that, without permission, would make 
you directly or secondarily liable for infringement under applicable copyright law, except executing it on a 
computer or modifying a private copy. Propagation includes copying, distribution (with or without 
modification), making available to the public, and in some countries other activities as well.\par
+To \ldblquote convey\rdblquote  a work means any kind of propagation that enables other parties to make or 
receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not 
conveying.\par
+An interactive user interface displays \ldblquote Appropriate Legal Notices\rdblquote to the extent that it 
includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and 
(2) tells the user that there is no warranty for the work (except to the extent that warranties are 
provided), that licensees may convey the work under this License, and how to view a copy of this License. If 
the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets 
this criterion.\par
+\pard\keepn\nowidctlpar\sb100\sa100\b 1. Source Code.\par
+\pard\nowidctlpar\sa60\b0 The \ldblquote source code\rdblquote  for a work means the preferred form of the 
work for making modifications to it. \ldblquote Object code\rdblquote  means any non-source form of a 
work.\par
+A \ldblquote Standard Interface\rdblquote  means an interface that either is an official standard defined by 
a recognized standards body, or, in the case of interfaces specified for a particular programming language, 
one that is widely used among developers working in that language.\par
+The \ldblquote System Libraries\rdblquote  of an executable work include anything, other than the work as a 
whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that 
Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a 
Standard Interface for which an implementation is available to the public in source code form. A\ldblquote 
Major Component\rdblquote , in this context, means a major essential component (kernel, window system, and so 
on) of the specific operating system (if any) on which the executable work runs, or a compiler used to 
produce the work, or an object code interpreter used to run it.\par
+The \ldblquote Corresponding Source\rdblquote  for a work in object code form means all the source code 
needed to generate, install, and (for an executable work) run the object code and to modify the work, 
including scripts to control those activities. However, it does not include the work's System Libraries, or 
general-purpose tools or generally available free programs which are used unmodified in performing those 
activities but which are not part of the work. For example, Corresponding Source includes interface 
definition files associated with source files for the work, and the source code for shared libraries and 
dynamically linked subprograms that the work is specifically designed to require, such as by intimate data 
communication or control flow between those subprograms and other parts of the work.\par
+The Corresponding Source need not include anything that users can regenerate automatically from other parts 
of the Corresponding Source.\par
+The Corresponding Source for a work in source code form is that same work.\par
+\pard\keepn\nowidctlpar\sb100\sa100\b 2. Basic Permissions.\par
+\pard\nowidctlpar\sa60\b0 All rights granted under this License are granted for the term of copyright on the 
Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your 
unlimited permission to run the unmodified Program. The output from running a covered work is covered by this 
License only if the output, given its content, constitutes a covered work. This License acknowledges your 
rights of fair use or other equivalent, as provided by copyright law.\par
+You may make, run and propagate covered works that you do not convey, without conditions so long as your 
license otherwise remains in force. You may convey covered works to others for the sole purpose of having 
them make modifications exclusively for you, or provide you with facilities for running those works, provided 
that you comply with the terms of this License in conveying all material for which you do not control 
copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, 
under your direction and control, on terms that prohibit them from making any copies of your copyrighted 
material outside their relationship with you.\par
+Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing 
is not allowed; section 10 makes it unnecessary.\par
+\pard\keepn\nowidctlpar\sb100\sa100\b 3. Protecting Users' Legal Rights From Anti-Circumvention Law.\par
+\pard\nowidctlpar\sa60\b0 No covered work shall be deemed part of an effective technological measure under 
any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 
December 1996, or similar laws prohibiting or restricting circumvention of such measures.\par
+When you convey a covered work, you waive any legal power to forbid circumvention of technological measures 
to the extent such circumvention is effected by exercising rights under this License with respect to the 
covered work, and you disclaim any intention to limit operation or modification of the work as a means of 
enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of 
technological measures.\par
+\pard\keepn\nowidctlpar\sb100\sa100\b 4. Conveying Verbatim Copies.\par
+\pard\nowidctlpar\sa60\b0 You may convey verbatim copies of the Program's source code as you receive it, in 
any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright 
notice; keep intact all notices stating that this License and any non-permissive terms added in accord with 
section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients 
a copy of this License along with the Program.\par
+You may charge any price or no price for each copy that you convey, and you may offer support or warranty 
protection for a fee.\par
+\pard\keepn\nowidctlpar\sb100\sa100\b 5. Conveying Modified Source Versions.\par
+\pard\nowidctlpar\sa60\b0 You may convey a work based on the Program, or the modifications to produce it 
from the Program, in the form of source code under the terms of section 4, provided that you also meet all of 
these conditions:\par
+\pard\nowidctlpar\fi-360\li720\sa60 a)\tab The work must carry prominent notices stating that you modified 
it, and giving a relevant date. \par
+b)\tab The work must carry prominent notices stating that it is released under this License and any 
conditions added under section 7. This requirement modifies the requirement in section 4 to \ldblquote keep 
intact all notices\rdblquote . \par
+c)\tab You must license the entire work, as a whole, under this License to anyone who comes into possession 
of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the 
whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission 
to license the work in any other way, but it does not invalidate such permission if you have separately 
received it. \par
+d)\tab If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if 
the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make 
them do so.\par
+\pard\nowidctlpar\sa60 A compilation of a covered work with other separate and independent works, which are 
not by their nature extensions of the covered work, and which are not combined with it such as to form a 
larger program, in or on a volume of a storage or distribution medium, is called an\ldblquote 
aggregate\rdblquote  if the compilation and its resulting copyright are not used to limit the access or legal 
rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an 
aggregate does not cause this License to apply to the other parts of the aggregate.\par
+\pard\keepn\nowidctlpar\sb100\sa100\b 6. Conveying Non-Source Forms.\par
+\pard\nowidctlpar\sa60\b0 You may convey a covered work in object code form under the terms of sections 4 
and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this 
License, in one of these ways:\par
+\pard\nowidctlpar\fi-360\li720\sa60 a)\tab Convey the object code in, or embodied in, a physical product 
(including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable 
physical medium customarily used for software interchange. \par
+b)\tab Convey the object code in, or embodied in, a physical product (including a physical distribution 
medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer 
spare parts or customer support for that product model, to give anyone who possesses the object code either 
(1) a copy of the Corresponding Source for all the software in the product that is covered by this License, 
on a durable physical medium customarily used for software interchange, for a price no more than your 
reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding 
Source from a network server at no charge. \par
+c)\tab Convey individual copies of the object code with a copy of the written offer to provide the 
Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you 
received the object code with such an offer, in accord with subsection 6b. \par
+d)\tab Convey the object code by offering access from a designated place (gratis or for a charge), and offer 
equivalent access to the Corresponding Source in the same way through the same place at no further charge. 
You need not require recipients to copy the Corresponding Source along with the object code. If the place to 
copy the object code is a network server, the Corresponding Source may be on a different server (operated by 
you or a third party) that supports equivalent copying facilities, provided you maintain clear directions 
next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the 
Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy 
these requirements. \par
+e)\tab Convey the object code using peer-to-peer transmission, provided you inform other peers where the 
object code and Corresponding Source of the work are being offered to the general public at no charge under 
subsection 6d.\par
+\pard\nowidctlpar\sa60 A separable portion of the object code, whose source code is excluded from the 
Corresponding Source as a System Library, need not be included in conveying the object code work.\par
+A \ldblquote User Product\rdblquote  is either (1) a \ldblquote consumer product\rdblquote , which means any 
tangible personal property which is normally used for personal, family, or household purposes, or (2) 
anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer 
product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a 
particular user, \ldblquote normally used\rdblquote  refers to a typical or common use of that class of 
product, regardless of the status of the particular user or of the way in which the particular user actually 
uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether 
the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only 
significant mode of use of the product.\par
+\ldblquote Installation Information\rdblquote  for a User Product means any methods, procedures, 
authorization keys, or other information required to install and execute modified versions of a covered work 
in that User Product from a modified version of its Corresponding Source. The information must suffice to 
ensure that the continued functioning of the modified object code is in no case prevented or interfered with 
solely because modification has been made.\par
+If you convey an object code work under this section in, or with, or specifically for use in, a User 
Product, and the conveying occurs as part of a transaction in which the right of possession and use of the 
User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the 
transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by 
the Installation Information. But this requirement does not apply if neither you nor any third party retains 
the ability to install modified object code on the User Product (for example, the work has been installed in 
ROM).\par
+The requirement to provide Installation Information does not include a requirement to continue to provide 
support service, warranty, or updates for a work that has been modified or installed by the recipient, or for 
the User Product in which it has been modified or installed. Access to a network may be denied when the 
modification itself materially and adversely affects the operation of the network or violates the rules and 
protocols for communication across the network.\par
+Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in 
a format that is publicly documented (and with an implementation available to the public in source code 
form), and must require no special password or key for unpacking, reading or copying.\par
+\pard\keepn\nowidctlpar\sb100\sa100\b 7. Additional Terms.\par
+\pard\nowidctlpar\sa60\b0\ldblquote Additional permissions\rdblquote  are terms that supplement the terms of 
this License by making exceptions from one or more of its conditions. Additional permissions that are 
applicable to the entire Program shall be treated as though they were included in this License, to the extent 
that they are valid under applicable law. If additional permissions apply only to part of the Program, that 
part may be used separately under those permissions, but the entire Program remains governed by this License 
without regard to the additional permissions.\par
+When you convey a copy of a covered work, you may at your option remove any additional permissions from that 
copy, or from any part of it. (Additional permissions may be written to require their own removal in certain 
cases when you modify the work.) You may place additional permissions on material, added by you to a covered 
work, for which you have or can give appropriate copyright permission.\par
+Notwithstanding any other provision of this License, for material you add to a covered work, you may (if 
authorized by the copyright holders of that material) supplement the terms of this License with terms:\par
+\pard\nowidctlpar\fi-360\li720\sa60 a)\tab Disclaiming warranty or limiting liability differently from the 
terms of sections 15 and 16 of this License; or \par
+b)\tab Requiring preservation of specified reasonable legal notices or author attributions in that material 
or in the Appropriate Legal Notices displayed by works containing it; or \par
+c)\tab Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of 
such material be marked in reasonable ways as different from the original version; or \par
+d)\tab Limiting the use for publicity purposes of names of licensors or authors of the material; or \par
+e)\tab Declining to grant rights under trademark law for use of some trade names, trademarks, or service 
marks; or \par
+f)\tab Requiring indemnification of licensors and authors of that material by anyone who conveys the 
material (or modified versions of it) with contractual assumptions of liability to the recipient, for any 
liability that these contractual assumptions directly impose on those licensors and authors. \par
+\pard\nowidctlpar\sa60 All other non-permissive additional terms are considered \ldblquote further 
restrictions\rdblquote  within the meaning of section 10. If the Program as you received it, or any part of 
it, contains a notice stating that it is governed by this License along with a term that is a further 
restriction, you may remove that term. If a license document contains a further restriction but permits 
relicensing or conveying under this License, you may add to a covered work material governed by the terms of 
that license document, provided that the further restriction does not survive such relicensing or 
conveying.\par
+If you add terms to a covered work in accord with this section, you must place, in the relevant source 
files, a statement of the additional terms that apply to those files, or a notice indicating where to find 
the applicable terms.\par
+Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, 
or stated as exceptions; the above requirements apply either way.\par
+\pard\keepn\nowidctlpar\sb100\sa100\b 8. Termination.\par
+\pard\nowidctlpar\sa60\b0 You may not propagate or modify a covered work except as expressly provided under 
this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your 
rights under this License (including any patent licenses granted under the third paragraph of section 11).\par
+However, if you cease all violation of this License, then your license from a particular copyright holder is 
reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your 
license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable 
means prior to 60 days after the cessation.\par
+Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder 
notifies you of the violation by some reasonable means, this is the first time you have received notice of 
violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 
days after your receipt of the notice.\par
+Termination of your rights under this section does not terminate the licenses of parties who have received 
copies or rights from you under this License. If your rights have been terminated and not permanently 
reinstated, you do not qualify to receive new licenses for the same material under section 10.\par
+\pard\keepn\nowidctlpar\sb100\sa100\b 9. Acceptance Not Required for Having Copies.\par
+\pard\nowidctlpar\sa60\b0 You are not required to accept this License in order to receive or run a copy of 
the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer 
transmission to receive a copy likewise does not require acceptance. However, nothing other than this License 
grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not 
accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of 
this License to do so.\par
+\pard\keepn\nowidctlpar\sb100\sa100\b 10. Automatic Licensing of Downstream Recipients.\par
+\pard\nowidctlpar\sa60\b0 Each time you convey a covered work, the recipient automatically receives a 
license from the original licensors, to run, modify and propagate that work, subject to this License. You are 
not responsible for enforcing compliance by third parties with this License.\par
+An \ldblquote entity transaction\rdblquote  is a transaction transferring control of an organization, or 
substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of 
a covered work results from an entity transaction, each party to that transaction who receives a copy of the 
work also receives whatever licenses to the work the party's predecessor in interest had or could give under 
the previous paragraph, plus a right to possession of the Corresponding Source of the work from the 
predecessor in interest, if the predecessor has it or can get it with reasonable efforts.\par
+You may not impose any further restrictions on the exercise of the rights granted or affirmed under this 
License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights 
granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a 
lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or 
importing the Program or any portion of it.\par
+\pard\keepn\nowidctlpar\sb100\sa100\b 11. Patents.\par
+\pard\nowidctlpar\sa60\b0 A \ldblquote contributor\rdblquote  is a copyright holder who authorizes use under 
this License of the Program or a work on which the Program is based. The work thus licensed is called the 
contributor's \ldblquote contributor version\rdblquote .\par
+A contributor's \ldblquote essential patent claims\rdblquote  are all patent claims owned or controlled by 
the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, 
permitted by this License, of making, using, or selling its contributor version, but do not include claims 
that would be infringed only as a consequence of further modification of the contributor version. For 
purposes of this definition, \ldblquote control\rdblquote  includes the right to grant patent sublicenses in 
a manner consistent with the requirements of this License.\par
+Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's 
essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate 
the contents of its contributor version.\par
+In the following three paragraphs, a \ldblquote patent license\rdblquote  is any express agreement or 
commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent 
or covenant not to sue for patent infringement). To \ldblquote grant\rdblquote  such a patent license to a 
party means to make such an agreement or commitment not to enforce a patent against the party.\par
+If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the 
work is not available for anyone to copy, free of charge and under the terms of this License, through a 
publicly available network server or other readily accessible means, then you must either (1) cause the 
Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent 
license for this particular work, or (3) arrange, in a manner consistent with the requirements of this 
License, to extend the patent license to downstream recipients. \ldblquote Knowingly relying\rdblquote  means 
you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or 
your recipient's use of the covered work in a country, would infringe one or more identifiable patents in 
that country that you have reason to believe are valid.\par
+If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by 
procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the 
covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then 
the patent license you grant is automatically extended to all recipients of the covered work and works based 
on it.\par
+A patent license is \ldblquote discriminatory\rdblquote  if it does not include within the scope of its 
coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that 
are specifically granted under this License. You may not convey a covered work if you are a party to an 
arrangement with a third party that is in the business of distributing software, under which you make payment 
to the third party based on the extent of your activity of conveying the work, and under which the third 
party grants, to any of the parties who would receive the covered work from you, a discriminatory patent 
license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), 
or (b) primarily for and in connection with specific products or compilations that contain the covered work, 
unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.\par
+Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to 
infringement that may otherwise be available to you under applicable patent law.\par
+\pard\keepn\nowidctlpar\sb100\sa100\b 12. No Surrender of Others' Freedom.\par
+\pard\nowidctlpar\sa60\b0 If conditions are imposed on you (whether by court order, agreement or otherwise) 
that contradict the conditions of this License, they do not excuse you from the conditions of this License. 
If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and 
any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you 
agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the 
Program, the only way you could satisfy both those terms and this License would be to refrain entirely from 
conveying the Program.\par
+\pard\keepn\nowidctlpar\sb100\sa100\b 13. Use with the GNU Affero General Public License.\par
+\pard\nowidctlpar\sa60\b0 Notwithstanding any other provision of this License, you have permission to link 
or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License 
into a single combined work, and to convey the resulting work. The terms of this License will continue to 
apply to the part which is the covered work, but the special requirements of the GNU Affero General Public 
License, section 13, concerning interaction through a network will apply to the combination as such.\par
+\pard\keepn\nowidctlpar\sb100\sa100\b 14. Revised Versions of this License.\par
+\pard\nowidctlpar\sa60\b0 The Free Software Foundation may publish revised and/or new versions of the GNU 
General Public License from time to time. Such new versions will be similar in spirit to the present version, 
but may differ in detail to address new problems or concerns.\par
+Each version is given a distinguishing version number. If the Program specifies that a certain numbered 
version of the GNU General Public License \ldblquote or any later version\rdblquote  applies to it, you have 
the option of following the terms and conditions either of that numbered version or of any later version 
published by the Free Software Foundation. If the Program does not specify a version number of the GNU 
General Public License, you may choose any version ever published by the Free Software Foundation.\par
+If the Program specifies that a proxy can decide which future versions of the GNU General Public License can 
be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that 
version for the Program.\par
+Later license versions may give you additional or different permissions. However, no additional obligations 
are imposed on any author or copyright holder as a result of your choosing to follow a later version.\par
+\pard\keepn\nowidctlpar\sb100\sa100\b 15. Disclaimer of Warranty.\par
+\pard\nowidctlpar\sa60\b0 THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. 
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM 
\ldblquote AS IS\rdblquote  WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT 
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK 
AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME 
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\par
+\pard\keepn\nowidctlpar\sb100\sa100\b 16. Limitation of Liability.\par
+\pard\nowidctlpar\sa60\b0 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY 
COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO 
YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE 
OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE 
OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\par
+\pard\keepn\nowidctlpar\sb100\sa100\b 17. Interpretation of Sections 15 and 16.\par
+\pard\nowidctlpar\sa120\b0 If the disclaimer of warranty and limitation of liability provided above cannot 
be given local legal effect according to their terms, reviewing courts shall apply local law that most 
closely approximates an absolute waiver of all civil liability in connection with the Program, unless a 
warranty or assumption of liability accompanies a copy of the Program in return for a fee.\par
+\pard\nowidctlpar\sb120\sa120\qc END OF TERMS AND CONDITIONS\par
+\pard\keepn\nowidctlpar\sb100\sa100\qc\b\fs20 How to Apply These Terms to Your New Programs\fs16\par
+\pard\nowidctlpar\sa60\b0 If you develop a new program, and you want it to be of the greatest possible use 
to the public, the best way to achieve this is to make it free software which everyone can redistribute and 
change under these terms.\par
+To do so, attach the following notices to the program. It is safest to attach them to the start of each 
source file to most effectively state the exclusion of warranty; and each file should have at least the 
\ldblquote copyright\rdblquote  line and a pointer to where the full notice is found.\par
+\pard\nowidctlpar\li454\sb120\tx0\tx959\tx1918\tx2877\tx3836\tx4795\tx5754\tx6713\tx7672\tx8631\f1 <one line 
to give the program's name and a brief idea of what it does.>\par
+\pard\nowidctlpar\li454\sl480\slmult1\tx0\tx959\tx1918\tx2877\tx3836\tx4795\tx5754\tx6713\tx7672\tx8631 
Copyright (C) <year>  <name of author>\par
+\pard\nowidctlpar\li454\tx0\tx959\tx1918\tx2877\tx3836\tx4795\tx5754\tx6713\tx7672\tx8631 This program is 
free software: you can redistribute it and/or modify\par
+it under the terms of the GNU General Public License as published by\par
+the Free Software Foundation, either version 3 of the License, or\par
+\pard\nowidctlpar\li454\sl480\slmult1\tx0\tx959\tx1918\tx2877\tx3836\tx4795\tx5754\tx6713\tx7672\tx8631 (at 
your option) any later version.\par
+\pard\nowidctlpar\li454\tx0\tx959\tx1918\tx2877\tx3836\tx4795\tx5754\tx6713\tx7672\tx8631 This program is 
distributed in the hope that it will be useful,\par
+but WITHOUT ANY WARRANTY; without even the implied warranty of\par
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\par
+\pard\nowidctlpar\li454\sl480\slmult1\tx0\tx959\tx1918\tx2877\tx3836\tx4795\tx5754\tx6713\tx7672\tx8631 GNU 
General Public License for more details.\par
+\pard\nowidctlpar\li454\tx0\tx959\tx1918\tx2877\tx3836\tx4795\tx5754\tx6713\tx7672\tx8631 You should have 
received a copy of the GNU General Public License\par
+\pard\li454\sa120\sl240\slmult1 along with this program.  If not, see <{\field{\*\fldinst{HYPERLINK 
"http://www.gnu.org/licenses/"}}{\fldrslt{\ul\cf1 http://www.gnu.org/licenses/}}}\f1\fs16 >.\par
+\pard\nowidctlpar\sa60\f0 Also add information on how to contact you by electronic and paper mail.\par
+If the program does terminal interaction, make it output a short notice like this when it starts in an 
interactive mode:\par
+\pard\nowidctlpar\li454\sb120\tx0\tx959\tx1918\tx2877\tx3836\tx4795\tx5754\tx6713\tx7672\tx8631\f1 <program> 
 Copyright (C) <year>  <name of author>\par
+\pard\nowidctlpar\li454\tx0\tx959\tx1918\tx2877\tx3836\tx4795\tx5754\tx6713\tx7672\tx8631 This program comes 
with ABSOLUTELY NO WARRANTY; for details type `show w'.\par
+This is free software, and you are welcome to redistribute it\par
+\pard\nowidctlpar\li454\sa120\tx0\tx959\tx1918\tx2877\tx3836\tx4795\tx5754\tx6713\tx7672\tx8631 under 
certain conditions; type `show c' for details.\par
+\pard\nowidctlpar\sa60\f0 The hypothetical commands `show w' and `show c' should show the appropriate parts 
of the General Public License. Of course, your program's commands might be different; for a GUI interface, 
you would use an \ldblquote about box\rdblquote .\par
+\pard You should also get your employer (if you work as a programmer) or school, if any, to sign a 
\ldblquote copyright disclaimer\rdblquote  for the program, if necessary. For more information on this, and 
how to apply and follow the GNU GPL, see <{\field{\*\fldinst{HYPERLINK 
"http://www.gnu.org/licenses/"}}{\fldrslt{\ul\cf1 http://www.gnu.org/licenses/}}}\f0\fs16 >.\par
+\pard\sa200\sl240\slmult1 The GNU General Public License does not permit incorporating your program into 
proprietary programs. If your program is a subroutine library, you may consider it more useful to permit 
linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General 
Public License instead of this License. But first, please read <{\field{\*\fldinst{HYPERLINK 
"http://www.gnu.org/philosophy/why-not-lgpl.html"}}{\fldrslt{\ul\cf1 
http://www.gnu.org/philosophy/why-not-lgpl.html}}}\f0\fs16 >.\par
+\pard\nowidctlpar\qj\f1\fs12 PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2\par
+\pard\nowidctlpar\sa120\qj --------------------------------------------\par
+\pard\nowidctlpar\qj 1. This LICENSE AGREEMENT is between the Python Software Foundation\par
+("PSF"), and the Individual or Organization ("Licensee") accessing and\par
+otherwise using this software ("Python") in source or binary form and\par
+\pard\nowidctlpar\sa120\qj its associated documentation.\par
+\pard\nowidctlpar\qj 2. Subject to the terms and conditions of this License Agreement, PSF\par
+hereby grants Licensee a nonexclusive, royalty-free, world-wide\par
+license to reproduce, analyze, test, perform and/or display publicly,\par
+prepare derivative works, distribute, and otherwise use Python\par
+alone or in any derivative version, provided, however, that PSF's\par
+License Agreement and PSF's notice of copyright, i.e., "Copyright (c)\par
+2001, 2002, 2003, 2004, 2005, 2006 Python Software Foundation; All Rights\par
+Reserved" are retained in Python alone or in any derivative version \par
+\pard\nowidctlpar\sa120\qj prepared by Licensee.\par
+\pard\nowidctlpar\qj 3. In the event Licensee prepares a derivative work that is based on\par
+or incorporates Python or any part thereof, and wants to make\par
+the derivative work available to others as provided herein, then\par
+Licensee hereby agrees to include in any such work a brief summary of\par
+\pard\nowidctlpar\sa120\qj the changes made to Python.\par
+\pard\nowidctlpar\qj 4. PSF is making Python available to Licensee on an "AS IS"\par
+basis.  PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR\par
+IMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND\par
+DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS\par
+FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT\par
+\pard\nowidctlpar\sa120\qj INFRINGE ANY THIRD PARTY RIGHTS.\par
+\pard\nowidctlpar\qj 5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON\par
+FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS\par
+A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,\par
+\pard\nowidctlpar\sa120\qj OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.\par
+\pard\nowidctlpar\qj 6. This License Agreement will automatically terminate upon a material\par
+\pard\nowidctlpar\sa120\qj breach of its terms and conditions.\par
+\pard\nowidctlpar\qj 7. Nothing in this License Agreement shall be deemed to create any\par
+relationship of agency, partnership, or joint venture between PSF and\par
+Licensee.  This License Agreement does not grant permission to use PSF\par
+trademarks or trade name in a trademark sense to endorse or promote\par
+\pard\nowidctlpar\sa120\qj products or services of Licensee, or any third party.\par
+\pard\nowidctlpar\qj 8. By copying, installing or otherwise using Python, Licensee\par
+agrees to be bound by the terms and conditions of this License\par
+Agreement.\fs15\par
+}
+
\ No newline at end of file
diff --git a/build/windows/installer/installsplash.bmp b/build/windows/installer/installsplash.bmp
new file mode 100644
index 0000000..0c061e6
Binary files /dev/null and b/build/windows/installer/installsplash.bmp differ
diff --git a/build/windows/installer/installsplash_small.bmp b/build/windows/installer/installsplash_small.bmp
new file mode 100644
index 0000000..c327951
Binary files /dev/null and b/build/windows/installer/installsplash_small.bmp differ
diff --git a/build/windows/installer/lang/ca.setup.isl b/build/windows/installer/lang/ca.setup.isl
index 8e4b92e..363ce53 100644
--- a/build/windows/installer/lang/ca.setup.isl
+++ b/build/windows/installer/lang/ca.setup.isl
@@ -8,7 +8,7 @@ WinVersionTooLowError=Aquesta versi
 ;shown before the wizard starts on development versions of GIMP
 DevelopmentWarningTitle=Versi� de desenvolupament
 ;DevelopmentWarning=Aquesta �s una versi� de desenvolupament del GIMP. Aix�, algunes caracter�stiques no 
estan acabades i pot ser inestable. Si trobeu qualsevol problema, verifiqueu primer que no ha estat resolt en 
el GIT abans de contactar amb els desenvolupadors.%nAquesta versi� del GIMP no est� orientada al treball 
diari , aix� pot ser inestable i podr�eu perdre la vostra feina. Voleu continuar amb la instal�laci� de totes 
maneres?
-DevelopmentWarning=Aquesta �s una versi� de desenvolupament de l'instal�lador del GIMP. No ha estat provada 
tan com l'instal�lador estable, i aix� pot fer que el GIMP no funcioni correctament. Informeu de qualsevol 
problema que trobeu en el bugzilla del GIMP (Installer 
component):%n_https://bugzilla.gnome.org/enter_bug.cgi?product=GIMP%n%nAquests s�n alguns dels problemes 
coneguts en l'instal�lador:%n- la c�rrega de fitxers TIFF no funciona%n- les mides del fitxer no es mostren 
adequadament%nNo informeu d'aquests problemes ja que n'estem a l'aguait.%n%nVoleu continuar amb la 
instal�laci� de totes maneres?
+DevelopmentWarning=Aquesta �s una versi� de desenvolupament de l'instal�lador del GIMP. No ha estat provada 
tan com l'instal�lador estable, i aix� pot fer que el GIMP no funcioni correctament. Informeu de qualsevol 
problema que trobeu en el bugzilla del GIMP (Installer 
component):%n_https://bugzilla.gnome.org/enter_bug.cgi?product=GIMP%n%nVoleu continuar amb la instal�laci� de 
totes maneres?
 DevelopmentButtonContinue=&Continua
 DevelopmentButtonExit=Surt
 
diff --git a/build/windows/installer/lang/da.setup.isl b/build/windows/installer/lang/da.setup.isl
new file mode 100644
index 0000000..7fb9bd4
--- /dev/null
+++ b/build/windows/installer/lang/da.setup.isl
@@ -0,0 +1,113 @@
+[Messages]
+;InfoBefore page is used instead of license page because the GPL only concerns distribution, not use, and as 
such doesn't have to be accepted
+WizardInfoBefore=Licensaftale
+AboutSetupNote=Installationen er lavet af Jernej Simon�i�, jernej-gimp ena si%n%nBilledet p� �bningssiden er 
lavet af Alexia_Death%nBilledet p� afslutningssiden er lavet af Jakub Steiner
+WinVersionTooLowError=Denne version af GIMP kr�ver Windows XP med Service Pack 3, eller en nyere version af 
Windows.
+
+[CustomMessages]
+;shown before the wizard starts on development versions of GIMP
+DevelopmentWarningTitle=Development version
+;DevelopmentWarning=This is a development version of GIMP. As such, some features aren't finished, and it 
may be unstable. If you encounter any problems, first verify that they haven't already been fixed in GIT 
before you contact the developers.%nThis version of GIMP is not intended for day-to-day work, as it may be 
unstable, and you could lose your work. Do you wish to continue with installation anyway?
+DevelopmentWarning=Dette er en development version af installationsprogrammet til GIMP. Det er ikke blevet 
testet lige s� meget som det stabile installationsprogram, hvilket kan resultere i at GIMP ikke virker 
korrekt. Rapport�r venligst de problemer du st�der p� i GIMP bugzilla (Installer 
komponent):%n_https://bugzilla.gnome.org/enter_bug.cgi?product=GIMP%n%n�nsker du alligevel at forts�tte 
installation?
+DevelopmentButtonContinue=&Forts�t
+DevelopmentButtonExit=Afslut
+
+;XPSP3Recommended=Warning: you are running an unsupported version of Windows. Please update to at least 
Windows XP with Service Pack 3 before reporting any problems.
+SSERequired=Denne version af GIMP kr�ver en processor der underst�tter SSE-instruktioner.
+
+Require32BPPTitle=Problemer med sk�rmindstillinger
+Require32BPP=Installationen har registreret at Windows sk�rmindstillinger ikke anvender 32-bits-per-pixel. 
Det er kendt for at skabe stabilitetsproblemer for GIMP, s� det anbefales at �ndre sk�rmens farvedybde til 
�gte farver (32 bit) f�r du forts�tter.
+Require32BPPContinue=&Forts�t
+Require32BPPExit=A&fslut
+
+InstallOrCustomize=GIMP er nu klar til at blive installeret. Klik p� Installer nu-knappen for at installere 
med standardindstillingerne, eller klik p� Brugerdefineret-knappen hvis du �nsker at v�lge hvad der skal 
installeres.
+Install=&Installer
+Customize=&Brugerdefineret
+
+;setup types
+TypeCompact=Kompakt installation
+TypeCustom=Brugerdefineret installation
+TypeFull=Fuld installation
+
+;text above component description
+ComponentsDescription=Beskrivelse
+;components
+ComponentsGimp=GIMP
+ComponentsGimpDescription=GIMP og alle standard plugins
+ComponentsDeps=Afviklingsbiblioteker
+ComponentsDepsDescription=Afviklingsbiblioteker som GIMP anvender, inklusiv GTK+ afviklingsmilj�
+ComponentsGtkWimp=MS-Windows-motor til GTK+
+ComponentsGtkWimpDescription=Standard Windows udseende til GIMP
+ComponentsCompat=Underst�ttelse af gamle plugins
+ComponentsCompatDescription=Installer biblioteker der kr�ves til gamle tredjeparts plugins
+ComponentsTranslations=Overs�ttelser
+ComponentsTranslationsDescription=Overs�ttelser
+ComponentsPython=Python-scripting
+ComponentsPythonDescription=Giver mulighed for at bruge GIMP-plug-ins som er skrevet i 
Python-scripting-sproget.
+ComponentsGhostscript=PostScript underst�ttelse
+ComponentsGhostscriptDescription=GIMP f�s mulighed for at indl�se PostScript-filer
+;only when installing on x64 Windows
+ComponentsGimp32=Underst�ttelse af 32-bit plugins
+ComponentsGimp32Description=Inkludere filer der er n�dvendige for at anvende 32-bit plugins.%nP�kr�vet for 
underst�ttelse af Python.
+
+;additional installation tasks
+AdditionalIcons=Yderligere ikoner:
+AdditionalIconsDesktop=Opret ikon p� &skrivebordet
+AdditionalIconsQuickLaunch=Opret ikon i &Hurtig start
+
+RemoveOldGIMP=Fjern forrige GIMP-version
+
+;%1 is replaced by file name; these messages should never appear (unless user runs out of disk space at the 
exact right moment)
+ErrorChangingEnviron=Der opstod et problem ved opdatering af GIMP's-milj� i %1. Hvis du f�r fejl ved 
indl�sning af plugins, s� pr�v at afinstallere og geninstaller GIMP.
+ErrorExtractingTemp=Fejl ved udtr�kning af midlertidige data.
+ErrorUpdatingPython=Fejl ved opdatering af Python-fortolker information.
+ErrorReadingGimpRC=Der opstod en fejl ved opdatering af %1.
+ErrorUpdatingGimpRC=Der opstod en fejl ved opdatering af GIMP's konfigurationsfil %1.
+
+;displayed in Explorer's right-click menu
+OpenWithGimp=Rediger i GIMP
+
+;file associations page
+SelectAssociationsCaption=V�lg filtilknytninger
+SelectAssociationsExtensions=Filtyper:
+SelectAssociationsInfo1=V�lg de filtyper som du have tilknyttet med GIMP
+SelectAssociationsInfo2=Markerede filer �bnes i GIMP, n�r du dobbeltklikker p� dem i Stifinder.
+SelectAssociationsSelectAll=V�lg &alle
+SelectAssociationsUnselectAll=Frav�lg &alle
+SelectAssociationsSelectUnused=V�lg &ubrugte
+
+;shown on summary screen just before starting the install
+ReadyMemoAssociations=Filtyper der skal tilknyttes GIMP:
+
+RemovingOldVersion=Fjerner forrige version af GIMP:
+;%1 = version, %2 = installation directory
+;ran uninstaller, but it returned an error, or didn't remove everything
+RemovingOldVersionFailed=GIMP %1 kan ikke installeres oven p� den GIMP-version der er installeret i 
�jeblikket, og automatisk afinstallation af gamle versioner mislykkedes.%n%nFjern venligst selv den forrige 
version af GIMP, f�r denne version installeres i %2, eller v�lg brugerdefineret installation, og v�lg en 
anden installationsmappe.%n%nInstallationen vil nu blive afsluttet.
+;couldn't find an uninstaller, or found several uninstallers
+RemovingOldVersionCantUninstall=GIMP %1 kan ikke installeres oven p� den GIMP-version der er installeret i 
�jeblikket, og installationen var ikke i stand til at fastsl� hvordan den gamle version kunne 
fjernes.%n%nFjern venligst selv den forrige version af GIMP og alle tilf�jelser, f�r denne version 
installeres i %2, eller v�lg brugerdefineret installation, og v�lg en anden 
installationsmappe.%n%nInstallationen vil nu blive afsluttet.
+
+RebootRequiredFirst=Forrige GIMP-version blev fjernet, men Windows skal genstartes f�r installationen kan 
forts�tte.%n%nEfter computeren er blevet genstartet vil installationen forts�tte, n�ste gang en administrator 
logger p�.
+
+;displayed if restart settings couldn't be read, or if the setup couldn't re-run itself
+ErrorRestartingSetup=Der opstod en fejl ved genstart af installationen. (%1)
+
+;displayed while the files are being extracted; note the capitalisation!
+Billboard1=Husk: GIMP er fri software.%n%nBes�g venligst
+;www.gimp.org (displayed between Billboard1 and Billboard2)
+Billboard2=for gratis opdateringer.
+
+SettingUpAssociations=Ops�tter filtilknytninger...
+SettingUpPyGimp=Ops�tter milj� til GIMP Python-udvidelse...
+SettingUpEnvironment=Ops�tter GIMP-milj�...
+SettingUpGimpRC=Ops�tter GIMP-konfiguration til underst�ttelses af 32-bit plugin...
+
+;displayed on last page
+LaunchGimp=Start GIMP
+
+;shown during uninstall when removing add-ons
+UninstallingAddOnCaption=Fjerner add-on
+
+InternalError=Intern fejl (%1).
+
+;used by installer for add-ons (currently only help)
+DirNotGimp=GIMP ser ikke ud til at v�re installeret i den angivne mappe. Forts�t alligevel?
diff --git a/build/windows/installer/lang/de.setup.isl b/build/windows/installer/lang/de.setup.isl
new file mode 100644
index 0000000..78f6143
--- /dev/null
+++ b/build/windows/installer/lang/de.setup.isl
@@ -0,0 +1,113 @@
+[Messages]
+;InfoBefore page is used instead of license page because the GPL only concerns distribution, not use, and as 
such doesn't have to be accepted
+WizardInfoBefore=Lizenzvereinbarung
+AboutSetupNote=Setup erstellt von Jernej Simoncic, jernej-gimp ena si%n%nGrafik auf der Startseite der 
Installation von Alexia_Death%nGrafik auf der Abschlussseite der Installation von Jakub Steiner
+WinVersionTooLowError=Diese Version von GIMP ben�tigt Windows XP Service Pack 3 oder jede neuere Version von 
Windows
+
+[CustomMessages]
+;shown before the wizard starts on development versions of GIMP
+DevelopmentWarningTitle=Entwicklerversion
+;DevelopmentWarning=Dies ist eine Entwicklerversion von GIMP. Diese kann instabil sein oder unvollendete 
Funktionen enthalten. Sollten Probleme auftreten, pr�fen Sie bitte zun�chst, ob diese bereits in GIT behoben 
wurden, bevor Sie die Entwickler kontaktieren.%nDiese Version von GIMP ist nicht f�r den tagt�glichen Einsatz 
bestimmt, weil sie abst�rzen kann und Sie dadurch Daten verlieren werden. Wollen Sie die Installation dennoch 
fortsetzen?
+DevelopmentWarning=Dies ist eine Entwicklerversion des GIMP-Installers. Er wurde nicht so intensiv wie der 
stabile Installer getestet, was dazu f�hren kann, dass GIMP nicht sauber arbeitet. Bitte melden Sie Probleme, 
auf die Sie sto�en im GIMP Bugzilla 
(Installationskomponente):%n_https://bugzilla.gnome.org/enter_bug.cgi?product=GIMP%n%nWollen Sie die 
Installation dennoch fortsetzen?
+DevelopmentButtonContinue=&Weiter
+DevelopmentButtonExit=&Abbrechen
+
+;XPSP3Recommended=Achtung: Sie verwenden eine nicht unterst�tzte Version von Windows. Bitte aktualisieren 
Sie wenigstens auf Windows XP Service Pack 3 bevor Sie Probleme melden.
+SSERequired=Diese Version von GIMP ben�tigt einen Prozessor, der �ber SSE-Erweiterungen verf�gt.
+
+Require32BPPTitle=Problem mit Grafikeinstellungen
+Require32BPP=Die Installationsroutine hat festgestellt, dass Ihr Windows nicht derzeit nicht mit 32 Bit 
Farbtiefe l�uft. Diese Einstellung ist bekannt daf�r, Stabilit�tsprobleme mit GIMP zu verursachen. Wir 
empfehlen deshalb, die Farbtiefe auf 32 Bit pro Pixel einzustellen, bevor Sie fortfahren.
+Require32BPPContinue=&Weiter
+Require32BPPExit=&Abbrechen
+
+InstallOrCustomize=GIMP kann jetzt installiert werden. Klicken Sie auf Installieren, um mit den 
Standardeinstellungen zu installieren oder auf Anpassen, um festzulegen, welche Komponenten wo installiert 
werden.
+Install=&Installieren
+Customize=&Anpassen
+
+;setup types
+TypeCompact=Einfache Installation
+TypeCustom=Benutzerdefinierte Installation
+TypeFull=Komplette Installation
+
+;text above component description
+ComponentsDescription=Beschreibung
+;components
+ComponentsGimp=GIMP
+ComponentsGimpDescription=GIMP und alle Standard-Plugins
+ComponentsDeps=Laufzeitbibliotheken
+ComponentsDepsDescription=Von GIMP ben�tigte Laufzeitbibliotheken inclusive der GTK+-Bibliothek
+ComponentsGtkWimp=Windows-Engine f�r GTK+
+ComponentsGtkWimpDescription=Natives Aussehen f�r GIMP
+ComponentsCompat=Kompatibilit�tsmodus
+ComponentsCompatDescription=Bibliotheken, die von �lteren Third-Party-Plug-Ins ben�tigt werden
+ComponentsTranslations=�bersetzungen
+ComponentsTranslationsDescription=�bersetzungen
+ComponentsPython=Python Scriptumgebung
+ComponentsPythonDescription=Erlaubt Ihnen, GIMP-Plug-Ins zu nutzen, die in der Scriptsprache Python 
geschrieben wurden.
+ComponentsGhostscript=Postscript-Unterst�tzung
+ComponentsGhostscriptDescription=erm�glicht es GIMP, Postscript- und PDF-dateien zu laden
+;only when installing on x64 Windows
+ComponentsGimp32=32-Bit-Unterst�tzung
+ComponentsGimp32Description=Dateien installieren, die f�r die Nutzung von 32-Bit-Plug-Ins ben�tigt 
werden.%nF�r Python-Unterst�tzung erforderlich.
+
+;additional installation tasks
+AdditionalIcons=Zus�tzliche Verkn�pfungen:
+AdditionalIconsDesktop=&Desktop-Verkn�pfung erstellen
+AdditionalIconsQuickLaunch=&Quicklaunch-Verkn�pfung erstellen
+
+RemoveOldGIMP=�ltere GIMP-Versionen entfernen
+
+;%1 is replaced by file name; these messages should never appear (unless user runs out of disk space at the 
exact right moment)
+ErrorChangingEnviron=Es gab ein Problem bei der Aktualisierung von GIMPs Umgebung in %1. Sollten Fehler beim 
Laden von Plug-Ins auftauchen, probieren Sie, GIMP zu deinstallieren und neu zu installieren. 
+ErrorExtractingTemp=Fehler beim Entpacken tempor�rer Dateien.
+ErrorUpdatingPython=Fehler bei der Aktualisierung des Python-Interpreters.
+ErrorReadingGimpRC=Bei der Aktualisierung von %1 trat ein Fehler auf.
+ErrorUpdatingGimpRC=Bei der Aktualisierung der Konfigurationsdatei %1 trat ein Fehler auf.
+
+;displayed in Explorer's right-click menu
+OpenWithGimp=Mit GIMP �ffnen
+
+;file associations page
+SelectAssociationsCaption=Dateizuordnungen ausw�hlen
+SelectAssociationsExtensions=Erweiterungen:
+SelectAssociationsInfo1=W�hlen Sie die Dateitypen, die Sie mit GIMP �ffnen wollen
+SelectAssociationsInfo2=Ausgew�hlte Dateitypen werden nach Doppelklick im Explorer automatisch mit GIMP 
ge�ffnet.
+SelectAssociationsSelectAll=&Alle ausw�hlen
+SelectAssociationsUnselectAll=Auswahl auf&heben
+SelectAssociationsSelectUnused=&Unbenutzte ausw�hlen
+
+;shown on summary screen just before starting the install
+ReadyMemoAssociations=Dateizuordnungen f�r GIMP:
+
+RemovingOldVersion=Entfernung von �lteren GIMP-Installationen:
+;%1 = version, %2 = installation directory
+;ran uninstaller, but it returned an error, or didn't remove everything
+RemovingOldVersionFailed=GIMP %1 kann nicht �ber eine �ltere Version von GIMP installiert werden und die 
automatische Deinstallation schlug fehl.%n%nBitte entfernen Sie die vorhandene GIMP-Installation manuell 
bevor Sie diese Version nach %2 installieren, oder w�hlen Sie Benutzerdefinierte Installation und verwenden 
Sie einen anderen Installationsordner.%n%nDie Einrichtung wird nun beendet.
+;couldn't find an uninstaller, or found several uninstallers
+RemovingOldVersionCantUninstall=GIMP %1 kann nicht �ber die derzeit installierte Version von GIMP 
installiert werden und die Installationsroutine konnte die vorhandene Version nicht automatisch 
deinstallieren.%n%nBitte entfernen Sie die vorhandene GIMP-Installation manuell bevor Sie diese Version nach 
%2 installieren, oder w�hlen Sie Benutzerdefinierte Installation und verwenden Sie einen anderen 
Installationsordner.%n%nDie Einrichtung wird nun beendet.
+
+RebootRequiredFirst=Die vorhandene GIMP-Version wurde erfolgreich entfernt, aber Windows muss neu gestartet 
werden, bevor die Installation fortgef�hrt werden kann.%n%nNach dem Neustart wird die Installation 
automatisch fortgesetzt, sobald sich ein Administrator einloggt. 
+
+;displayed if restart settings couldn't be read, or if the setup couldn't re-run itself
+ErrorRestartingSetup=Bei der Fortsetzung der Installation trat ein Fehler auf (%1).
+
+;displayed while the files are being extracted; note the capitalisation!
+Billboard1=Beachten Sie: GIMP ist Freie Software.%n%nBitte besuchen Sie
+;www.gimp.org (displayed between Billboard1 and Billboard2)
+Billboard2=f�r kostenlose Aktualisierungen.
+
+SettingUpAssociations=Richte Dateizuordnungen ein...
+SettingUpPyGimp=Richte Umgebung f�r die GIMP Python-Erweiterung ein...
+SettingUpEnvironment=Richte Umgebung f�r GIMP ein...
+SettingUpGimpRC=Richte GIMP-Einstellungen f�r 32-Bit-Plug-Ins ein...
+
+;displayed on last page
+LaunchGimp=GIMP jetzt starten
+
+;shown during uninstall when removing add-ons
+UninstallingAddOnCaption=Entferne Erweiterung
+
+InternalError=Interner Fehler (%1).
+
+;used by installer for add-ons (currently only help)
+DirNotGimp=GIMP scheint nicht im ausgew�hlten Ordner installiert zu sein. Dennoch fortfahren?
diff --git a/build/windows/installer/lang/en.setup.isl b/build/windows/installer/lang/en.setup.isl
new file mode 100644
index 0000000..aed92cd
--- /dev/null
+++ b/build/windows/installer/lang/en.setup.isl
@@ -0,0 +1,112 @@
+[Messages]
+;InfoBefore page is used instead of license page because the GPL only concerns distribution, not use, and as 
such doesn't have to be accepted
+WizardInfoBefore=License Agreement
+AboutSetupNote=Setup built by Jernej Simon�i�, jernej-gimp ena si%n%nImage on opening page of Setup by 
Alexia_Death%nImage on closing page of Setup by Jakub Steiner
+WinVersionTooLowError=This version of GIMP requires Windows XP with Service Pack 3, or a newer version of 
Windows.
+
+[CustomMessages]
+;shown before the wizard starts on development versions of GIMP
+DevelopmentWarningTitle=Development version
+DevelopmentWarning=This is a development version of GIMP installer. It hasn't been tested as much as the 
stable installer, which can result in GIMP not working properly. Please report any problems you encounter in 
the GIMP bugzilla (Installer component):%n_https://bugzilla.gnome.org/enter_bug.cgi?product=GIMP%n%nDo you 
wish to continue with installation anyway?
+DevelopmentButtonContinue=&Continue
+DevelopmentButtonExit=Exit
+
+;XPSP3Recommended=Warning: you are running an unsupported version of Windows. Please update to at least 
Windows XP with Service Pack 3 before reporting any problems.
+SSERequired=This version of GIMP requires a processor that supports SSE instructions.
+
+Require32BPPTitle=Display settings problem
+Require32BPP=Setup has detected that your Windows is not running in 32 bits-per-pixel display mode. This has 
been known to cause stability problems with GIMP, so it's recommended to change the display colour depth to 
32BPP before continuing.
+Require32BPPContinue=&Continue
+Require32BPPExit=E&xit
+
+InstallOrCustomize=GIMP is now ready to be installed. Click the Install now button to install using the 
default settings, or click the Customize button if you'd like to have more control over what gets installed.
+Install=&Install
+Customize=&Customize
+
+;setup types
+TypeCompact=Compact installation
+TypeCustom=Custom installation
+TypeFull=Full installation
+
+;text above component description
+ComponentsDescription=Description
+;components
+ComponentsGimp=GIMP
+ComponentsGimpDescription=GIMP and all default plug-ins
+ComponentsDeps=Run-time libraries
+ComponentsDepsDescription=Run-time libraries used by GIMP, including GTK+ Run-time Environment
+ComponentsGtkWimp=MS-Windows engine for GTK+
+ComponentsGtkWimpDescription=Native Windows look for GIMP
+ComponentsCompat=Support for old plug-ins
+ComponentsCompatDescription=Install libraries needed by old third-party plug-ins
+ComponentsTranslations=Translations
+ComponentsTranslationsDescription=Translations
+ComponentsPython=Python scripting
+ComponentsPythonDescription=Allows you to use GIMP plugins written in Python scripting language.
+ComponentsGhostscript=PostScript support
+ComponentsGhostscriptDescription=Allow GIMP to load PostScript files
+;only when installing on x64 Windows
+ComponentsGimp32=Support for 32-bit plug-ins
+ComponentsGimp32Description=Include files necessary for using 32-bit plug-ins.%nRequired for Python support.
+
+;additional installation tasks
+AdditionalIcons=Additional icons:
+AdditionalIconsDesktop=Create a &desktop icon
+AdditionalIconsQuickLaunch=Create a &Quick Launch icon
+
+RemoveOldGIMP=Remove previous GIMP version
+
+;%1 is replaced by file name; these messages should never appear (unless user runs out of disk space at the 
exact right moment)
+ErrorChangingEnviron=There was a problem updating GIMP's environment in %1. If you get any errors loading 
the plug-ins, try uninstalling and re-installing GIMP.
+ErrorExtractingTemp=Error extracting temporary data.
+ErrorUpdatingPython=Error updating Python interpreter info.
+ErrorReadingGimpRC=There was an error updating %1.
+ErrorUpdatingGimpRC=There was an error updating GIMP's configuration file %1.
+
+;displayed in Explorer's right-click menu
+OpenWithGimp=Edit with GIMP
+
+;file associations page
+SelectAssociationsCaption=Select file associations
+SelectAssociationsExtensions=Extensions:
+SelectAssociationsInfo1=Select the file types you wish to associate with GIMP
+SelectAssociationsInfo2=This will make selected files open in GIMP when you double-click them in Explorer.
+SelectAssociationsSelectAll=Select &All
+SelectAssociationsUnselectAll=Unselect &All
+SelectAssociationsSelectUnused=Select &Unused
+
+;shown on summary screen just before starting the install
+ReadyMemoAssociations=File types to associate with GIMP:
+
+RemovingOldVersion=Removing previous version of GIMP:
+;%1 = version, %2 = installation directory
+;ran uninstaller, but it returned an error, or didn't remove everything
+RemovingOldVersionFailed=GIMP %1 cannot be installed over your currently installed GIMP version, and the 
automatic uninstall of old version has failed.%n%nPlease remove the previous version of GIMP yourself before 
installing this version in %2, or choose a Custom install, and select a different installation folder.%n%nThe 
Setup will now exit.
+;couldn't find an uninstaller, or found several uninstallers
+RemovingOldVersionCantUninstall=GIMP %1 cannot be installed over your currently installed GIMP version, and 
Setup couldn't determine how to remove the old version automatically.%n%nPlease remove the previous version 
of GIMP and any add-ons yourself before installing this version in %2, or choose a Custom install, and select 
a different installation folder.%n%nThe Setup will now exit.
+
+RebootRequiredFirst=Previous GIMP version was removed successfully, but Windows has to be restarted before 
the Setup can continue.%n%nAfter restarting your computer, Setup will continue next time an administrator 
logs in.
+
+;displayed if restart settings couldn't be read, or if the setup couldn't re-run itself
+ErrorRestartingSetup=There was an error restarting the Setup. (%1)
+
+;displayed while the files are being extracted; note the capitalisation!
+Billboard1=Remember: GIMP is Free Software.%n%nPlease visit
+;www.gimp.org (displayed between Billboard1 and Billboard2)
+Billboard2=for free updates.
+
+SettingUpAssociations=Setting up file associations...
+SettingUpPyGimp=Setting up environment for GIMP Python extension...
+SettingUpEnvironment=Setting up GIMP environment...
+SettingUpGimpRC=Setting up GIMP configuration for 32-bit plug-in support...
+
+;displayed on last page
+LaunchGimp=Launch GIMP
+
+;shown during uninstall when removing add-ons
+UninstallingAddOnCaption=Removing add-on
+
+InternalError=Internal error (%1).
+
+;used by installer for add-ons (currently only help)
+DirNotGimp=GIMP does not appear to be installed in the selected directory. Continue anyway?
diff --git a/build/windows/installer/lang/es.setup.isl b/build/windows/installer/lang/es.setup.isl
new file mode 100644
index 0000000..4aed516
--- /dev/null
+++ b/build/windows/installer/lang/es.setup.isl
@@ -0,0 +1,113 @@
+[Messages]
+;InfoBefore page is used instead of license page because the GPL only concerns distribution, not use, and as 
such doesn't have to be accepted
+WizardInfoBefore=Acuerdo de Licencia
+AboutSetupNote=Instalaci�n creada por Jernej Simon�i�, jernej-gimp ena si%n%nImagen en la p�gina de inicio 
de la Instalaci�n por Alexia_Death%nImagen en la p�gina final de la Instalaci�n por Jakub Steiner
+WinVersionTooLowError=Esta versi�n de GIMP requiere Windows XP con Service Pack 3, o una versi�n m�s 
reciente de Windows.
+
+[CustomMessages]
+;shown before the wizard starts on development versions of GIMP
+DevelopmentWarningTitle=Versi�n de Desarrollo
+;DevelopmentWarning=Esta es una versi�n de desarrollo de GIMP. Como tal, algunas caracter�sticas est�n 
incompletas y pueden ser inestables. Si usted encuentra alg�n problema, primero verifique que no haya sido 
solucionado en el GIT antes de contactar a los desarrolladores.%nEsta versi�n de GIMP no est� orientada a 
trabajo diario o a ambientes de producci�n, ya que puede ser inestable y podr�a perder su trabajo. �Desea 
continuar con la instalaci�n de todos modos?
+DevelopmentWarning=Esta es una versi�n de desarrollo del instalador de GIMP. No ha sido probado tan 
profundamente como el instalador estable, lo que puede resultar en que GIMP no funcione apropiadamente. Por 
favor reporte cualquier problema que usted encuentre en el bugzilla de GIMP (Installer 
component):%n_https://bugzilla.gnome.org/enter_bug.cgi?product=GIMP%n%n�Desea continuar con la instalaci�n de 
todos modos?
+DevelopmentButtonContinue=&Continuar
+DevelopmentButtonExit=&Salir
+
+;XPSP3Recommended=Aviso: usted est� ejecutando una versi�n no soportada de Windows. Por favor actualice al 
menos a Windows XP con Service Pack 3 antes de reportar alg�n problema.
+SSERequired=Esta versi�n de GIMP requiere un procesador que soporte instrucciones SSE.
+
+Require32BPPTitle=Problema con la configuraci�n de v�deo de su pantalla
+Require32BPP=El instalador ha detectado que su Windows no se est� ejecutando a 32 bits por p�xel de 
profundidad de color. Se sabe que esto puede causar problemas de estabilidad al GIMP, por lo que se le 
recomienda que cambie la profundidad de color de la configuraci�n de v�deo de su pantalla a 32BPP antes de 
continuar.
+Require32BPPContinue=&Continuar
+Require32BPPExit=&Salir
+
+InstallOrCustomize=GIMP est� listo para ser instalado. Haga clic en el bot�n Instalar para instalar usando 
la configuraci�n por defecto, o haga clic en el bot�n Personalizar si desea un mayor control sobre lo que va 
a instalar.
+Install=&Instalar
+Customize=&Personalizar
+
+;setup types
+TypeCompact=Instalaci�n Compacta
+TypeCustom=Instalaci�n Personalizada
+TypeFull=Instalaci�n Completa
+
+;text above component description
+ComponentsDescription=Descripci�n
+;components
+ComponentsGimp=GIMP
+ComponentsGimpDescription=GIMP y todos los plug-ins por defecto
+ComponentsDeps=Bibliotecas Run-time
+ComponentsDepsDescription=Bibliotecas Run-time usadas por GIMP, incluyendo bibliotecas Run-time del Entorno 
GTK+
+ComponentsGtkWimp=Motor(Engine) MS-Windows para GTK+
+ComponentsGtkWimpDescription=Aspecto nativo de Windows para GIMP
+ComponentsCompat=Soporte para plug-ins antiguos
+ComponentsCompatDescription=Instala bibliotecas requeridas por plug-ins antiguos de terceros
+ComponentsTranslations=Traducciones
+ComponentsTranslationsDescription=Traducciones
+ComponentsPython=Python scripting
+ComponentsPythonDescription=Le permite usar plug-ins de GIMP escritos en el lenguaje interpretado Python.
+ComponentsGhostscript=Soporte para PostScript
+ComponentsGhostscriptDescription=Permite a GIMP abrir archivos PostScript
+;only when installing on x64 Windows
+ComponentsGimp32=Soporte para plug-ins de 32-bit
+ComponentsGimp32Description=Incluye archivos necesarios para usar plug-ins de 32-bit.%nRequerido para 
soportar Python.
+
+;additional installation tasks
+AdditionalIcons=Iconos adicionales:
+AdditionalIconsDesktop=Crear un icono de acceso directo en el &Escritorio
+AdditionalIconsQuickLaunch=Crear un icono de acceso directo en la barra de Inicio &R�pido
+
+RemoveOldGIMP=Elimina versi�n anterior de GIMP
+
+;%1 is replaced by file name; these messages should never appear (unless user runs out of disk space at the 
exact right moment)
+ErrorChangingEnviron=Ocurri� un problema al actualizar el ambiente de GIMP en %1. Si encuentra alg�n error 
cargando los plug-ins, pruebe desinstalar y reinstalar GIMP.
+ErrorExtractingTemp=Error al extraer los archivos temporales.
+ErrorUpdatingPython=Error al actualizar la informaci�n del int�rprete de Python.
+ErrorReadingGimpRC=Ocurri� un problema al actualizar %1.
+ErrorUpdatingGimpRC=Ocurri� un problema al actualizar el archivo de configuraci�n de GIMP %1.
+
+;displayed in Explorer's right-click menu
+OpenWithGimp=Editar con GIMP
+
+;file associations page
+SelectAssociationsCaption=Seleccione la asociaci�n de archivos
+SelectAssociationsExtensions=Extensiones:
+SelectAssociationsInfo1=Seleccione los tipos de archivo que desea asociar con GIMP
+SelectAssociationsInfo2=Esto har� que los tipos de archivo seleccionados se abran con GIMP cuando haga doble 
clic sobre ellos en el Explorador.
+SelectAssociationsSelectAll=Seleccionar &Todos
+SelectAssociationsUnselectAll=Deseleccionar T&odos
+SelectAssociationsSelectUnused=Seleccionar los no &Utilizados
+
+;shown on summary screen just before starting the install
+ReadyMemoAssociations=Tipos de archivo que se asociar�n con GIMP:
+
+RemovingOldVersion=Eliminando versi�n anterior de GIMP:
+;%1 = version, %2 = installation directory
+;ran uninstaller, but it returned an error, or didn't remove everything
+RemovingOldVersionFailed=GIMP %1 no se puede instalar sobre la versi�n de GIMP instalado actualmente, y la 
desinstalaci�n autom�tica de la versi�n antigua ha fallado.%n%nPor favor desinstale la versi�n anterior de 
GIMP usted mismo antes de instalar esta versi�n en %2, o seleccione Instalaci�n Personalizada y escoja otra 
carpeta de instalaci�n.%n%nEl instalador se cerrar� ahora.
+;couldn't find an uninstaller, or found several uninstallers
+RemovingOldVersionCantUninstall=GIMP %1 no se puede instalar sobre la versi�n de GIMP instalado actualmente, 
y el instalador no pudo determinar como eliminar la versi�n antigua autom�ticamente.%n%nPor favor desinstale 
la versi�n anterior de GIMP y todos sus complementos(add-ons) usted mismo antes de instalar esta versi�n en 
%2, o seleccione Instalaci�n Personalizada y escoja otra carpeta de instalaci�n.%n%nEl instalador se cerrar� 
ahora.
+
+RebootRequiredFirst=La versi�n anterior de GIMP se elimin� satisfactoriamente, pero Windows necesita 
reiniciar antes de que el instalador pueda continuar.%n%nDespu�s de reiniciar su computadora, el instalador 
continuar� la pr�xima vez que un administrador inicie sesi�n en el sistema.
+
+;displayed if restart settings couldn't be read, or if the setup couldn't re-run itself
+ErrorRestartingSetup=Ocurri� un problema al reiniciar el instalador. (%1)
+
+;displayed while the files are being extracted; note the capitalisation!
+Billboard1=Recuerde: GIMP es Software Libre.%n%nPor favor visite
+;www.gimp.org (displayed between Billboard1 and Billboard2)
+Billboard2=para obtener actualizaciones gratuitas.
+
+SettingUpAssociations=Estableciendo la asociaci�n de archivos...
+SettingUpPyGimp=Estableciendo el entorno para las extensiones en Python de GIMP...
+SettingUpEnvironment=Estableciendo el entorno de GIMP...
+SettingUpGimpRC=Estableciendo la configuraci�n de GIMP para el soporte de plug-ins de 32-bit...
+
+;displayed on last page
+LaunchGimp=Iniciar GIMP
+
+;shown during uninstall when removing add-ons
+UninstallingAddOnCaption=Eliminando complementos(add-ons)
+
+InternalError=Error interno (%1).
+
+;used by installer for add-ons (currently only help)
+DirNotGimp=GIMP no parece estar instalado en el directorio seleccionado. �Desea continuar de todos modos?
diff --git a/build/windows/installer/lang/fr.setup.isl b/build/windows/installer/lang/fr.setup.isl
new file mode 100644
index 0000000..f9fcd54
--- /dev/null
+++ b/build/windows/installer/lang/fr.setup.isl
@@ -0,0 +1,113 @@
+[Messages]
+;InfoBefore page is used instead of license page because the GPL only concerns distribution, not use, and as 
such doesn't have to be accepted
+WizardInfoBefore=Contrat de licence utilisateur final
+AboutSetupNote=Installateur r�alis� par Jernej Simon�i�, jernej-gimp ena si%n%nImage d'accueil de 
l'installateur par Alexia_Death%nImage de fin de l'installateur par Jakub Steiner
+WinVersionTooLowError=Cette version de GIMP requiert Windows XP Service Pack 3, ou sup�rieur.
+
+[CustomMessages]
+;shown before the wizard starts on development versions of GIMP
+DevelopmentWarningTitle=Version de d�veloppement
+;DevelopmentWarning=This is a development version of GIMP. As such, some features aren't finished, and it 
may be unstable. If you encounter any problems, first verify that they haven't already been fixed in GIT 
before you contact the developers.%nThis version of GIMP is not intended for day-to-day work, as it may be 
unstable, and you could lose your work. Do you wish to continue with installation anyway?
+DevelopmentWarning=Ceci est une version de d�veloppement de l'installateur GIMP. Elle a moins �t� test�e que 
l'installateur stable, ce qui peut causer des dysfonctionnements de GIMP. Veuillez rapporter les probl�mes 
rencontr�s dans le bugzilla GIMP (composant: 
"Installer"):%n_https://bugzilla.gnome.org/enter_bug.cgi?product=GIMP%n%nSouhaitez-vous tout de m�me 
poursuivre l'installation�?
+DevelopmentButtonContinue=&Continuer
+DevelopmentButtonExit=Quitter
+
+;XPSP3Recommended=Warning: you are running an unsupported version of Windows. Please update to at least 
Windows XP with Service Pack 3 before reporting any problems.
+SSERequired=Cette version de GIMP requiert un processeur prenant en charger les instructions SSE.
+
+Require32BPPTitle=Probl�me de param�tres d'affichage
+Require32BPP=L'installateur a d�tect� que Windows ne s'ex�cute pas en affichage 32 bits par pixel. C'est une 
cause connue d'instabilit� de GIMP, nous vous recommandons de changer la profondeur d'affichage de couleurs 
en 32BPP avant de poursuivre.
+Require32BPPContinue=&Continuer
+Require32BPPExit=&Quitter
+
+InstallOrCustomize=GIMP est pr�t � �tre install�. Cliquez sur le bouton � Installer � pour utiliser les 
param�tres par d�faut, ou sur � Personnaliser � pour choisir plus finement ce qui sera install�.
+Install=&Installer
+Customize=&Personnaliser
+
+;setup types
+TypeCompact=Installation compacte
+TypeCustom=Installation personnalis�e
+TypeFull=Installation compl�te
+
+;text above component description
+ComponentsDescription=Description
+;components
+ComponentsGimp=GIMP
+ComponentsGimpDescription=GIMP et tous les greffons par d�faut
+ComponentsDeps=Biblioth�ques d'ex�cution
+ComponentsDepsDescription=Biblioth�ques d'ex�cution utilis�es par GIMP, y compris l'environnement 
d'ex�cution GTK+
+ComponentsGtkWimp=Moteur GTK+ pour Windows
+ComponentsGtkWimpDescription=Apparence native pour Windows
+ComponentsCompat=Prise en charge des anciens greffons
+ComponentsCompatDescription=Installe les biblioth�ques requises par d'anciens greffons
+ComponentsTranslations=Traductions
+ComponentsTranslationsDescription=Traductions
+ComponentsPython=Prise en charge des scripts Python
+ComponentsPythonDescription=Prise en charge des greffons GIMP �crits en langage Python
+ComponentsGhostscript=Prise en charge de PostScript
+ComponentsGhostscriptDescription=Permet le chargement de fichiers PostScript dans GIMP
+;only when installing on x64 Windows
+ComponentsGimp32=Gestion des greffons 32 bits
+ComponentsGimp32Description=Inclut les fichiers n�cessaires � l'utilisation de greffons 32 bits.%nRequis 
pour la prise en charge de Python.
+
+;additional installation tasks
+AdditionalIcons=Ic�nes additionnelles:
+AdditionalIconsDesktop=Cr�er une ic�ne sur le &bureau
+AdditionalIconsQuickLaunch=Cr�er une ic�ne dans la barre de lancement &rapide
+
+RemoveOldGIMP=Supprimer les versions ant�rieures de GIMP
+
+;%1 is replaced by file name; these messages should never appear (unless user runs out of disk space at the 
exact right moment)
+ErrorChangingEnviron=Une erreur s'est produite lors de la mise � jour de l'environnement de GIMP dans %1. Si 
des erreurs surviennent au chargement des greffons, tentez de d�sinstaller puis r�installer GIMP.
+ErrorExtractingTemp=Erreur durant l'extraction de donn�es temporaires.
+ErrorUpdatingPython=Erreur durant la mise � jour de l'interpr�teur Python.
+ErrorReadingGimpRC=Erreur de mise � jour du fichier %1.
+ErrorUpdatingGimpRC=Erreur de mise � jour du fichier %1 de configuration de GIMP.
+
+;displayed in Explorer's right-click menu
+OpenWithGimp=Modifier avec GIMP
+
+;file associations page
+SelectAssociationsCaption=S�lectionner les extensions � associer
+SelectAssociationsExtensions=Extensions:
+SelectAssociationsInfo1=S�lectionner les extensions de fichiers � associer � GIMP
+SelectAssociationsInfo2=En double-cliquant dans l'Explorateur Windows, les fichiers portant ces extensions 
s'ouvriront dans GIMP.
+SelectAssociationsSelectAll=&S�lectionner toutes
+SelectAssociationsUnselectAll=&D�s�lectionner toutes
+SelectAssociationsSelectUnused=S�lectionner les &inutilis�es
+
+;shown on summary screen just before starting the install
+ReadyMemoAssociations=Types de fichiers � associer � GIMP:
+
+RemovingOldVersion=D�sinstallation de la version pr�c�dente de GIMP:
+;%1 = version, %2 = installation directory
+;ran uninstaller, but it returned an error, or didn't remove everything
+RemovingOldVersionFailed=La d�sinstallation automatique de votre version de GIMP actuelle a �chou�, et GIMP 
%1 ne peut l'�craser.%n%nVeuillez d�sinstaller manuellement l'ancienne version de GIMP et relancez 
l'installation dans %2, ou choisissez l'option d'installation personnalis�e et un dossier de destination 
diff�rent.%n%nL'installateur va � pr�sent s'arr�ter.
+;couldn't find an uninstaller, or found several uninstallers
+RemovingOldVersionCantUninstall=La m�thode de d�sinstallation automatique de votre version de GIMP actuelle 
n'a pu �tre d�termin�e, et GIMP %1 ne peut �craser votre version de GIMP actuelle.%n%nVeuillez d�sinstaller 
manuellement l'ancienne version de GIMP et ses greffons avant de retenter une instalation dans %2, ou 
choisissez une installation personnalis�e et un dossier de destination diff�rent.%n%nL'installateur va � 
pr�sent s'arr�ter.
+
+RebootRequiredFirst=Votre version pr�c�dente de GIMP a �t� supprim�e avec succ�s, mais Windows requiert un 
red�marrage avant de poursuivre l'installation.%n%nApr�s le red�marrage, l'installation reprendra � la 
connexion d'un administrateur.
+
+;displayed if restart settings couldn't be read, or if the setup couldn't re-run itself
+ErrorRestartingSetup=L'installateur a rencontr� une erreur au red�marrage. (%1)
+
+;displayed while the files are being extracted; note the capitalisation!
+Billboard1=GIMP est un Logiciel Libre.%n%nVisitez
+;www.gimp.org (displayed between Billboard1 and Billboard2)
+Billboard2=pour des mises � jour gratuites.
+
+SettingUpAssociations=Associations des extensions de fichiers...
+SettingUpPyGimp=Configuration de l'environnement d'extension de GIMP en Python...
+SettingUpEnvironment=Configuration de l'environnement GIMP...
+SettingUpGimpRC=Configuration de la gestion des greffons 32 bits...
+
+;displayed on last page
+LaunchGimp=Ex�cuter GIMP
+
+;shown during uninstall when removing add-ons
+UninstallingAddOnCaption=Suppression de l'extension
+
+InternalError=Erreur interne (%1).
+
+;used by installer for add-ons (currently only help)
+DirNotGimp=GIMP ne semble pas �tre install� dans le dossier s�lectionn�. Souhaitez vous continuer�?
diff --git a/build/windows/installer/lang/hu.setup.isl b/build/windows/installer/lang/hu.setup.isl
new file mode 100644
index 0000000..e8308d6
--- /dev/null
+++ b/build/windows/installer/lang/hu.setup.isl
@@ -0,0 +1,113 @@
+[Messages]
+;InfoBefore page is used instead of license page because the GPL only concerns distribution, not use, and as 
such doesn't have to be accepted
+WizardInfoBefore=Licencmeg�llapod�s
+AboutSetupNote=A telep�t�t Jernej Simoncic, jernej-gimp ena si k�sz�tette%n%nA telep�t� kezd�lapj�n l�that� 
k�pet Alexia_Death k�sz�tette%nA telep�t� utols� lapj�n l�that� k�pet Jakub Steiner k�sz�tette
+WinVersionTooLowError=A GIMP ezen verzi�ja a Windows Windows XP Service Pack 3 vagy �jabb verzi�j�t ig�nyli.
+
+[CustomMessages]
+;shown before the wizard starts on development versions of GIMP
+DevelopmentWarningTitle=Fejleszt�i verzi�
+;DevelopmentWarning=Ez a GIMP fejleszt�i verzi�ja. Mint ilyen, egyes funkci�k nincsenek befejezve; tov�bb� a 
program instabil is lehet. Ha probl�m�t tapasztal, ellen�rizze hogy nincs-e m�r jav�tva Git-ben, miel�tt 
megkeresi a fejleszt�ket.%nA GIMP ezen verzi�j�t nem napi szint� haszn�latra sz�njuk, mivel instabil lehet �s 
emiatt elvesz�thet adatokat. Mindenk�pp folytatja a telep�t�st?
+DevelopmentWarning=Ez a GIMP telep�t�j�nek fejleszt�i verzi�ja. Nincs annyira tesztelve, mint a stabil 
telep�t�, emiatt a GIMP hib�san m�k�dhet. A tapasztalt hib�kat a GIMP Bugzill�ba jelentse (az Installer 
�sszetev� al�):%n_https://bugzilla.gnome.org/enter_bug.cgi?product=GIMP%n%nMindenk�pp folytatja a telep�t�st?
+DevelopmentButtonContinue=&Folytat�s
+DevelopmentButtonExit=Kil�p�s
+
+;XPSP3Recommended=Figyelem: a Windows nem t�mogatott verzi�j�t futtatja. Friss�tsen legal�bb a Windows XP 
Service Pack 3 kiad�sra a probl�m�k bejelent�se el�tt.
+SSERequired=A GIMP ezen verzi�ja az SSE utas�t�sokat t�mogat� processzort ig�nyel.
+
+Require32BPPTitle=Probl�ma a kijelz�be�ll�t�sokkal
+Require32BPP=A telep�t� azt �szlelte, hogy a Windows nem 32 bites sz�nm�lys�g� m�dban fut. Ez a GIMP-nek 
stabilit�si probl�m�kat okoz, �gy javasoljuk, hogy a folytat�s el�tt �ll�tsa a sz�nm�lys�get 32 bitesre.
+Require32BPPContinue=&Folytat�s
+Require32BPPExit=&Kil�p�s
+
+InstallOrCustomize=A GIMP imm�r k�sz a telep�t�sre. Kattintson a Telep�t�s gombra az alap�rtelmezett 
be�ll�t�sokkal val� telep�t�shez, vagy a Szem�lyre szab�s gombra, ha m�dos�tani szeretn� a telep�tend� 
�sszetev�k list�j�t.
+Install=&Telep�t�s
+Customize=&Szem�lyre szab�s
+
+;setup types
+TypeCompact=Kompakt telep�t�s
+TypeCustom=Egy�ni telep�t�s
+TypeFull=Teljes telep�t�s
+
+;text above component description
+ComponentsDescription=Le�r�s
+;components
+ComponentsGimp=GIMP
+ComponentsGimpDescription=A GIMP �s minden alap b�v�tm�nye
+ComponentsDeps=Fut�sidej� programk�nyvt�rak
+ComponentsDepsDescription=A GIMP �ltal haszn�lt fut�sidej� programk�nyvt�rak, bele�rtve a GTK+ k�rnyezetet
+ComponentsGtkWimp=MS-Windows motor a GTK+-hoz
+ComponentsGtkWimpDescription=Nat�v Windows megjelen�s a GIMP-hez
+ComponentsCompat=R�gi b�v�tm�nyek t�mogat�sa
+ComponentsCompatDescription=R�gi k�ls� b�v�tm�nyekhez sz�ks�ges programk�nyvt�rak telep�t�se
+ComponentsTranslations=Ford�t�sok
+ComponentsTranslationsDescription=Ford�t�sok
+ComponentsPython=Python parancsf�jlok
+ComponentsPythonDescription=Lehet�v� teszi Python nyelven �rt GIMP b�v�tm�nyek haszn�lat�t.
+ComponentsGhostscript=PostScript t�mogat�s
+ComponentsGhostscriptDescription=A GIMP bet�ltheti a PostScript f�jlokat
+;only when installing on x64 Windows
+ComponentsGimp32=32 bites b�v�tm�nyek t�mogat�sa
+ComponentsGimp32Description=A 32 bites b�v�tm�nyek t�mogat�s�hoz sz�ks�ges f�jlok.%nSz�ks�ges a Python 
t�mogat�shoz.
+
+;additional installation tasks
+AdditionalIcons=Tov�bbi ikonok:
+AdditionalIconsDesktop=&Asztali ikon l�trehoz�sa
+AdditionalIconsQuickLaunch=&Gyorsind�t� ikon l�trehoz�sa
+
+RemoveOldGIMP=Kor�bbi GIMP verzi� elt�vol�t�sa
+
+;%1 is replaced by file name; these messages should never appear (unless user runs out of disk space at the 
exact right moment)
+ErrorChangingEnviron=Hiba t�rt�nt a GIMP k�rnyezet�nek friss�t�sekor ebben: %1. Ha hiba�zeneteket kap a 
b�v�tm�nyek bet�lt�sekor, akkor pr�b�lja meg elt�vol�tani �s �jratelep�teni a GIMP-et.
+ErrorExtractingTemp=Hiba az ideiglenes adatok kibont�sakor.
+ErrorUpdatingPython=Hiba a Python �rtelmez� inform�ci�inak friss�t�sekor.
+ErrorReadingGimpRC=Hiba t�rt�nt a k�vetkez� friss�t�sekor: %1.
+ErrorUpdatingGimpRC=Hiba t�rt�nt a GIMP be�ll�t�f�jlj�nak friss�t�sekor: %1.
+
+;displayed in Explorer's right-click menu
+OpenWithGimp=Szerkeszt�s a GIMP-pel
+
+;file associations page
+SelectAssociationsCaption=V�lasszon f�jlt�rs�t�sokat
+SelectAssociationsExtensions=Kiterjeszt�sek:
+SelectAssociationsInfo1=V�lassza ki a GIMP-hez t�rs�tand� f�jlt�pusokat
+SelectAssociationsInfo2=Ennek hat�s�ra a kijel�lt t�pus� f�jlok a GIMP-ben ny�lnak meg, amikor dupl�n 
kattint r�juk az Int�z�ben.
+SelectAssociationsSelectAll=�sszes &kijel�l�se
+SelectAssociationsUnselectAll=Kijel�l�s &t�rl�se
+SelectAssociationsSelectUnused=T�&bbi kijel�l�se
+
+;shown on summary screen just before starting the install
+ReadyMemoAssociations=A GIMP-hez t�rs�tand� f�jlt�pusok:
+
+RemovingOldVersion=A GIMP kor�bbi verzi�j�nak elt�vol�t�sa:
+;%1 = version, %2 = installation directory
+;ran uninstaller, but it returned an error, or didn't remove everything
+RemovingOldVersionFailed=A GIMP %1 nem telep�thet� a jelenlegi GIMP verzi� f�l�, �s a r�gi verzi� 
automatikus elt�vol�t�sa meghi�sult.%n%nT�vol�tsa el a GIMP kor�bbi verzi�j�t, miel�tt ezt a verzi�t ide 
telep�ti: %2, vagy v�lassza az Egy�ni telep�t�st �s v�lasszon m�sik telep�t�si mapp�t.%n%nA telep�t� most 
kil�p.
+;couldn't find an uninstaller, or found several uninstallers
+RemovingOldVersionCantUninstall=A GIMP %1 nem telep�thet� a jelenlegi GIMP verzi� f�l�, �s a telep�t� nem 
tudta meg�llap�tani, hogyan t�vol�that� el a r�gi verzi� automatikusan.%n%nT�vol�tsa el a GIMP kor�bbi 
verzi�j�t �s a b�v�tm�nyeket, miel�tt ezt a verzi�t ide telep�ti: %2, vagy v�lassza az Egy�ni telep�t�st �s 
v�lasszon m�sik telep�t�si mapp�t.%n%nA telep�t� most kil�p.
+
+RebootRequiredFirst=A GIMP kor�bbi verzi�ja sikeresen elt�vol�tva, de a Windowst �jra kell ind�tani, miel�tt 
a telep�t�s folytat�dhatna.%n%nA sz�m�t�g�p �jraind�t�sa �s egy adminisztr�tor bejelentkez�se ut�n a telep�t� 
fut�sa folytat�dik.
+
+;displayed if restart settings couldn't be read, or if the setup couldn't re-run itself
+ErrorRestartingSetup=Hiba t�rt�nt a Telep�t� �jraind�t�sakor. (%1)
+
+;displayed while the files are being extracted; note the capitalisation!
+Billboard1=Ne feledje: A GIMP szabad szoftver.%n%nFriss�t�sek�rt keresse fel a
+;www.gimp.org (displayed between Billboard1 and Billboard2)
+Billboard2=oldalt.
+
+SettingUpAssociations=F�jlt�rs�t�sok be�ll�t�sa...
+SettingUpPyGimp=K�rnyezet be�ll�t�sa a GIMP Python kiterjeszt�s�hez...
+SettingUpEnvironment=A GIMP k�rnyezet�nek be�ll�t�sa...
+SettingUpGimpRC=A GIMP be�ll�t�sa a 32 bites b�v�tm�nyek t�mogat�s�hoz...
+
+;displayed on last page
+LaunchGimp=A GIMP ind�t�sa
+
+;shown during uninstall when removing add-ons
+UninstallingAddOnCaption=B�v�tm�ny elt�vol�t�sa
+
+InternalError=Bels� hiba (%1).
+
+;used by installer for add-ons (currently only help)
+DirNotGimp=A GIMP nem tal�lhat� a kijel�lt k�nyvt�rban. Mindenk�pp folytatja?
diff --git a/build/windows/installer/lang/it.setup.isl b/build/windows/installer/lang/it.setup.isl
new file mode 100644
index 0000000..877acd6
--- /dev/null
+++ b/build/windows/installer/lang/it.setup.isl
@@ -0,0 +1,113 @@
+[Messages]
+;InfoBefore page is used instead of license page because the GPL only concerns distribution, not use, and as 
such doesn't have to be accepted
+WizardInfoBefore=Accordo di licenza
+AboutSetupNote=Installazione creata da Jernej Simon�i�, jernej-gimp ena si%n%nImmagine all'avvio 
dell'installazione di Alexia_Death%nImmagine alla fine dell'installazione di Jakub Steiner
+WinVersionTooLowError=Questa versione di GIMP richiede Windows XP aggiornato al Service Pack 3, o una 
versione pi� recente di Windows.
+
+[CustomMessages]
+;shown before the wizard starts on development versions of GIMP
+DevelopmentWarningTitle=Versione di sviluppo
+;DevelopmentWarning=Questa � una versione di sviluppo di GIMP. Come tale, alcune funzioni non sono complete 
e potrebbero renderla instabile. Se si riscontrano dei problemi, verificare prima che questi non siano gi� 
stati risolti in GIT prima di contattare gli sviluppatori.%nQuesta versione di GIMP non � adatta ad un uso in 
produzione dato che, a causa della sua instabilit�, potrebbe far perdere tutto il proprio lavoro. Continuare 
ugualmente l'installazione?
+DevelopmentWarning=Questa � una versione di sviluppo dell'installatore di GIMP. Non � stata verificata come 
la versione stabile e ci� potrebbe rendere il funzionamento di GIMP instabile. Segnalare ogni eventuale 
problema riscontrato sul sito bugzilla di GIMP (Installer 
component):%n_https://bugzilla.gnome.org/enter_bug.cgi?product=GIMP%n%nContinuare ugualmente con 
l'installazione?
+DevelopmentButtonContinue=&Continua
+DevelopmentButtonExit=Esci
+
+;XPSP3Recommended=Warning: you are running an unsupported version of Windows. Please update to at least 
Windows XP with Service Pack 3 before reporting any problems.
+SSERequired=Questa versione di GIMP richiede un processore che supporti le istruzioni SSE.
+
+Require32BPPTitle=Problema di impostazione dello schermo
+Require32BPP=L'installatore ha rilevato che Windows attualmente non � in funzione in modalit� schermo a 32 
bits-per-pixel. � risaputo che ci� pu� causare problemi di instabilit� in GIMP, perci� si raccomanda di 
cambiare la profondit� di colore dello schermo a 32BPP prima di continuare.
+Require32BPPContinue=&Continua
+Require32BPPExit=E&sci
+
+InstallOrCustomize=Ora GIMP � pronto per essere installato. Fare clic sul pulsante Installa per installarlo 
usando le impostazioni predefinite, o su Personalizza se si desidera un maggior livello di controllo sui 
parametri di installazione.
+Install=&Installa
+Customize=&Personalizza
+
+;setup types
+TypeCompact=Installazione compatta
+TypeCustom=Installazione personalizzata
+TypeFull=Installazione completa
+
+;text above component description
+ComponentsDescription=Descrizione
+;components
+ComponentsGimp=GIMP
+ComponentsGimpDescription=GIMP e tutti i plugin predefiniti.
+ComponentsDeps=Librerie a run-time
+ComponentsDepsDescription=Librerie a run-time usate da GIMP, incluso l'ambiente run-time GTK+.
+ComponentsGtkWimp=Motore GTK+ per MS-Windows
+ComponentsGtkWimpDescription=Aspetto nativo Windows per GIMP.
+ComponentsCompat=Supporto per i vecchi plugin
+ComponentsCompatDescription=Installazione delle librerie necessarie per i vecchi plug-in di terze parti.
+ComponentsTranslations=Traduzioni
+ComponentsTranslationsDescription=Traduzioni.
+ComponentsPython=Scripting Python
+ComponentsPythonDescription=Consente di usare i plugin di GIMP scritti in liguaggio Python.
+ComponentsGhostscript=Supporto PostScript
+ComponentsGhostscriptDescription=Permette a GIMP di caricare file in formato PostScript.
+;only when installing on x64 Windows
+ComponentsGimp32=Supporto per i plugin a 32-bit
+ComponentsGimp32Description=Include i file necessari per l'utilizzo di plugin a 32-bit.%n� richiesto per il 
supporto Python.
+
+;additional installation tasks
+AdditionalIcons=Icone aggiuntive:
+AdditionalIconsDesktop=Crea un'icona sul &desktop
+AdditionalIconsQuickLaunch=Crea un'icona di &avvio rapido
+
+RemoveOldGIMP=Rimuove la versione precedente di GIMP
+
+;%1 is replaced by file name; these messages should never appear (unless user runs out of disk space at the 
exact right moment)
+ErrorChangingEnviron=Si � verificato un problema aggiornando l'ambiente di GIMP in %1. Se si verificano 
errori caricando i plugin, provare a disinstallare e reinstallare GIMP.
+ErrorExtractingTemp=Errore durante l'estrazione dei dati temporanei.
+ErrorUpdatingPython=Errore aggiornando i dati dell'interprete Python.
+ErrorReadingGimpRC=Si � verificato un errore aggiornando %1.
+ErrorUpdatingGimpRC=Si � verificato un errore aggiornando il file di configurazione di GIMP %1.
+
+;displayed in Explorer's right-click menu
+OpenWithGimp=Modifica con GIMP
+
+;file associations page
+SelectAssociationsCaption=Seleziona le associazioni di file
+SelectAssociationsExtensions=Estensioni:
+SelectAssociationsInfo1=Selezionare i tipi di file che si desidera associare a GIMP
+SelectAssociationsInfo2=Ci� render� possibile aprire automaticamente i file selezionati in GIMP quando si fa 
doppio clic in Explorer.
+SelectAssociationsSelectAll=Seleziona &tutti
+SelectAssociationsUnselectAll=Deseleziona tutt&i
+SelectAssociationsSelectUnused=Seleziona i non &usati
+
+;shown on summary screen just before starting the install
+ReadyMemoAssociations=Tipi di file da associare a GIMP:
+
+RemovingOldVersion=Rimozione della versione precedente di GIMP:
+;%1 = version, %2 = installation directory
+;ran uninstaller, but it returned an error, or didn't remove everything
+RemovingOldVersionFailed=GIMP %1 non pu� essere installato sopra la versione di GIMP installata attualmente, 
e la funzione di disinstallazione automatica della vecchia versione ha fallito.%n%nRimuovere la versione 
precedente di GIMP manualmente prima di installare questa versione in %2, o scegliere l'installazione 
personalizzata selezionando una diversa cartella di installazione.%n%nL'installatore ora verr� chiuso.
+;couldn't find an uninstaller, or found several uninstallers
+RemovingOldVersionCantUninstall=GIMP %1 non pu� essere installato sopra la versione di GIMP installata 
attualmente, e l'installatore non riesce a determinare come rimuovere automaticamente la vecchia 
versione.%n%nRimuovere manualmente la versione precedente di GIMP e ogni elemento che sia stato aggiunto 
prima di installare questa versione in %2, o scegliere l'installazione personalizzata selezionando una 
diversa cartella di installazione.%n%nL'installatore ora verr� chiuso.
+
+RebootRequiredFirst=La versione precedente di GIMP � stata rimossa con successo, ma Windows deve essere 
riavviato prima che l'installatore possa continuare.%n%nDopo il riavvio del computer, l'installatore 
continuer� non appena un amministratore entrer� nel sistema.
+
+;displayed if restart settings couldn't be read, or if the setup couldn't re-run itself
+ErrorRestartingSetup=Si � verificato un errore durante il riavvio dell'installatore. (%1)
+
+;displayed while the files are being extracted; note the capitalisation!
+Billboard1=Ricorda: GIMP � Software Libero.%n%nVisitare
+;www.gimp.org (displayed between Billboard1 and Billboard2)
+Billboard2=per aggiornarlo in libert�.
+
+SettingUpAssociations=Impostaione delle associazioni di file...
+SettingUpPyGimp=Impostazione dell'ambiente per l'estensione Python di GIMP...
+SettingUpEnvironment=Impostazione dell'ambiente di GIMP...
+SettingUpGimpRC=Impostazione del supporto ai plugin di GIMP a 32-bit...
+
+;displayed on last page
+LaunchGimp=Avvio di GIMP
+
+;shown during uninstall when removing add-ons
+UninstallingAddOnCaption=Rimozione aggiunte
+
+InternalError=Errore interno (%1).
+
+;used by installer for add-ons (currently only help)
+DirNotGimp=GIMP non sembra essere installato nella directory selezionata. Continuare ugualmente?
diff --git a/build/windows/installer/lang/nl.setup.isl b/build/windows/installer/lang/nl.setup.isl
new file mode 100644
index 0000000..4ce0455
--- /dev/null
+++ b/build/windows/installer/lang/nl.setup.isl
@@ -0,0 +1,113 @@
+[Messages]
+;InfoBefore page is used instead of license page because the GPL only concerns distribution, not use, and as 
such doesn't have to be accepted
+WizardInfoBefore=Licentieovereenkomst
+AboutSetupNote=Installatieprogramma gecre�erd door Jernej Simon�i�, jernej-gimp ena si%n%nAfbeelding op 
startpagina van het installatieprogramma door Alexia_Death%nAfbeelding op eindpagina van het 
instalatieprogramma door Jakub Steiner
+WinVersionTooLowError=Deze versie van GIMP vereist Windows XP met Service Pack 3, of een recentere versie 
van Windows.
+
+[CustomMessages]
+;shown before the wizard starts on development versions of GIMP
+DevelopmentWarningTitle=Ontwikkelaarsversie
+;DevelopmentWarning=Dit is een ontwikkelingsversie van GIMP. Zodanig zijn sommige functies nog niet klaar en 
kan het onstabiel zijn. Als je problemen tegenkomt, controleer eerst of het nog niet is gerepareerd in GIT 
voordat u contact opneemt met de ontwikkelaars.%nDeze versie van GIMP is niet bedoeld voor dagelijks werk, 
omdat het onstabiel kan zijn en u zou u werk kunnen verliezen. Wenst u alsnog verder te gaan met de 
installatie?
+DevelopmentWarning=Dit is een ontwikkelingsversie van GIMP installatie. Het is nog niet zoveel getest als de 
stabiele installatie, dit kan resulteren in GIMP niet optimaal werken. Gelieve problemen die je ondervindt te 
rapporteren in de GIMP bugzilla 
(Installatiecomponent):%n_https://bugzilla.gnome.org/enter_bug.cgi?product=GIMP%n%nWenst u alsnog verder te 
gaan met de installatie?
+DevelopmentButtonContinue=&Verdergaan
+DevelopmentButtonExit=Sluiten
+
+;XPSP3Recommended=Waarschuwing: u gebruikt een niet ondersteunde versie van Windows. Gelieve deze bij te 
werken tot minstens Windows XP met Service Pack 3 voor het rapporteren van problemen.
+SSERequired=Deze versie van GIMP vereist een processor die SSE instructies ondersteunt.
+
+Require32BPPTitle=Probleem beeldscherminstellingen
+Require32BPP=Het installatieprogramma heeft gedetecteerd dat u Windows momenteel niet werkt in 32-bit 
kleurdiepte beeldmodus. Dit is geweten om stabiliteitsproblemen met GIMP te veroorzaken, dus het is 
aangeraden om de beeldscherm kleurdiepte te veranderen naar 32-bit voordat u verder gaat.
+Require32BPPContinue=&Verdergaan
+Require32BPPExit=&Sluiten
+
+InstallOrCustomize=GIMP is nu klaar voor installatie. Klik op de Installeer knop voor de standaard 
instellingen, of klik de Aanpassen knop om meer controle te hebben over wat er wordt ge�nstalleerd.
+Install=&Installeer
+Customize=&Aanpassen
+
+;setup types
+TypeCompact=Eenvoudige installatie
+TypeCustom=Aangepaste installatie
+TypeFull=Volledige installatie
+
+;text above component description
+ComponentsDescription=Beschrijving
+;components
+ComponentsGimp=GIMP
+ComponentsGimpDescription=GIMP en alle standaard plugins
+ComponentsDeps=Run-time bibliotheken
+ComponentsDepsDescription=Run-time bibliotheken gebruikt door GIMP, inclusief GTK+ Run-time Environment
+ComponentsGtkWimp=Windows engine voor GTK+
+ComponentsGtkWimpDescription=Natieve Windows uiterlijk voor GIMP
+ComponentsCompat=Ondersteuning voor oude plugins
+ComponentsCompatDescription=Installeer bibliotheken nodig door oude plugins van derden
+ComponentsTranslations=Vertalingen
+ComponentsTranslationsDescription=Vertalingen
+ComponentsPython=Python scripting
+ComponentsPythonDescription=Staat toe van GIMP plugins geschreven in Python scripting taal te gebruiken.
+ComponentsGhostscript=PostScript ondersteuning
+ComponentsGhostscriptDescription=Staat GIMP toe PostScript bestanden te laden
+;only when installing on x64 Windows
+ComponentsGimp32=Ondersteuning voor 32-bit plugins
+ComponentsGimp32Description=Installeer bestanden nodig voor gebruik van 32-bit plugins.%nVereist voor Python 
ondersteuning.
+
+;additional installation tasks
+AdditionalIcons=Extra snelkoppelingen:
+AdditionalIconsDesktop=Snelkoppeling op het &bureaublad aanmaken
+AdditionalIconsQuickLaunch=Snelkoppeling in &Quicklaunch aanmaken
+
+RemoveOldGIMP=Verwijder oudere GIMP versies
+
+;%1 is replaced by file name; these messages should never appear (unless user runs out of disk space at the 
exact right moment)
+ErrorChangingEnviron=Er was een probleem tijdens het bijwerken van GIMP's omgeving in %1. Als u een probleem 
krijgt bij het laden van plugins, probeer GIMP te verwijderen en opnieuw te installeren.
+ErrorExtractingTemp=Er was een fout uitpakken tijdelijke gegevens.
+ErrorUpdatingPython=Er was een fout bijwerken Python interpreter info.
+ErrorReadingGimpRC=Er was een fout tijdens het bijwerken van %1.
+ErrorUpdatingGimpRC=Er was een fout tijdens het bijwerken van GIMP's configuratie bestand %1.
+
+;displayed in Explorer's right-click menu
+OpenWithGimp=Bewerken met GIMP
+
+;file associations page
+SelectAssociationsCaption=Selecteer bestandskoppelingen
+SelectAssociationsExtensions=Bestandsextensies:
+SelectAssociationsInfo1=Selecteer de bestandsextensie die u wenst te associ�ren met GIMP
+SelectAssociationsInfo2=Dit zal geselecteerde bestanden openen in GIMP wanneer u deze dubbelklikt in 
Verkenner.
+SelectAssociationsSelectAll=&Alles selecteren
+SelectAssociationsUnselectAll=&Alles deselecteren
+SelectAssociationsSelectUnused=&Ongebruikte selecteren
+
+;shown on summary screen just before starting the install
+ReadyMemoAssociations=Bestandtypes te associeren met GIMP:
+
+RemovingOldVersion=Removing previous version of GIMP:
+;%1 = version, %2 = installation directory
+;ran uninstaller, but it returned an error, or didn't remove everything
+RemovingOldVersionFailed=GIMP %1 kan niet worden ge�nstalleerd over u huidige ge�nstalleerde GIMP versie en 
de automatische verwijdering van de oude versie is gefaald.%n%nGelieve zelf de vorige versie van GIMP te 
verwijderen voordat u deze installeerd in %2 of kies een Aangepaste installatie en selecteer een andere 
installatie map.%n%nHet installatieprogramma zal nu afsluiten.
+;couldn't find an uninstaller, or found several uninstallers
+RemovingOldVersionCantUninstall=GIMP %1 kan niet worden ge�nstalleerd over u huidige ge�nstalleerde GIMP 
versie en het installatieprogramma kon geen manier vinden om de oude versie automatisch te 
verwijderen.%n%nGelieve zelf de vorige versie van GIMP en plugins te verwijderen voordat u deze versie in %2 
installeert of kies een Aangepaste installatie en selecteer een andere map.%n%nHet installatieprogramma zal 
nu afsluiten.
+
+RebootRequiredFirst=De vorige versie van GIMP wer succesvol verwijderd, maar Windows moet heropstarten 
voordat de installatie kan verdergaan.%n%nNa het heropstarten van u computer zal de installatie verdergaan de 
volgende keer een administrator inlogt.
+
+;displayed if restart settings couldn't be read, or if the setup couldn't re-run itself
+ErrorRestartingSetup=Er was een fout bij het heropstarten van de installatie. (%1)
+
+;displayed while the files are being extracted; note the capitalisation!
+Billboard1=Remember: GIMP is Vrije Software.%n%nBezoek alstublieft
+;www.gimp.org (displayed between Billboard1 and Billboard2)
+Billboard2=voor gratis bijwerkingen.
+
+SettingUpAssociations=Bezig met het opzetten van bestandskoppelingen...
+SettingUpPyGimp=Bezig met het opzetten van omgeving voor GIMP Python extensie...
+SettingUpEnvironment=Bezig met het opzetten van GIMP omgeving...
+SettingUpGimpRC=Bezig met het opzetten van GIMP configuratie voor 32-bit plugin ondersteuning...
+
+;displayed on last page
+LaunchGimp=GIMP starten
+
+;shown during uninstall when removing add-ons
+UninstallingAddOnCaption=Verwijderen van add-on
+
+InternalError=Interne fout (%1).
+
+;used by installer for add-ons (currently only help)
+DirNotGimp=GIMP schijnt niet in de geselecteerde map te worden ge�nstalleerd. Toch doorgaan?
\ No newline at end of file
diff --git a/build/windows/installer/lang/pl.setup.isl b/build/windows/installer/lang/pl.setup.isl
index 1664bae..9e9b97f 100644
--- a/build/windows/installer/lang/pl.setup.isl
+++ b/build/windows/installer/lang/pl.setup.isl
@@ -8,7 +8,7 @@ WinVersionTooLowError=Ta wersja programu GIMP wymaga systemu Windows XP z Servic
 ;shown before the wizard starts on development versions of GIMP
 DevelopmentWarningTitle=Wersja rozwojowa
 ;DevelopmentWarning=To jest rozwojowa wersja programu GIMP. Niekt�re funkcje nie zosta�y jeszcze uko�czone, 
a ca�y program mo�e by� niestabilny. W razie wyst�pienia b��du przed skontaktowaniem si� z programistami 
nale�y sprawdzi�, czy nie zosta� on naprawiony w repozytorium git.%nTa wersja programu GIMP nie jest 
przeznaczona do codziennej pracy z powodu niestabilno�ci i mo�liwo�ci utraty danych. Kontynuowa� instalacj� 
mimo to?
-DevelopmentWarning=To jest rozwojowa wersja instalatora programu GIMP. Nie zosta�a ona przetestowana tak 
dok�adnie, jak stabilna wersja, co mo�e powodowa� nieprawid�owe dzia�anie programu GIMP. Prosimy zg�asza� 
napotkane b��dy w systemie Bugzilla programu GIMP (komponent 
\"Installer\"):%n_https://bugzilla.gnome.org/enter_bug.cgi?product=GIMP%n%nNiekt�re b��dy instalatora s� ju� 
znane:%n- wczytywanie plik�w TIFF nie dzia�a%n- rozmiary plik�w nie s� poprawnie wy�wietlane%nprosimy nie 
zg�asza� tych problem�w, poniewa� s� one ju� znane programistom.%n%nKontynuowa� instalacj� mimo to?
+DevelopmentWarning=To jest rozwojowa wersja instalatora programu GIMP. Nie zosta�a ona przetestowana tak 
dok�adnie, jak stabilna wersja, co mo�e powodowa� nieprawid�owe dzia�anie programu GIMP. Prosimy zg�asza� 
napotkane b��dy w systemie Bugzilla programu GIMP (komponent 
\"Installer\"):%n_https://bugzilla.gnome.org/enter_bug.cgi?product=GIMP%n%nKontynuowa� instalacj� mimo to?
 DevelopmentButtonContinue=&Kontynuuj
 DevelopmentButtonExit=Zako�cz
 
diff --git a/build/windows/installer/lang/pt_BR.setup.isl b/build/windows/installer/lang/pt_BR.setup.isl
index 94b7e90..d5ca6f6 100644
--- a/build/windows/installer/lang/pt_BR.setup.isl
+++ b/build/windows/installer/lang/pt_BR.setup.isl
@@ -7,8 +7,8 @@ WinVersionTooLowError= Esta vers
 [CustomMessages]
 ;shown before the wizard starts on development versions of GIMP
 DevelopmentWarningTitle=Vers�o de Desenvolvimento
-DevelopmentWarning=Esta � uma vers�o de desenvolvimento do GIMP. Sendo assim, algumas funcionalidades n�o 
est�o prontas, e ele pode ser inst�vel. Se voc� encontrar algum problema, primeiro verifique se ele j� n�o 
foi arrumado no GIT antes de contatar os desenvolvedores.%nEsta vers�o do GIMP n�o foi feita para ser usada 
no dia a dia, uma vez que ela pode ser inst�vel e pode por o seu trabalho em risco. Voc� quer continuar com 
esta instala��o mesmo assim?
-;DevelopmentWarning=Esta � uma vers�o de desenvolvimento do instalador do GIMP. Ela n�o foi testada tanto 
quanto o instalador est�vel, o que pode resultar no GIMP n�o ser corretamente instalado. Por favor, reporte 
quaisquer problemas que voc� encontrar no bugizlla do GIMP (Installer 
component):%n_https://bugzilla.gnome.org/enter_bug.cgi?product=GIMP%n%nH� alguns problemas conhecidos neste 
instalador:%n- Arquivos TIFF n�o est�o abrindo%n-Tamanho dos arquivos n�o est�o sendo exibidos 
corretamente%nPor favor n�o reporte esses problemas, uma vez que j� estamos a par dos mesmos.%n%nVoc� quer 
continuar com a instala��o mesmo assim?
+;DevelopmentWarning=Esta � uma vers�o de desenvolvimento do GIMP. Sendo assim, algumas funcionalidades n�o 
est�o prontas, e ele pode ser inst�vel. Se voc� encontrar algum problema, primeiro verifique se ele j� n�o 
foi arrumado no GIT antes de contatar os desenvolvedores.%nEsta vers�o do GIMP n�o foi feita para ser usada 
no dia a dia, uma vez que ela pode ser inst�vel e pode por o seu trabalho em risco. Voc� quer continuar com 
esta instala��o mesmo assim?
+DevelopmentWarning=Esta � uma vers�o de desenvolvimento do instalador do GIMP. Ela n�o foi testada tanto 
quanto o instalador est�vel, o que pode resultar no GIMP n�o ser corretamente instalado. Por favor, reporte 
quaisquer problemas que voc� encontrar no bugizlla do GIMP (Installer 
component):%n_https://bugzilla.gnome.org/enter_bug.cgi?product=GIMP%n%nVoc� quer continuar com a instala��o 
mesmo assim?
 DevelopmentButtonContinue=&Continuar
 DevelopmentButtonExit=Sair
 
@@ -44,8 +44,8 @@ ComponentsTranslations=Tradu
 ComponentsTranslationsDescription=Tradu��es
 ComponentsPython=Suporte a scripts em Python
 ComponentsPythonDescription=Permite que voc� use plug-ins escritos na linguagem Python(necess�rio para 
algumas funcionalidades).
-ComponentsGhostscript=Suporte a PostScript
-ComponentsGhostscriptDescription=Permite que o GIMP possa abrir arquivos PostScript
+ComponentsGhostscript=Suporte a Postscript
+ComponentsGhostscriptDescription=Permite que o GIMP possa abrir arquivos Postscript
 ;only when installing on x64 Windows
 ComponentsGimp32=Suporte a plug-ins de 32-bit
 ComponentsGimp32Description=Inclui arquivos necess�rios para o uso de plug-ins de 32bits.%nNecess�rio para o 
suporte a Python.
diff --git a/build/windows/installer/lang/ru.setup.isl b/build/windows/installer/lang/ru.setup.isl
new file mode 100644
index 0000000..15e5c2d
--- /dev/null
+++ b/build/windows/installer/lang/ru.setup.isl
@@ -0,0 +1,113 @@
+[Messages]
+;InfoBefore page is used instead of license page because the GPL only concerns distribution, not use, and as 
such doesn't have to be accepted
+WizardInfoBefore=������������ ����������
+AboutSetupNote=��������� ������ ��������� Jernej Simoncic, jernej-gimp ena si%n%n����� ����������� � ������ 
��������� Alexia_Death%n����� ����������� � ����� ��������� Jakub Steiner
+WinVersionTooLowError=��� ���� ������ GIMP ��������� Windows XP � ������� ���������� 3 (Service Pack 3), ��� 
����� ����������� ������ Windows.
+
+[CustomMessages]
+;shown before the wizard starts on development versions of GIMP
+DevelopmentWarningTitle=��������������� ������
+;DevelopmentWarning=��� ��������������� ������ GIMP. ��������� ������� �� ��������, � ��� ����� �������� 
�����������. ���� � ��� ��������� �����-���� ��������, ������� ���������, ��� ��� ��� �� ���� ���������� � 
GIT, ������ ��� ��������� � ��������������.%n��� ������ GIMP �� ������������� ��� ������������ ������, ��� 
��� ��� ����� �������� �����������, � �� ������ �������� ���� ������. �� ������ ���������� ���������?
+DevelopmentWarning=��� ��������������� ������ GIMP. ��� �� ���� �������������� ��� ��, ��� ���������� 
������, � ���������� GIMP ����� �� �������� ������� �������. ������ ��� �������� � ��������� ��������� � GIMP 
bugzilla (��������� Installer):%n_https://bugzilla.gnome.org/enter_bug.cgi?product=GIMP%n%n�� ������ 
���������� ���������?
+DevelopmentButtonContinue=&�����
+DevelopmentButtonExit=&�����
+
+;XPSP3Recommended=��������: �� ����������� ���������������� ������ Windows. ����������, �������� �� �� 
Windows XP � ������� ���������� 3 (Service Pack 3), ������ ��� �������� � ���������.
+SSERequired=���� ������ GIMP ��������� ��������� � ���������� ���������� SSE.
+
+Require32BPPTitle=�������� � ����������� �������
+Require32BPP=��������� ��������� ����������, ��� ���� Windows ������ �������� � ��������� ������������� �� 
32 ����. ��������, ��� ��� ����� ������� ������������ ������ GIMP, ������� ������������� ������� �������� 
������������� �� 32 ���� � ���������� �������, ������ ��� ����������.
+Require32BPPContinue=&�����
+Require32BPPExit=&�����
+
+InstallOrCustomize=GIMP ����� � ���������. ������� ���������� ��� ��������� � ����������� �� ���������, ��� 
��������� ��� ������ �����������.
+Install=&����������
+Customize=&���������
+
+;setup types
+TypeCompact=���������� ���������
+TypeCustom=���������� ���������
+TypeFull=������ ���������
+
+;text above component description
+ComponentsDescription=��������
+;components
+ComponentsGimp=GIMP
+ComponentsGimpDescription=GIMP � ��� ����������� �������
+ComponentsDeps=���������� ������� ����������
+ComponentsDepsDescription=���������� ������� ���������� ��� GIMP, ������� ��������� ������� ���������� GTK+
+ComponentsGtkWimp=������ MS-Windows ��� GTK+
+ComponentsGtkWimpDescription=��������������� ������� ��� ��� GIMP
+ComponentsCompat=��������� ������ ��������
+ComponentsCompatDescription=��������� ���������, ����������� ��� ������ ��������� ��������
+ComponentsTranslations=�����������
+ComponentsTranslationsDescription=�����������
+ComponentsPython=������������� �� Python
+ComponentsPythonDescription=������������ ������ �������� GIMP, ���������� �� ����� Python.
+ComponentsGhostscript=��������� PostScript
+ComponentsGhostscriptDescription=������������ �������� ������ PostScript � GIMP
+;only when installing on x64 Windows
+ComponentsGimp32=��������� 32-������ ��������
+ComponentsGimp32Description=�������� �����, ����������� ��� ������������� 32-������ ��������.%n���������� 
��� ��������� Python.
+
+;additional installation tasks
+AdditionalIcons=�������������� ������:
+AdditionalIconsDesktop=������� ������ �� &������� �����
+AdditionalIconsQuickLaunch=������� ������ � &������ �������� �������
+
+RemoveOldGIMP=������� ���������� ������ GIMP
+
+;%1 is replaced by file name; these messages should never appear (unless user runs out of disk space at the 
exact right moment)
+ErrorChangingEnviron=�������� �������� ��� ���������� ��������� GIMP � %1. ���� �� �������� ������ ��� 
�������� ��������, ���������� ������� � ������ ���������� GIMP.
+ErrorExtractingTemp=������ ��� ���������� ��������� ������.
+ErrorUpdatingPython=������ ���������� ���������� �������������� Python.
+ErrorReadingGimpRC=�������� ������ ��� ���������� %1.
+ErrorUpdatingGimpRC=�������� ������ ��� ���������� ����� �������� GIMP %1.
+
+;displayed in Explorer's right-click menu
+OpenWithGimp=�������� � GIMP
+
+;file associations page
+SelectAssociationsCaption=����� �������� ����������
+SelectAssociationsExtensions=����������:
+SelectAssociationsInfo1=�������� ���� ������, ������� ����� ������������� � GIMP
+SelectAssociationsInfo2=��� �������� ��������� ��������� ����� � GIMP �� �������� ������ � ����������.
+SelectAssociationsSelectAll=&������� ���
+SelectAssociationsUnselectAll=&����� ���
+SelectAssociationsSelectUnused=������� &��������������
+
+;shown on summary screen just before starting the install
+ReadyMemoAssociations=���� ������, ������� ����� ������������� � GIMP:
+
+RemovingOldVersion=�������� ���������� ������ GIMP:
+;%1 = version, %2 = installation directory
+;ran uninstaller, but it returned an error, or didn't remove everything
+RemovingOldVersionFailed=GIMP %1 �� ����� ���� ���������� ������ ��� ������������� ������ GIMP, � 
�������������� �������� ������ ������ �� �������.%n%n����������, ������� ���������� ������ GIMP �������, 
������ ��� ������������� ��� ������ � %2, ��� ������� ��������� � ������, � �������� ������ ����� ��� 
���������.%n%n������ ��������� ����� ��������.
+;couldn't find an uninstaller, or found several uninstallers
+RemovingOldVersionCantUninstall=GIMP %1 �� ����� ���� ���������� ������ ��� ������������� ������ GIMP, � 
��������� ��������� �� ����� ����������, ��� ������� ���������� ������ �������������.%n%n����������, ������� 
���������� ������ GIMP � ��� ���������� �������, ������ ��� ������������� ��� ������ � %2, ��� ������� 
��������� � ������, � �������� ������ ����� ��� ���������.%n%n������ ��������� ����� ��������.
+
+RebootRequiredFirst=���������� ������ GIMP ������� �������, �� ���������� ������������� Windows ����� 
������������ ���������.%n%n����� ������������ ���������� ��������� ����� ����������, ��� ������ ����� 
������������ � ������� �������������� ������ � �������.
+
+;displayed if restart settings couldn't be read, or if the setup couldn't re-run itself
+ErrorRestartingSetup=�������� ������ ��� ����������� ��������� ���������. (%1)
+
+;displayed while the files are being extracted; note the capitalisation!
+Billboard1=�������: GIMP �������� ��������� ����������� ������������.%n%n����������, ��������
+;www.gimp.org (displayed between Billboard1 and Billboard2)
+Billboard2=��� ���������� ����������.
+
+SettingUpAssociations=��������� �������� ����������...
+SettingUpPyGimp=��������� ��������� ��� ���������� GIMP Python...
+SettingUpEnvironment=��������� ��������� GIMP...
+SettingUpGimpRC=��������� �������� GIMP ��� ��������� 32-������ ��������...
+
+;displayed on last page
+LaunchGimp=��������� GIMP
+
+;shown during uninstall when removing add-ons
+UninstallingAddOnCaption=�������� ����������
+
+InternalError=���������� ������ (%1).
+
+;used by installer for add-ons (currently only help)
+DirNotGimp=�������, GIMP �� ��� ���������� � ��������� �������. ��� ����� ����������?
diff --git a/build/windows/installer/lang/sl.setup.isl b/build/windows/installer/lang/sl.setup.isl
new file mode 100644
index 0000000..fedf279
--- /dev/null
+++ b/build/windows/installer/lang/sl.setup.isl
@@ -0,0 +1,105 @@
+[Messages]
+WizardInfoBefore=Licen�na pogodba
+AboutSetupNote=Namestitveni program je pripravil Jernej Simon�i�, jernej-gimp ena si%n%nSlika na prvi strani 
namestitvenega programa: Alexia_Death%nSlika na zadnji strani namestitvenega programa: Jakub Steiner
+WinVersionTooLowError=Ta razli�ica programa GIMP potrebuje Windows XP s servisnim paketom 3, ali novej�o 
razli�ico programa Windows.
+
+[CustomMessages]
+DevelopmentWarningTitle=Razvojna razli�ica
+;DevelopmentWarning=To je razvojna razli�ica programa GIMP, zaradi �esar nekateri deli programa morda niso 
dokon�ani, poleg tega pa je program lahko tudi nestabilen. V primeru te�av preverite, da le-te niso bile �e 
odpravljene v GIT-u, preden stopite v stik z razvijalci.%nZaradi nestabilnosti ta razli�ica ni namenjena za 
vsakodnevno delo, saj lahko kadarkoli izgubite svoje delo. Ali �elite vseeno nadaljevati z namestitvijo?
+DevelopmentWarning=To je razvojna razli�ica namestitvenega programa za GIMP, ki �e ni tako preizku�ena kot 
obi�ajna razli�ica. �e naletite na kakr�ne koli te�ave pri namestitvi, jih prosim sporo�ite v Bugzilli 
(komponenta Installer):%n_https://bugzilla.gnome.org/enter_bug.cgi?product=GIMP%n%nAli �elite vseeno 
nadaljevati z namestitvijo?
+DevelopmentButtonContinue=&Nadaljuj
+DevelopmentButtonExit=Prekini
+
+;XPSP3Recommended=Opozorilo: uporabljate nepodprto razli�ico sistema Windows. Prosimo, namestite servisni 
paket 3 za Windows XP ali novej�o razli�ico sistema Windows preden nas obve��ate o kakr�nih koli te�avah.
+SSERequired=Ta razli�ica programa GIMP potrebuje procesor, ki ima podporo za SSE ukaze.
+
+Require32BPPTitle=Te�ava z zaslonskimi nastavitvami
+Require32BPP=Namestitveni program je zaznal, da Windows ne deluje v 32-bitnem barvnem na�inu. Tak�ne 
nastavitve lahko povzro�ijo nestabilnost programa GIMP, zato je priporo�ljivo da pred nadaljevanjem 
spremenite barvno globino zaslona na 32 bitov.
+Require32BPPContinue=&Nadaljuj
+Require32BPPExit=I&zhod
+
+InstallOrCustomize=GIMP je pripravljen na namestitev. Kliknite gumb Namesti za namestitev s privzetimi 
nastavitvami, ali pa kliknite gumb Po meri, �e bi radi imeli ve� nadzora nad mo�nostmi namestitve.
+Install=Namest&i
+Customize=&Po meri
+
+TypeCompact=Minimalna namestitev
+TypeCustom=Namestitev po meri
+TypeFull=Polna namestitev
+
+;components
+ComponentsDescription=Opis
+ComponentsGimp=GIMP
+ComponentsGimpDescription=GIMP z vsemi privzetimi vti�niki
+ComponentsDeps=Podporne knji�nice
+ComponentsDepsDescription=Podporne knji�nice za GIMP, vklju�no z okoljem GTK+
+ComponentsGtkWimp=Tema MS-Windows za GTK+
+ComponentsGtkWimpDescription=Windows izgled za GIMP
+ComponentsCompat=Podpora za stare vti�nike
+ComponentsCompatDescription=Podporne knji�nice za stare zunanje vti�nike za GIMP
+ComponentsTranslations=Prevodi
+ComponentsTranslationsDescription=Prevodi
+ComponentsPython=Podpora za Python
+ComponentsPythonDescription=Omogo�a izvajanje vti�nikov za GIMP, napisanih v programskem jeziku Python
+ComponentsGhostscript=Podpora za PostScript
+ComponentsGhostscriptDescription=Omogo�i nalaganje PostScript datotek
+ComponentsGimp32=Podpora za 32-bitne vti�nike
+ComponentsGimp32Description=Omogo�a uporabo 32-bitnih vti�nikov.%nPotrebno za uporabo podpore za Python
+
+AdditionalIcons=Dodatne ikone:
+AdditionalIconsDesktop=Ustvari ikono na n&amizju
+AdditionalIconsQuickLaunch=Ustvari ikono v vrstici &hitri zagon
+
+RemoveOldGIMP=Odstrani prej�njo razli�ico programa GIMP
+
+;%1 is replaced by file name; these messages should never appear (unless user runs out of disk space at the 
exact right moment)
+ErrorChangingEnviron=Pri�lo je do te�av pri posodabljanju okolja za GIMP v datoteki %1. �e se pri nalaganju 
vti�nikov pojavijo sporo�ila o napakah, poizkusite odstraniti in ponovno namestiti GIMP.
+ErrorExtractingTemp=Pri�lo je do napake pri raz�irjanju za�asnih datotek.
+ErrorUpdatingPython=Pri�lo je do napake pri nastavljanju podpore za Python.
+ErrorReadingGimpRC=Pri�lo je do napake pri branju datoteke %1.
+ErrorUpdatingGimpRC=Pri�lo je do napake pri pisanju nastavitev v datoteko %1.
+
+;displayed in Explorer's right-click menu
+OpenWithGimp=Uredi z GIMP-om
+
+SelectAssociationsCaption=Povezovanje vrst datotek
+SelectAssociationsExtensions=Pripone:
+SelectAssociationsInfo1=Izberite vste datotek, ki bi jih radi odpirali z GIMP-om
+SelectAssociationsInfo2=Tu lahko izberete vrste datotek, ki se bodo odprle v GIMP-u, ko jih dvokliknete v 
Raziskovalcu
+SelectAssociationsSelectAll=Izber&i vse
+SelectAssociationsUnselectAll=Po�ist&i izbor
+SelectAssociationsSelectUnused=Ne&uporabljene
+
+ReadyMemoAssociations=Vrste datotek, ki jih bo odpiral GIMP:
+
+RemovingOldVersion=Odstranjevanje starej�ih razli�ic programa GIMP:
+;%1 = version, %2 = installation directory
+;ran uninstaller, but it returned an error, or didn't remove everything
+RemovingOldVersionFailed=Te razli�ice programa GIMP ne morete namestiti preko prej�nje razli�ice, 
namestitvenemu programu pa prej�nje razli�ice ni uspelo samodejno odstraniti.%n%nPred ponovnim name��anjem te 
razli�ice programa GIMP v mapo %2, odstranite prej�njo razli�ico, ali pa izberite namestitev po meri, in GIMP 
%1 namestite v drugo mapo.%n%nNamestitveni program se bo zdaj kon�al.
+;couldn't find an uninstaller, or found several uninstallers
+RemovingOldVersionCantUninstall=Te razli�ice programa GIMP ne morete namestiti preko prej�nje razli�ice, 
namestitvenemu programu pa ni uspelo ugotoviti, kako prej�njo razli�ico odstraniti samodejno.%n%nPred 
ponovnim name��anjem te razli�ice programa GIMP v mapo %2, odstranite prej�njo razli�ico, ali pa izberite 
namestitev po meri, in GIMP %1 namestite v drugo mapo.%n%nNamestitveni program se bo zdaj kon�al.
+
+RebootRequiredFirst=Prej�nja razli�ica programa GIMP je bila uspe�no odstranjena, vendar je pred 
nadaljevanjem namestitve potrebno znova zagnati Windows.%n%nNamestitveni program bo dokon�al namestitev po 
ponovnem zagonu, ko se prvi� prijavi administrator.
+
+;displayed while the files are being extracted
+Billboard1=GIMP spada med prosto programje.%n%nObi��ite
+;www.gimp.org (displayed between Billboard1 and Billboard2)
+Billboard2=za brezpla�ne posodobitve.
+
+;displayed if restart settings couldn't be read, or if the setup couldn't re-run itself
+ErrorRestartingSetup=Pri�lo je do napake pri ponovnem zagonu namestitvenega programa. (%1)
+
+SettingUpAssociations=Nastavljam povezane vrste datotek...
+SettingUpPyGimp=Pripravljam okolje za GIMP Python...
+SettingUpEnvironment=Pripravljam okolje za GIMP...
+SettingUpGimpRC=Pripravljam nastavitve za 32-bitne vti�nike...
+
+;displayed on last page
+LaunchGimp=Za�eni GIMP
+
+;shown during uninstall when removing add-ons
+UninstallingAddOnCaption=Odstranjujem dodatek
+
+InternalError=Notranja napaka (%1).
+
+;used by installer for add-ons (currently only help)
+DirNotGimp=GIMP o�itno ni name��en v izbrani mapi. �elite kljub temu nadaljevati?
diff --git a/build/windows/installer/rebootcontinue.isi b/build/windows/installer/rebootcontinue.isi
new file mode 100644
index 0000000..2097ad0
--- /dev/null
+++ b/build/windows/installer/rebootcontinue.isi
@@ -0,0 +1,131 @@
+#if 0
+[Code]
+#endif
+
+function Quote(const S: String): String;
+begin
+       Result := '"' + S + '"';
+end;
+
+
+function AddParam(const S, P, V: String): String;
+begin
+       if V <> '""' then
+               Result := S + ' /' + P + '=' + V;
+end;
+
+
+function AddSimpleParam(const S, P: String): String;
+begin
+       Result := S + ' /' + P;
+end;
+
+
+procedure CreateRunOnceEntry;
+var    RunOnceData, SetupRestartData: String;
+       i: Integer;
+begin
+       DebugMsg('CreateRunOnceEntry','Preparing for restart');
+
+       //RunOnce command-line is limited to 256 characters, so keep it to the bare minimum required to start 
setup
+       RunOnceData := Quote(ExpandConstant('{srcexe}')) + ' /resumeinstall=1';
+       RunOnceData := AddParam(RunOnceData, 'LANG', ExpandConstant('{language}'));
+
+       SetupRestartData := Quote(ExpandConstant('{srcexe}')) + ' /resumeinstall=2';
+       SetupRestartData := AddParam(SetupRestartData, 'LANG', ExpandConstant('{language}'));
+       SetupRestartData := AddParam(SetupRestartData, 'DIR', Quote(WizardDirValue));
+       //SetupRestartData := AddParam(SetupRestartData, 'GROUP', Quote(WizardGroupValue));
+       //if WizardNoIcons then
+       //      SetupRestartData := AddSimpleParam(SetupRestartData, 'NOICONS');
+       SetupRestartData := AddParam(SetupRestartData, 'TYPE', Quote(WizardSetupType(False)));
+       SetupRestartData := AddParam(SetupRestartData, 'COMPONENTS', Quote(WizardSelectedComponents(False)));
+       SetupRestartData := AddParam(SetupRestartData, 'TASKS', Quote(WizardSelectedTasks(False)));
+       SetupRestartData := AddParam(SetupRestartData, 'ASSOC', Quote(Associations_GetSelected()));
+
+       if Force32bitInstall then
+               SetupRestartData := AddSimpleParam(SetupRestartData, '32');
+
+       if ExpandConstant('{param:log|*}') <> '*' then
+       begin
+               SetupRestartData := AddParam(SetupRestartData, 'LOG', Quote(ExpandConstant('{param:log|*}')));
+       end else
+       begin
+               for i := 0 to ParamCount() do
+                       if LowerCase(ParamStr(i)) = '/log' then
+                       begin
+                               RunOnceData := AddSimpleParam(RunOnceData,'LOG'); //multiple logs are created 
in %TEMP% when no filename is given
+                               SetupRestartData := AddSimpleParam(SetupRestartData,'LOG');
+                               break;
+                       end;
+       end;
+
+       DebugMsg('CreateRunOnceEntry','RunOnce: ' + RunOnceData);
+       RegWriteStringValue(HKLM, 'Software\Microsoft\Windows\CurrentVersion\RunOnce', RunOnceName, 
RunOnceData);
+
+       DebugMsg('CreateRunOnceEntry','RunOnce: ' + SetupRestartData);
+       RegWriteStringValue(HKLM, 'Software\' + RunOnceName, '', SetupRestartData);
+end;
+
+
+procedure RestartMyself();
+var CmdLine: String;
+       ResultCode: Integer;
+begin
+       DebugMsg('RestartMyself','Continuing install after reboot (reexecuting setup)');
+
+       if RegValueExists(HKLM, 'Software\' + RunOnceName, '') then
+       begin
+               if RegQueryStringValue(HKLM, 'Software\' + RunOnceName, '', CmdLine) then
+               begin
+                       RegDeleteKeyIncludingSubkeys(HKLM, 'Software\' + RunOnceName); //clean up
+                       if not Exec('>',CmdLine,'',SW_SHOW,ewNoWait,ResultCode) then //bonus: don't block 
shell from loading, since RunOnce installer exits immediately
+                               
MsgBox(FmtMessage(CustomMessage('ErrorRestartingSetup'),[IntToStr(ResultCode)]), mbError, mb_Ok);
+               
+                       DebugMsg('RestartMyself','Result of running ' + CmdLine + ': ' + 
IntToStr(ResultCode));
+
+               end else
+               begin
+                       MsgBox(FmtMessage(CustomMessage('ErrorRestartingSetup'),['-2']), mbError, mb_Ok);
+                       DebugMsg('RestartMyself','Error reading HKLM\'+RunOnceName);
+               end;
+       end else
+       begin
+               MsgBox(FmtMessage(CustomMessage('ErrorRestartingSetup'),['-1']), mbError, mb_Ok);
+               DebugMsg('RestartMyself','HKLM\'+RunOnceName + ' not found in Registy');
+       end;
+end;
+
+
+function RestartSetupAfterReboot(): Boolean;
+begin
+
+       if ExpandConstant('{param:resumeinstall|0}') = '1' then //called from RunOnce
+       begin
+               Result := False; //setup will just re-execute itself in this run
+
+               RestartMyself();
+
+               DebugMsg('RestartSetupAfterReboot','Phase 1 complete, exiting');
+               exit;
+
+       end else
+       if ExpandConstant('{param:resumeinstall|0}') = '2' then //setup re-executed itself
+       begin
+
+               Result := True;
+               InstallMode := imRebootContinue;
+               DebugMsg('RestartSetupAfterReboot','Continuing install after reboot');
+
+       end else
+       begin
+               Result := True; //normal install
+       end;
+
+       if InstallMode <> imRebootContinue then
+               if RegValueExists(HKLM, 'Software\Microsoft\Windows\CurrentVersion\RunOnce', RunOnceName) then
+               begin
+                       DebugMsg('RestartSetupAfterReboot','System must be restarted first');
+                       MsgBox(CustomMessage('RebootRequiredFirst'), mbError, mb_Ok);
+                       Result := False;
+               end;
+end;
diff --git a/build/windows/installer/setup.ini b/build/windows/installer/setup.ini
new file mode 100644
index 0000000..389bd4b
--- /dev/null
+++ b/build/windows/installer/setup.ini
@@ -0,0 +1,29 @@
+[File Associations]
+1=GIMP image:XCF
+2=Adobe Photoshop(tm) image:PSD
+3=Alias|Wavefront PowerAnimator:matte:mask:alpha:als:PIX
+4=Compuserve GIF:GIF
+5=Corel PaintShopPro image:PSP:PSPIMAGE:TUB
+6=Digital Imaging and Communications in Medicine:DICOM:DCM
+7=Fax G3 Image file:g3
+8=Flexible Image Transport System:fit:fits
+9=GIMP brush pipe:gih
+10=GIMP brush:gbr:gpb
+11=GIMP pattern:pat
+12=JPEG image:JPEG:JPG
+13=KISS CEL:CEL
+14=Netpbm format:pnm:ppm:pgm:pbm
+15=Portable Network Graphics:PNG
+16=PostScript, Encapsulated PostScript:PS:EPS
+17=Scalable Vector Graphics:svg
+18=SGI image format:SGI:RGB:BW:ICON
+19=SUN Raster Image:ras:im1:im8:im24:im32:rs
+20=Tagged Image File:tif:tiff
+21=TrueVision Targa:tga
+22=Windows and OS/2 Bitmaps:BMP
+23=Windows Icon:ICO
+24=Windows Metafile:wmf
+25=X10 and X11 Bitmap:xbm:icon:bitmap
+26=X Pixmap:xpm
+27=X Window Dump:xwd
+28=ZSoft Paintbrush image:PCX
diff --git a/build/windows/installer/uninst.isi b/build/windows/installer/uninst.isi
new file mode 100644
index 0000000..4b2fc88
--- /dev/null
+++ b/build/windows/installer/uninst.isi
@@ -0,0 +1,269 @@
+#if 0
+[Code]
+#endif
+
+function SplitRegParams(const pInf: String; var oRootKey: Integer; var oKey,oValue: String): Boolean;
+var    sRootKey: String;
+       d: Integer;
+begin
+       Result := False;
+
+       d := Pos('/',pInf);
+       if d = 0 then
+       begin
+               DebugMsg('SplitRegParams','Error: malformed line (no /)');
+               exit;
+       end;
+
+       sRootKey := Copy(pInf,1,d - 1);
+       oKey := Copy(pInf,d + 1,Length(pInf));
+
+       if oValue <> 'nil' then
+       begin
+               d := RevPos('\',oKey);
+               if d = 0 then
+               begin
+                       DebugMsg('SplitRegParams','Error: malformed line (no \)');
+                       exit;
+               end;
+
+               oValue := Decode(Copy(oKey,d+1,Length(oKey)));
+               oKey := Copy(oKey,1,d-1);
+       end;
+
+       DebugMsg('SplitRegParams','Root: '+sRootKey+', Key:'+oKey + ', Value:'+oValue);
+
+       case sRootKey of
+       'HKCR': oRootKey := HKCR;
+       'HKLM': oRootKey := HKLM;
+       'HKU': oRootKey := HKU;
+       'HKCU': oRootKey := HKCU;
+       else
+               begin
+                       DebugMsg('SplitRegParams','Unrecognised root key: ' + sRootKey);
+                       exit;
+               end;
+       end;
+
+       Result := True;
+end;
+
+
+procedure UninstInfRegKey(const pInf: String; const pIfEmpty: Boolean);
+var    sKey,sVal: String;
+       iRootKey: Integer;
+begin
+       sVal := 'nil';
+       if not SplitRegParams(pInf,iRootKey,sKey,sVal) then
+               exit;
+
+       if pIfEmpty then
+       begin
+               if not RegDeleteKeyIfEmpty(iRootKey,sKey) then
+                       DebugMsg('UninstInfRegKey','RegDeleteKeyIfEmpty failed');
+       end
+       else
+       begin
+               if not RegDeleteKeyIncludingSubkeys(iRootKey,sKey) then
+                       DebugMsg('UninstInfRegKey','RegDeleteKeyIncludingSubkeys failed');
+       end;
+end;
+
+
+procedure UninstInfRegVal(const pInf: String);
+var    sKey,sVal: String;
+       iRootKey: Integer;
+begin
+       if not SplitRegParams(pInf,iRootKey,sKey,sVal) then
+               exit;
+
+       if not RegDeleteValue(iRootKey,sKey,sVal) then
+               DebugMsg('UninstInfREG','RegDeleteKeyIncludingSubkeys failed');
+end;
+
+
+procedure UninstInfFile(const pFile: String);
+begin
+       DebugMsg('UninstInfFile','File: '+pFile);
+
+       if not DeleteFile(pFile) then
+               DebugMsg('UninstInfFile','DeleteFile failed');
+end;
+
+
+procedure UninstInfDir(const pDir: String);
+begin
+       DebugMsg('UninstInfDir','Dir: '+pDir);
+
+       if not RemoveDir(pDir) then
+               DebugMsg('UninstInfDir','RemoveDir failed');
+end;
+
+
+procedure CreateMessageForm(var frmMessage: TForm; const pMessage: String);
+var lblMessage: TNewStaticText;
+begin
+       frmMessage := CreateCustomForm();
+       with frmMessage do
+       begin
+               BorderStyle := bsDialog;
+
+               ClientWidth := ScaleX(300);
+               ClientHeight := ScaleY(48);
+
+               Caption := CustomMessage('UninstallingAddOnCaption');
+
+               Position := poScreenCenter;
+
+               BorderIcons := [];
+       end;
+
+       lblMessage := TNewStaticText.Create(frmMessage);
+       with lblMessage do
+       begin
+               Parent := frmMessage;
+               AutoSize := True;
+               Caption := pMessage;
+               Top := (frmMessage.ClientHeight - Height) div 2;
+               Left := (frmMessage.ClientWidth - Width) div 2;
+               Visible := True;
+       end;
+       
+       frmMessage.Show();
+
+    frmMessage.Refresh();
+end;
+
+
+procedure UninstInfRun(const pInf: String);
+var Description,Prog,Params: String;
+       Split, ResultCode, Ctr: Integer;
+       frmMessage: TForm;      
+begin
+       DebugMsg('UninstInfRun',pInf);
+
+       Split := Pos('/',pInf);
+       if Split <> 0 then
+       begin
+               Description := Copy(pInf, 1, Split - 1);
+               Prog := Copy(pInf, Split + 1, Length(pInf));
+       end else
+       begin
+               Prog := pInf;
+               Description := '';
+       end;
+
+       Split := Pos('/',Prog);
+       if Split <> 0 then
+       begin
+               Params := Copy(Prog, Split + 1, Length(Prog));
+               Prog := Copy(Prog, 1, Split - 1);
+       end else
+       begin
+               Params := '';
+       end;
+
+       if not UninstallSilent then //can't manipulate uninstaller messages, so create a form instead
+               CreateMessageForm(frmMessage,Description);
+
+       DebugMsg('UninstInfRun','Running: ' + Prog + '; Params: ' + Params);
+
+       if Exec(Prog,Params,'',SW_SHOW,ewWaitUntilTerminated,ResultCode) then
+       begin
+               DebugMsg('UninstInfRun','Exec result: ' + IntToStr(ResultCode));
+               
+               Ctr := 0;
+               while FileExists(Prog) do //wait a few seconds for the uninstaller to be deleted - since this 
is done by a program
+               begin                     //running from a temporary directory, the uninstaller we ran above 
will exit some time before
+                       Sleep(UNINSTALL_CHECK_TIME);           //it's removed from disk
+                       Inc(Ctr);
+                       if Ctr = (UNINSTALL_MAX_WAIT_TIME/UNINSTALL_CHECK_TIME) then //don't wait more than 5 
seconds
+                               break;
+               end;
+
+       end else
+               DebugMsg('UninstInfRun','Exec failed: ' + IntToStr(ResultCode) + ' (' + 
SysErrorMessage(ResultCode) + ')');
+
+       if not UninstallSilent then
+               frmMessage.Free();
+end;
+
+(*
+uninst.inf documentation:
+
+- Delete Registry keys (with all subkeys):
+  RegKey:<RootKey>/<SubKey>
+    RootKey = HKCR, HKLM, HKCU, HKU
+    SubKey = subkey to delete (warning: this will delete all keys under subkey, so be very careful with it)
+
+- Delete empty registry keys:
+  RegKeyEmpty:<RootKey>/<SubKey>
+    RootKey = HKCR, HKLM, HKCU, HKU
+    SubKey = subkey to delete if empty
+
+- Delete values from registry:
+  RegVal:<RootKey>/<SubKey>/Value
+    RootKey = HKCR, HKLM, HKCU, HKU
+    SubKey = subkey to delete Value from
+    Value = value to delete; \ and % must be escaped as %5c and %25
+
+- Delete files:
+  File:<Path>
+    Path = full path to file
+
+- Delete empty directories:
+  Dir:<Path>
+
+- Run program with parameters:
+  Run:<description>/<path>/<params>
+
+Directives are parsed from the end of the file backwards as the first step of uninstall.
+
+*)
+procedure ParseUninstInf();
+var i,d: Integer;
+       sWhat: String;
+begin
+       for i := GetArrayLength(asUninstInf) - 1 downto 0 do
+       begin
+
+               DebugMsg('ParseUninstInf',asUninstInf[i]);
+
+               if (Length(asUninstInf[i]) = 0) or (asUninstInf[i][1] = '#') then //skip comments and empty 
lines
+                       continue;
+
+               d := Pos(':',asUninstInf[i]);
+               if d = 0 then
+               begin
+                       DebugMsg('ParseUninstInf','Malformed line: ' + asUninstInf[i]);
+                       continue;
+               end;
+
+               sWhat := Copy(asUninstInf[i],d+1,Length(asUninstInf[i]));
+
+               case Copy(asUninstInf[i],1,d) of
+               'RegKey:': UninstInfRegKey(sWhat,False);
+               'RegKeyEmpty:': UninstInfRegKey(sWhat,True);
+               'RegVal:': UninstInfRegVal(sWhat);
+               'File:': UninstInfFile(sWhat);
+               'Dir:': UninstInfDir(sWhat);
+               'Run:': UninstInfRun(sWhat);
+               end;
+
+       end;
+
+end;
+
+procedure CurUninstallStepChanged(CurStep: TUninstallStep);
+begin
+       DebugMsg('CurUninstallStepChanged','');
+       case CurStep of
+       usUninstall:
+       begin
+               LoadStringsFromFile(ExpandConstant('{app}\uninst\uninst.inf'),asUninstInf);
+               ParseUninstInf();
+       end;
+       //usPostUninstall:
+       end;
+end;
+
diff --git a/build/windows/installer/utils.isi b/build/windows/installer/utils.isi
new file mode 100644
index 0000000..dc04c26
--- /dev/null
+++ b/build/windows/installer/utils.isi
@@ -0,0 +1,148 @@
+#if 0
+[Code]
+#endif
+
+procedure DebugMsg(Const pProc,pMsg: String);
+begin
+       Log('[Code] ' + pProc + #9 + pMsg);
+end;
+
+
+function BoolToStr(const b: Boolean): String;
+begin
+       if b then
+               Result := 'True'
+       else
+               Result := 'False';
+end;
+
+
+function RevPos(const SearchStr, Str: string): Integer;
+var i: Integer;
+begin
+
+       if Length(SearchStr) < Length(Str) then
+               for i := (Length(Str) - Length(SearchStr) + 1) downto 1 do
+               begin
+
+                       if Copy(Str, i, Length(SearchStr)) = SearchStr then
+                       begin
+                               Result := i;
+                               exit;
+                       end;
+
+               end;
+
+       Result := 0;
+end;
+
+
+function Replace(pSearchFor, pReplaceWith, pText: String): String;
+begin
+    StringChangeEx(pText,pSearchFor,pReplaceWith,True);
+
+       Result := pText;
+end;
+
+
+function Count(What, Where: String): Integer;
+begin
+       Result := 0;
+       if Length(What) = 0 then
+               exit;
+
+       while Pos(What,Where)>0 do
+       begin
+               Where := Copy(Where,Pos(What,Where)+Length(What),Length(Where));
+               Result := Result + 1;
+       end;
+end;
+
+
+//split text to array
+procedure Explode(var ADest: TArrayOfString; aText, aSeparator: String);
+var tmp: Integer;
+begin
+       if aSeparator='' then
+               exit;
+
+       SetArrayLength(ADest,Count(aSeparator,aText)+1)
+
+       tmp := 0;
+       repeat
+               if Pos(aSeparator,aText)>0 then
+               begin
+
+                       ADest[tmp] := Copy(aText,1,Pos(aSeparator,aText)-1);
+                       aText := Copy(aText,Pos(aSeparator,aText)+Length(aSeparator),Length(aText));
+                       tmp := tmp + 1;
+
+               end else
+               begin
+
+                        ADest[tmp] := aText;
+                        aText := '';
+
+               end;
+       until Length(aText)=0;
+end;
+
+
+function String2Utf8(const pInput: String): AnsiString;
+var Output: AnsiString;
+       ret, outLen, nulPos: Integer;
+begin
+       outLen := WideCharToMultiByte(CP_UTF8, 0, pInput, -1, Output, 0, 0, 0);
+       Output := StringOfChar(#0,outLen);
+       ret := WideCharToMultiByte(CP_UTF8, 0, pInput, -1, Output, outLen, 0, 0);
+
+       if ret = 0 then
+               RaiseException('WideCharToMultiByte failed: ' + IntToStr(GetLastError));
+
+       nulPos := Pos(#0,Output) - 1;
+       if nulPos = -1 then
+               nulPos := Length(Output);
+
+    Result := Copy(Output,1,nulPos);
+end;
+
+
+function Utf82String(const pInput: AnsiString): String;
+var Output: AnsiString;
+       ret, outLen, nulPos: Integer;
+begin
+       outLen := MultiByteToWideChar(CP_UTF8, 0, pInput, -1, Output, 0);
+       Output := StringOfChar(#0,outLen);
+       ret := MultiByteToWideChar(CP_UTF8, 0, pInput, -1, Output, outLen);
+
+       if ret = 0 then
+               RaiseException('MultiByteToWideChar failed: ' + IntToStr(GetLastError));
+
+       nulPos := Pos(#0,Output) - 1;
+       if nulPos = -1 then
+               nulPos := Length(Output);
+
+    Result := Copy(Output,1,nulPos);
+end;
+
+
+function SaveStringToUTF8File(const pFileName, pS: String; const pAppend: Boolean): Boolean;
+begin
+       Result := SaveStringToFile(pFileName, String2Utf8(pS), pAppend);
+end;
+
+
+function LoadStringFromUTF8File(const pFileName: String; var oS: String): Boolean;
+var Utf8String: AnsiString;
+begin
+       Result := LoadStringFromFile(pFileName, Utf8String);
+       oS := Utf82String(Utf8String);
+end;
+
+
+procedure StatusLabel(const Status1,Status2: string);
+begin
+       WizardForm.StatusLabel.Caption := Status1;
+       WizardForm.FilenameLabel.Caption := Status2;
+       WizardForm.Refresh();
+end;
diff --git a/build/windows/installer/version.isi b/build/windows/installer/version.isi
new file mode 100644
index 0000000..28f5f8e
--- /dev/null
+++ b/build/windows/installer/version.isi
@@ -0,0 +1,25 @@
+//set the version string
+
+#define public
+
+#if !Defined(VERSION)
+  #error "VERSION must be defined"
+#endif
+
+#define public
+//used in the component list
+
+#define MAJOR=Copy(VERSION,1,Pos(".",VERSION)-1)
+#define MINOR=Copy(VERSION,Pos(".",VERSION)+1)
+#define MICRO=Copy(MINOR,Pos(".",MINOR)+1)
+#expr MINOR=Copy(MINOR,1,Pos(".",MINOR)-1)
+
+#if Int(MINOR) % 2 == 1
+ #define DEVEL="-dev"
+ //used for setting up file associations
+ #define ASSOC_VERSION=MAJOR + "." + MINOR
+#else
+ #define DEVEL=""
+ //new setup is incompatible with GIMP 2.6 and older installers
+ #define ASSOC_VERSION=MAJOR + ".8"
+#endif
diff --git a/build/windows/installer/wilber.bmp b/build/windows/installer/wilber.bmp
new file mode 100644
index 0000000..2d15f3b
Binary files /dev/null and b/build/windows/installer/wilber.bmp differ
diff --git a/build/windows/installer/windows-installer-intro-big.bmp 
b/build/windows/installer/windows-installer-intro-big.bmp
new file mode 100644
index 0000000..73fda81
Binary files /dev/null and b/build/windows/installer/windows-installer-intro-big.bmp differ
diff --git a/build/windows/installer/windows-installer-intro-small.bmp 
b/build/windows/installer/windows-installer-intro-small.bmp
new file mode 100644
index 0000000..a531ed3
Binary files /dev/null and b/build/windows/installer/windows-installer-intro-small.bmp differ



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]